OpenClawSkills
GitHub
チャンネル • 5分で読める

Discord

Discord Bot の対応状況、機能、設定。

ステータス:DMとサーバー(guild)テキストチャンネルで使用可能、公式Discord bot gatewayベース。

Tutorial.step

クイックセットアップ

1. Discord botを作成し、bot tokenをコピーします。

2. Discord Developer Portalで<strong>Message Content Intent</strong>を有効にします(allowlistやニックネーム解決を使用する場合は、<strong>Server Members Intent</strong>も有効にすることをお勧めします)。

3. OpenClawにtokenを設定します:

- Environment variable: <code>DISCORD_BOT_TOKEN=...</code>

- または設定:<code>channels.discord.token: "..."</code>。

- 両方を設定した場合、設定が優先されます(環境変数はデフォルトアカウントのフォールバックのみ)。

4. botをサーバーに招待し、メッセージの読み書き権限を付与します(DMのみを使用する場合は、テスト用のプライベートサーバーを作成することもできます)。

5. Gatewayを起動します。

6. DMはデフォルトでペアリング:最初の連絡でペアリングコードが送信され、承認後にのみメッセージが処理されます。

Minimum configuration:

Json5
{
  channels: {
    discord: {
      enabled: true,
      token: "YOUR_BOT_TOKEN",
    },
  },
}
Tutorial.step

Goals

- DiscordのDMまたはサーバーチャンネルを通じてOpenClawとチャットします。

- DMはデフォルトでエージェントのメインセッションに折りたたまれます(デフォルト'<code>'agent:main:main'</code>');サーバーチャンネルは'<code>'agent:'<agentId>':discord:channel:'<channelId>''</code>'に分離されます(表示名は'<code>'discord:'<guildSlug>'#'<channelSlug>''</code>'を使用)。

- グループDMはデフォルトで無視されます;<code>channels.discord.dm.groupEnabled</code>で有効にし、<code>channels.discord.dm.groupChannels</code>でさらに制限できます。

- 決定論的ルーティングを維持:返信は常にソースチャンネルに戻ります。

Tutorial.step

How It Works

1. Discord Application → Botを作成し、必要なintents(DM/サーバーメッセージ/メッセージコンテンツ)を有効にし、bot tokenを取得します。

2. botをサーバーに招待し、ターゲットチャンネルでのメッセージの読み取り/送信権限を付与します。

3. OpenClawで<code>channels.discord.token</code>を設定します(または<code>DISCORD_BOT_TOKEN</code>をフォールバックとして使用)。

4. Gatewayを起動:tokenが利用可能で<code>channels.discord.enabled</code>が<code>false</code>でない場合、Discordチャンネルが自動的に起動します。

- 環境変数のみでも動作します:<code>DISCORD_BOT_TOKEN</code>を設定します(設定ブロックを書く必要はありません)。

5. DM配信ターゲットは'<code>'user:'<id>''</code>'(または'<code>''<@id>''</code>'メンション)を使用します。生の数値IDはあいまいで拒否されます。

6. サーバーチャンネル配信は'<code>'channel:'<channelId>''</code>'を使用します。デフォルトでメンションが必要で、guildまたはチャンネルごとに設定可能です。

7. DMはデフォルトでセキュリティゲートキーパー:'<code>'channels.discord.dm.policy'</code>'(デフォルト'<code>'"pairing"'</code>')。未知の送信者はペアリングコードを受け取ります(1時間有効)、承認:'<code>'openclaw pairing approve discord '<code>''</code>'。

- 誰でもDMできるようにする場合:<code>channels.discord.dm.policy="open"</code>および<code>channels.discord.dm.allowFrom=["*"]</code>。

- 厳密なallowlistの場合:<code>channels.discord.dm.policy="allowlist"</code>および<code>channels.discord.dm.allowFrom</code>で許可された送信者をリストします。

- DMを完全に無視する場合:<code>channels.discord.dm.enabled=false</code>または<code>channels.discord.dm.policy="disabled"</code>。

8. グループDMはデフォルトで無視されます;<code>channels.discord.dm.groupEnabled</code>で有効にします。

9. オプション:<code>channels.discord.guilds</code>(guild id優先)を使用してサーバールールとチャンネルルールを設定します。

10. オプション:ネイティブコマンド。<code>commands.native</code>はデフォルトで<code>"auto"</code>(Discord/Telegramはデフォルトでオン、Slackはデフォルトでオフ)。<code>channels.discord.commands.native: true|false|"auto"</code>で上書き;<code>false</code>は登録されたコマンドをクリアします。テキストコマンドは<code>commands.text</code>で制御され、個別の<code>/...</code>メッセージとして送信する必要があります。<code>commands.useAccessGroups: false</code>はコマンドのaccess-groupチェックをバイパスします。

- コマンドリストと設定:'<a href="/tools/slash-commands">'/tools/slash-commands'</a>'

11. オプション:サーバーチャンネルコンテキスト。<code>channels.discord.historyLimit</code>(デフォルト20、フォールバック<code>messages.groupChat.historyLimit</code>)は、botがメンションされたときに最近のN件のメッセージをコンテキストとして注入します;<code>0</code>に設定して無効にします。

12. Reactions:エージェントは'<code>'discord'</code>'ツール経由でトリガーできます('<code>'channels.discord.actions.*'</code>'スイッチで制御)。リアクションキャンセルのセマンティクスについては'<a href="/tools/reactions">'/tools/reactions'</a>'を参照してください。

13. ネイティブコマンドは分離されたセッションキーを使用:'<code>'agent:'<agentId>':discord:slash:'<userId>''</code>'(共有'<code>'main'</code>'セッションには書き込まれません)。

Additional notes:

- ニックネーム/ユーザー名→idの解決はguildメンバー検索に依存し、<strong>Server Members Intent</strong>が必要です;メンバー検索が失敗する場合は、idまたは<code><@id></code>メンションを直接使用してください。

- slug:すべて小文字、スペースは<code>-</code>に置換;チャンネル名のslugには<code>#</code>は含まれません。

- グループメッセージの<code>[from:]</code>行には、簡単なpingのために<code>author.tag</code> + <code>id</code>が含まれます。

Tutorial.step

設定の書き戻し(Config writes)

デフォルトでは、Discordは<code>/config set|unset</code>によってトリガーされた更新を設定ファイルに書き戻すことが許可されています(<code>commands.config: true</code>が必要)。

無効にするには:

Json5
{
  channels: { discord: { configWrites: false } },
}
Tutorial.step

独自のbotを作成する方法(Developer Portal)

これは、サーバーチャンネル(<code>#help</code>など)でOpenClawを使用するための典型的な設定ワークフローです。

#

Tutorial.step

1)App + Botユーザーを作成

1. Discord Developer Portal → <strong>Applications</strong> → <strong>New Application</strong>

2. アプリケーションで:

- <strong>Bot</strong> → <strong>Add Bot</strong>

- <strong>Bot Token</strong>をコピー(<code>DISCORD_BOT_TOKEN</code>用)

#

Tutorial.step

2)必要なintentsを有効にする

Discordの「特権intents」は明示的に有効にする必要があります:

<strong>Bot</strong> → <strong>Privileged Gateway Intents</strong>で有効にします:

- <strong>Message Content Intent</strong>(必須;そうしないと「Used disallowed intents」が表示されるか、botは接続してもメッセージを処理しません)

- <strong>Server Members Intent</strong>(推奨;メンバー/ユーザー検索とallowlistマッチング用)

<strong>Presence Intent</strong>は通常必要ありません。

#

Tutorial.step

3)招待リンクを生成(OAuth2 URL Generator)

アプリケーションで:<strong>OAuth2</strong> → <strong>URL Generator</strong>

<strong>Scopes</strong>

- ✅ <code>bot</code>

- ✅ <code>applications.commands</code>(ネイティブコマンドに必要)

<strong>Bot Permissions (minimum recommended)</strong>

- ✅ View Channels

- ✅ Send Messages

- ✅ Read Message History

- ✅ Embed Links

- ✅ Attach Files

- ✅ Add Reactions(オプションだが推奨)

- ✅ Use External Emojis / Stickers(オプション)

デバッグ中でbotを完全に信頼していない場合を除き、<strong>Administrator</strong>を選択しないでください。

生成されたURLをコピーし、開いてサーバーを選択してインストールを完了します。

#

Tutorial.step

4)IDを取得(guild/user/channel)

Discordは数値IDを広範囲に使用します;OpenClaw設定もIDの使用を推奨します:

1. Discord(デスクトップ/Web)→ <strong>User Settings</strong> → <strong>Advanced</strong> → <strong>Developer Mode</strong>を有効にする

2. 右クリックしてコピー:

- サーバー名 → <strong>Copy Server ID</strong>

- チャンネル → <strong>Copy Channel ID</strong>

- ユーザー → <strong>Copy User ID</strong>

#

Tutorial.step

5)OpenClawを設定

##

Tutorial.step

Token

サーバーで環境変数を使用することをお勧めします:

- <code>DISCORD_BOT_TOKEN=...</code>

または設定ファイル:

Json5
{
  channels: {
    discord: {
      enabled: true,
      token: "YOUR_BOT_TOKEN",
    },
  },
}

複数アカウント:'<code>'channels.discord.accounts'</code>'を使用して各アカウントのtokenを設定します(オプションの'<code>'name'</code>')。共有構造については'<a href="/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts">'/gateway/configuration'</a>'を参照してください。

##

Tutorial.step

Allowlist + ルーティング

例:「1つのサーバーのみ、自分のみ、#helpのみ許可」:

Json5
{
  channels: {
    discord: {
      enabled: true,
      dm: { enabled: false },
      guilds: {
        YOUR_GUILD_ID: {
          users: ["YOUR_USER_ID"],
          requireMention: true,
          channels: {
            help: { allow: true, requireMention: true },
          },
        },
      },
      retry: {
        attempts: 3,
        minDelayMs: 500,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
    },
  },
}

Explanation:

- <code>requireMention: true</code>は、メンションされた場合のみ返信することを意味します(共有チャンネルでのノイズを避けるため推奨)。

- <code>agents.list[].groupChat.mentionPatterns</code>(または<code>messages.groupChat.mentionPatterns</code>)もメンションとして扱われます。

- <code>channels</code>が存在する場合、リストされていないチャンネルはデフォルトで拒否されます。

- スレッドは親チャンネルの設定(allowlist、requireMention、skills、promptsなど)を継承しますが、スレッドのチャンネルIDを明示的に設定に追加しない限り。

- botが送信したメッセージはデフォルトで無視されます;<code>channels.discord.allowBots=true</code>で許可できます(ただし、自分のメッセージはフィルタリングされます)。

- 他のbotへの返信を許可する場合(<code>allowBots=true</code>)、bot間ループを防ぐために<code>requireMention</code>、ユーザーallowlist、明確なプロンプトを使用してください。

#

Tutorial.step

6) Verify

1. gatewayを起動します。

2. サーバーチャンネルで送信:<code>@YourBot hello</code>。

3. 反応がない場合は、以下のトラブルシューティングを参照してください。

#

Tutorial.step

トラブルシューティング

- まず<code>openclaw doctor</code>と<code>openclaw channels status --probe</code>を実行します。

- <strong>"Used disallowed intents"</strong>:Developer Portalで<strong>Message Content Intent</strong>(通常は<strong>Server Members Intent</strong>も)を有効にし、gatewayを再起動します。

- <strong>接続できるがサーバーチャンネルで返信しない</strong>:

- Message Content Intentが不足しているか、

- botにチャンネル権限がない(View/Send/Read History)か、

- 設定でメンションが必要ですが@していないか、

- allowlistがチャンネル/ユーザーを拒否した。

- <strong><code>requireMention: false</code>でも返信しない</strong>:

- <code>channels.discord.groupPolicy</code>はデフォルトで<strong>allowlist</strong>;<code>"open"</code>に設定するか、<code>channels.discord.guilds</code>で許可されたguild/channelを設定します。

- <code>DISCORD_BOT_TOKEN</code>のみを設定し、<code>channels.discord</code>設定ブロックを作成しない場合、実行時のデフォルト<code>groupPolicy</code>は<code>open</code>です。<code>channels.discord.groupPolicy</code>/<code>channels.defaults.groupPolicy</code>またはguild/channel allowlistを明示的に設定すると、制限されます。

- <code>requireMention</code>は<code>channels.discord.guilds</code>(または特定のチャンネル)の下に配置する必要があります;トップレベルの<code>channels.discord.requireMention</code>は無視されます。