OpenClaw

OpenClaw Discord チャンネル

メッセージング
簡単

discord.js Bot Gateway API を使用して OpenClaw を Discord に接続します。Developer Portal で Discord ボットを作成し、必要な Intent を有効化し、ボットをサーバーに招待すれば、AI アシスタントが Discord で稼働します。ダイレクトメッセージ、サーバーチャンネルでの会話、リアクション、スレッド、スラッシュコマンド、リッチメディアをサポートします。最も簡単にセットアップできるチャンネルの一つです。

基本情報
難易度簡単
カテゴリメッセージング
対応機能数5 / 6

Discord 対応機能

テキストメッセージ

対応

メディア・ファイル

対応

リアクション

対応

スレッド

対応

音声メッセージ

非対応

グループチャット

対応

Discord 前提条件

  • Discord Developer Portal にアクセスできる Discord アカウント
  • Discord Developer Portal からの Bot Token(Applications → New Application → Bot)
  • Privileged Gateway Intents で Message Content Intent が有効化済み
  • OpenClaw Gateway が稼働・設定済み

Discord クイックセットアップ

1

Discord ボットを作成し Intent を有効化

Discord Developer Portal(discord.com/developers)にアクセスし、New Application を作成し、Bot ユーザーを追加して Bot Token をコピーします。Privileged Gateway Intents で 'Message Content Intent'(必須)と 'Server Members Intent'(メンバー検索に推奨)を有効化します。

2

Discord チャンネル設定を追加

~/.openclaw/openclaw.json に Discord チャンネルの設定を追加します。token を設定(または DISCORD_BOT_TOKEN 環境変数を使用)し、dm.policy を設定してボットに DM できるユーザーを制御します。

3

ボットをサーバーに招待してテスト

Developer Portal で OAuth2 → URL Generator に移動します。スコープ 'bot' と 'applications.commands' を選択します。権限として View Channels、Send Messages、Read Message History、Embed Links、Attach Files、Add Reactions を選択します。生成された URL を開いてボットをサーバーに招待します。'@BotName hello' を送信してテストします。

Discord 設定例

config.json
{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "dm": {
        "policy": "pairing"
      }
    }
  }
}

Discord 詳細ドキュメント

アーキテクチャ概要

OpenClaw は discord.js ライブラリを通じて Discord に接続します——Discord Bot Gateway API を操作するための強力な Node.js モジュールです。ボットは WebSocket 経由で Discord の Gateway に接続し、メッセージ、リアクション、その他のインタラクションのリアルタイムイベントを受信します。 セッションルーティングはコンテキストによって異なります:ダイレクトメッセージの会話はエージェントのメインセッション(agent:main:main)に集約され、サーバーチャンネルの会話はチャンネルごとに独立したセッション(agent:<agentId>:discord:channel:<channelId>)を作成します。スラッシュコマンドはユーザーごとに独立したセッションを持ちます。グループ DM はデフォルトで無効です。
ボットトークンは DISCORD_BOT_TOKEN 環境変数、または設定ファイルの channels.discord.token フィールドに保存できます。
Discord で開発者モードを有効にすると(ユーザー設定 → 詳細設定)、右クリックでサーバー ID、チャンネル ID、ユーザー ID を簡単にコピーできます。

ボットの作成

Discord ボットのセットアップには、Discord Developer Portal でアプリケーションを作成する必要があります: 1. discord.com/developers/applications にアクセス 2. 'New Application' をクリックして名前を付ける 3. Bot セクションに移動し 'Add Bot' をクリック 4. Bot Token をコピー——安全に保管してください 5. Privileged Gateway Intents で以下を有効化: • Message Content Intent(必須——これがないとボットはメッセージ内容を読み取れません) • Server Members Intent(メンバー/ロール検索に推奨) 6. OAuth2 → URL Generator に移動 7. スコープを選択:'bot' と 'applications.commands' 8. 権限を選択:View Channels、Send Messages、Read Message History、Embed Links、Attach Files、Add Reactions 9. 生成された URL をコピーして開き、ボットをサーバーに招待
デバッグ以外では Administrator 権限を付与しないでください。セキュリティ向上のため、必要最小限の権限を使用してください。
ボットトークンは秘密にしてください。トークンを持っている人は誰でもボットを制御できます。漏洩した場合は Developer Portal でトークンを再生成してください。
Message Content Intent はボットがメッセージテキストを読み取るために必須です。これがないと、ボットは接続しますがメッセージの内容を一切読み取れません。

DM ポリシー

DM(ダイレクトメッセージ)ポリシーは、AI アシスタントとプライベートチャットできるユーザーを制御します。OpenClaw は4つのポリシーをサポートします: • pairing(デフォルト)— 不明な送信者は期限付きのペアリングコード(1時間で有効期限切れ)を受け取ります。ターミナルで 'openclaw pairing approve discord <code>' を実行して承認します。承認後は自由にチャットできます。 • allowlist — dm.allowFrom に明示的に記載されたユーザー ID のみがボットにメッセージを送れます。それ以外はサイレントに無視されます。 • open — ボットに DM した誰もが応答を受けます。機能させるには dm.allowFrom=["*"] が必要です。注意して使用してください。 • disabled — DM 処理が完全に無効化されます。ボットはダイレクトメッセージに一切応答しません。
openclaw.json
{
  "channels": {
    "discord": {
      "dm": {
        "policy": "pairing",
        "allowFrom": ["123456789012345678"]
      }
    }
  }
}

サーバーチャンネルの設定

サーバー(Guild)チャンネルは Discord でのやり取りの大半が行われる場所です。OpenClaw はボットが動作するサーバーとチャンネルを細かく制御できます。 トップレベル設定: • groupPolicy — サーバーチャンネルの処理を制御。オプション:open(すべてのチャンネルで応答)、disabled(すべてのサーバーメッセージを無視)、allowlist(設定済みサーバーに制限) サーバーごとの設定で各サーバーの動作をカスタマイズできます: • slug — 表示用のフレンドリーな識別子 • users — ユーザー許可リスト(ID または名前) • requireMention — ボットに @メンションが必要かどうか • reactionNotifications — リアクションイベント通知の制御(off、own、all、allowlist) チャンネルごとのルールでサーバー内のさらに細かい制御が可能です: • allow — チャンネルの有効化/無効化 • requireMention — チャンネル固有のメンション設定 • users — チャンネルのユーザー許可リスト • skills — スキルフィルター(省略ですべて有効) • systemPrompt — AI への追加コンテキスト指示
openclaw.json
{
  "channels": {
    "discord": {
      "groupPolicy": "open",
      "guilds": {
        "YOUR_GUILD_ID": {
          "slug": "my-server",
          "requireMention": true,
          "channels": {
            "CHANNEL_ID": {
              "allow": true,
              "requireMention": false,
              "systemPrompt": "You are a helpful assistant in this channel."
            }
          }
        }
      }
    }
  }
}
Discord で開発者モードを有効にすると(ユーザー設定 → 詳細設定)、右クリックでサーバー ID、チャンネル ID、ユーザー ID をコピーできます。
チャンネルごとの systemPrompt により、異なるチャンネルで AI に異なるパーソナリティや指示を与えることができます。

リアクションと確認応答

OpenClaw は Discord のリアクションシステムをサポートし、メッセージの確認応答やリアクション通知を受信できます。 確認応答リアクション:ボットは受信メッセージに絵文字で応答し、処理中であることを示せます。messages.ackReaction で設定します。messages.removeAckAfterReply を使用すると、AI の応答後にリアクションを自動的に削除できます。 リアクション通知:サーバーごとにどのリアクションがエージェント通知をトリガーするかを設定します: • off — リアクション通知なし • own — ボットのメッセージへのリアクションのみ • all — チャンネル内のすべてのリアクション • allowlist — 許可されたユーザーからのリアクションのみ
openclaw.json
{
  "channels": {
    "discord": {
      "messages": {
        "ackReaction": "👀",
        "removeAckAfterReply": true
      },
      "guilds": {
        "GUILD_ID": {
          "reactionNotifications": "own"
        }
      }
    }
  }
}

メッセージのフォーマットと分割

Discord には2,000文字のメッセージ制限があります。OpenClaw は長い AI の応答を自動的にチャンクに分割します。 主要な設定: • textChunkLimit — メッセージチャンクあたりの最大文字数(デフォルト:2000) • maxLinesPerMessage — メッセージあたりのソフト行数制限(デフォルト:17) • chunkMode — 分割方式:'length'(デフォルト、ハード文字数制限)または 'newline'(段落境界で分割) ボットは最近のサーバーメッセージからコンテキストを注入します(historyLimit で設定可能、デフォルト20メッセージ)。これにより AI が進行中の会話に自然に参加できます。
openclaw.json
{
  "channels": {
    "discord": {
      "textChunkLimit": 2000,
      "chunkMode": "newline",
      "historyLimit": 20
    }
  }
}

スラッシュコマンドとツールアクション

OpenClaw はボット起動時にネイティブ Discord スラッシュコマンドを自動登録します(デフォルト:auto、commands.native で設定可能)。commands.native を false に設定すると、以前に登録されたコマンドがクリアされます。コマンドはメッセージと同じ許可リストルールに従います——権限のないユーザーは Discord UI でコマンドを見ることはできますが、'not authorized' の応答を受け取ります。 セッション分離:スラッシュコマンドは共有メインセッションではなく、個別のセッションキー(agent:<agentId>:discord:slash:<userId>)を使用し、ユーザーごとの分離を提供します。 エージェントは Discord を操作するための豊富なツールアクションをサポートします: • メッセージング — メッセージの送信、編集、削除、ピン留め/ピン解除、検索 • スレッド — スレッドの作成、一覧表示、スレッドへの返信 • リアクション — メッセージへのリアクション、リアクション一覧 • モデレーション — タイムアウト、キック、BAN(デフォルトで無効) • サーバー情報 — メンバー情報、ロール情報、チャンネル情報、絵文字一覧 • プレゼンス — ボットステータスの設定(デフォルトで無効) 返信タグにより、モデルがメッセージスレッドを制御できます: • [[reply_to_current]] — トリガーメッセージへのスレッド返信 • [[reply_to:<id>]] — 特定のメッセージ ID へのスレッド返信
スラッシュコマンドを表示させるには、OAuth2 招待 URL に 'applications.commands' スコープが含まれていることを確認してください。
モデレーションツール(タイムアウト、キック、BAN)とロール管理はデフォルトで無効です。必要な場合は設定で明示的に有効化してください。

メディアとファイル処理

OpenClaw は Discord を通じたメディアファイルの送受信をサポートします。デフォルトの最大アップロードサイズは 8 MB です(mediaMaxMb で設定可能)。 サポートされる操作: • ユーザーからの画像やファイル添付の受信 • 応答での画像、ドキュメント、その他のファイルの送信 • リッチプレビュー付きの埋め込みリンク サーバーチャンネルでメディアを送信するには、ボットに 'Attach Files' 権限が必要です。
Discord のファイルサイズ制限はサーバーのブーストレベルによって異なります。非ブーストサーバーのデフォルトは 8 MB、レベル2で 50 MB、レベル3で 100 MB です。

PluralKit 連携

OpenClaw はオプションで PluralKit プロキシメッセージの解決をサポートし、PluralKit システムからのメッセージを正しく識別できます。 有効化すると、ボットはプロキシされたメッセージを元の PluralKit メンバー ID に解決します。これは PluralKit をシステム/複数メッセージルーティングに使用するコミュニティで有用です。 主な詳細: • 許可リストで pk:<memberId> プレフィックスを使用して PluralKit メンバーをマッチング • メンバー名は表示名またはスラッグでもマッチング可能 • PluralKit の30分ウィンドウ内で元の Discord メッセージ ID を使用してルックアップ • ルックアップに失敗した場合、プロキシメッセージはボットメッセージとして扱われます(allowBots=true でない限りドロップ)
openclaw.json
{
  "channels": {
    "discord": {
      "pluralkit": {
        "enabled": true,
        "token": "pk_live_..."
      }
    }
  }
}
プライベート PluralKit システムではメンバーを解決するために pluralkit.token が必要です。トークンがない場合、プロキシメッセージはボットメッセージとして扱われドロップされます。
PluralKit メンバーの正確なマッチングには、許可リストで pk:<memberId> プレフィックスを使用してください。

実行承認(ボタン UI)

Discord はexec操作に対するボタンベースの承認フローをサポートします。有効化すると、ボットは指定された承認者の DM にインタラクティブなボタン(1回許可、常に許可、拒否)を送信します。 これはコマンドベースの /approve フローをよりユーザーフレンドリーなインターフェースに置き換えます。要件: • execApprovals.enabled が true であること • 承認者の Discord ユーザー ID が execApprovals.approvers に記載されていること • オプションの agentFilter と sessionFilter 配列で承認をトリガーするエージェント/セッションを制限可能 注意:/approve <id> コマンドは転送された承認にのみ使用されます。直接の Discord インタラクションでは、Discord ボタン UI がコマンドベースの承認に優先します。
openclaw.json
{
  "channels": {
    "discord": {
      "execApprovals": {
        "enabled": true,
        "approvers": ["USER_ID_1", "USER_ID_2"],
        "agentFilter": [],
        "sessionFilter": []
      }
    }
  }
}
承認ボタンが表示されない、または 'unknown approval id' エラーが発生する場合は、ユーザー ID が execApprovals.approvers に記載されていること、および execApprovals.enabled が true であることを確認してください。

アクションゲート

OpenClaw はエージェントが実行できる Discord ツールアクションを細かく制御できます。アクションは channels.discord.actions.<action>(true/false)でゲートされます。 デフォルトで有効: • reactions、stickers、emojiUploads、stickerUploads、polls、permissions、messages、threads、pins、search、memberInfo、roleInfo、channelInfo、voiceStatus、events、channels デフォルトで無効: • roles — ロール管理(ロールの割り当て/削除) • moderation — タイムアウト、キック、BAN • presence — ボットステータス/アクティビティの設定 ボットの機能を削減しリスクを制限するために、特定のアクションを無効にしてください。例えば、channels.discord.actions.moderation=false に設定すると、エージェントはメンバーをキックまたは BAN できなくなります。
最小権限の原則に従ってください:実際のユースケースで必要なアクションのみを有効にしてください。
guilds.<id>.tools と guilds.<id>.channels.<id>.tools を使用して、サーバーごとやチャンネルごとのツールオーバーライドが可能です。

許可リストの解決とマッチング

OpenClaw は許可リストでユーザーとチャンネルを指定するための複数のフォーマットをサポートします: • 数値 ID(推奨)— 例:"123456789012345678" • Discord ユーザー/チャンネル名 — 例:"username"、"#channel-name" • メンション — 例:"<@userId>"、"<#channelId>" • プレフィックス付きフォーマット — discord:、user:、channel:、pk:(PluralKit メンバー用) • ワイルドカード — "*" で無制限アクセス 起動時、OpenClaw はボットがメンバーを検索できる場合(Server Members Intent が必要)に名前を ID に解決します。マッピングはログに記録されます。未解決のエントリはそのまま保持されます。 オーナー検出:サーバーごとまたはチャンネルごとのユーザー許可リストが送信者にマッチした場合、OpenClaw はシステムプロンプトで送信者をオーナーとして扱います。グローバルオーナーは commands.ownerAllowFrom で設定します。 スレッドの継承:スレッドはスレッドのチャンネル ID で明示的にリストされていない限り、親チャンネルの設定(許可リスト、requireMention、スキル、プロンプト)を継承します。
信頼性の高いマッチングのために、可能な限り数値 ID を使用してください。名前ベースの解決には Server Members Intent が必要で、大規模サーバーでは失敗する場合があります。
スラッグ形式はスペースをハイフンに置き換えた小文字です(例:#my-help → slug my-help)。
サーバーチャンネルのトピックはコンテキストとして注入されますが、システムプロンプトとしてではありません——信頼できない入力として扱ってください。

Discord 設定リファレンス

enabled
Type: booleanDefault: true

Discord チャンネルの有効化/無効化

token
Type: stringDefault: ""

Discord Bot Token。DISCORD_BOT_TOKEN 環境変数も使用可能

dm.policy
Type: stringDefault: "pairing"

ボットに DM できるユーザーを制御。オプション:pairing、allowlist、open、disabled

dm.allowFrom
Type: string[]Default: []

ボットに DM を許可する Discord ユーザー ID(dm.policy が allowlist の場合)

groupPolicy
Type: stringDefault: "allowlist"

サーバーチャンネルの処理ポリシー。オプション:open、disabled、allowlist

guilds
Type: objectDefault: {}

サーバー ID をキーとしたサーバーごとの設定。slug、users、channels、requireMention 等を含む

requireMention
Type: booleanDefault: true

サーバーチャンネルでボットの応答に @メンションが必要かどうか

messages.ackReaction
Type: stringDefault: ""

処理中にメッセージ確認応答として付けるリアクション絵文字

messages.removeAckAfterReply
Type: booleanDefault: false

AI の応答後に確認応答リアクションを削除する

textChunkLimit
Type: numberDefault: 2000

メッセージチャンクあたりの最大文字数(Discord の制限は2000)

chunkMode
Type: stringDefault: "length"

長い応答の分割方法。オプション:length(ハード文字数制限)、newline(段落境界)

historyLimit
Type: numberDefault: 20

AI コンテキストとして含める最近のサーバーメッセージ数

mediaMaxMb
Type: numberDefault: 8

アップロードの最大メディアファイルサイズ(メガバイト)

replyToMode
Type: stringDefault: "off"

返信スレッドモード。オプション:off、first(最初のチャンクのみスレッド)、all(すべてのチャンクをスレッド)

configWrites
Type: booleanDefault: true

Discord からの /config set|unset コマンドによる設定更新を許可

allowBots
Type: booleanDefault: false

他のボットからのメッセージを処理するかどうか。ループ防止のため注意して使用

retry.attempts
Type: numberDefault: 3

失敗した Discord API 呼び出しのリトライ回数

retry.minDelayMs
Type: numberDefault: 500

リトライ間の最小遅延時間(ミリ秒)

retry.maxDelayMs
Type: numberDefault: 30000

リトライ間の最大遅延時間(ミリ秒)

retry.jitter
Type: numberDefault: 0.1

リトライ遅延に適用されるランダム化のジッター係数

dm.enabled
Type: booleanDefault: true

ダイレクトメッセージを受け付けるかどうか

dm.groupEnabled
Type: booleanDefault: false

グループ DM の処理を有効化

dm.groupChannels
Type: string[]Default: []

グループ DM チャンネルの許可リスト

dmHistoryLimit
Type: numberDefault: -

ユーザーごとの DM 履歴制限オーバーライド

maxLinesPerMessage
Type: numberDefault: 17

メッセージチャンクあたりのソフト行数制限

commands.native
Type: string | booleanDefault: "auto"

ネイティブスラッシュコマンド登録。オプション:auto(Discord では有効)、true、false

commands.text
Type: objectDefault: {}

スタンドアロンの /... メッセージを必要とするテキストコマンド設定

commands.useAccessGroups
Type: booleanDefault: false

コマンドのアクセスグループチェックを強制するかどうか

actions.*
Type: booleanDefault: varies

ツールアクションゲート。大半はデフォルトで有効、roles、moderation、presence はデフォルトで無効

pluralkit.enabled
Type: booleanDefault: false

PluralKit プロキシメッセージ解決の有効化

Discord よくある質問

Discord トラブルシューティング

ボットは接続するがメッセージに返信しない

Message Content Intent が有効化されていない、ボットにチャンネル権限がない、またはメンション要件の設定が正しくない。

Discord Developer Portal で Message Content Intent が有効化されていることを確認してください(Bot → Privileged Gateway Intents)。ボットに View Channels、Send Messages、Read Message History 権限があることを確認してください。requireMention が true に設定されていてボットが @メンションされていないか確認してください。
DM が動作しない

設定で DM 処理が無効化されているか、ペアリング承認が保留中の可能性がある。

dm.policy が 'disabled' に設定されていないことを確認してください。pairing モードを使用している場合は、'openclaw pairing list' で保留中のペアリングを確認し、'openclaw pairing approve discord <code>' で承認してください。allowlist モードを使用している場合は、ユーザーの Discord ID が dm.allowFrom に含まれていることを確認してください。
スラッシュコマンドが Discord に表示されない

ボットの OAuth2 招待 URL に 'applications.commands' スコープが含まれていなかった。

Developer Portal → OAuth2 → URL Generator に移動し、'bot' と 'applications.commands' の両方のスコープが選択されていることを確認し、新しい招待 URL を生成してボットをサーバーに再招待してください。スラッシュコマンドは通常のメッセージと同じ許可リストでゲートされます。
ボットがレート制限されているまたはスタックしている

Discord API のレート制限に達したか、Gateway 接続が不正な状態にある。

'openclaw gateway --force' で Gateway を再起動してください。OpenClaw にはレート制限(429 レスポンス)に対する指数バックオフ付きの組み込みリトライロジックがあります。問題が解決しない場合は、channels.discord.retry のリトライ設定を確認してください。
requireMention が false なのにボットが返信しない

groupPolicy のデフォルトは 'allowlist' であるため、ボットは明示的に設定されたサーバー/チャンネルでのみ応答する。

すべてのチャンネルで応答するには groupPolicy を 'open' に設定するか、特定のサーバーとチャンネル ID を guilds 設定に追加してください。サーバーエントリに allow: true のチャンネルが含まれていることを確認してください。
DM で実行承認ボタンが表示されない

execApprovals が有効化されていない、またはユーザーの Discord ID が approvers 配列に記載されていない。

Discord チャンネル設定で execApprovals.enabled を true に設定してください。ユーザーの数値 Discord ID を execApprovals.approvers 配列に追加してください。直接の Discord 承認にはボタン UI(/approve コマンドではなく)を使用してください。