OpenClaw Discord チャンネル
discord.js Bot Gateway API を使用して OpenClaw を Discord に接続します。Developer Portal で Discord ボットを作成し、必要な Intent を有効化し、ボットをサーバーに招待すれば、AI アシスタントが Discord で稼働します。ダイレクトメッセージ、サーバーチャンネルでの会話、リアクション、スレッド、スラッシュコマンド、リッチメディアをサポートします。最も簡単にセットアップできるチャンネルの一つです。
Discord 対応機能
テキストメッセージ
対応
メディア・ファイル
対応
リアクション
対応
スレッド
対応
音声メッセージ
非対応
グループチャット
対応
Discord 前提条件
- Discord Developer Portal にアクセスできる Discord アカウント
- Discord Developer Portal からの Bot Token(Applications → New Application → Bot)
- Privileged Gateway Intents で Message Content Intent が有効化済み
- OpenClaw Gateway が稼働・設定済み
Discord クイックセットアップ
Discord ボットを作成し Intent を有効化
Discord Developer Portal(discord.com/developers)にアクセスし、New Application を作成し、Bot ユーザーを追加して Bot Token をコピーします。Privileged Gateway Intents で 'Message Content Intent'(必須)と 'Server Members Intent'(メンバー検索に推奨)を有効化します。
Discord チャンネル設定を追加
~/.openclaw/openclaw.json に Discord チャンネルの設定を追加します。token を設定(または DISCORD_BOT_TOKEN 環境変数を使用)し、dm.policy を設定してボットに DM できるユーザーを制御します。
ボットをサーバーに招待してテスト
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 設定例
{
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_DISCORD_BOT_TOKEN",
"dm": {
"policy": "pairing"
}
}
}
}Discord 詳細ドキュメント
アーキテクチャ概要
ボットの作成
DM ポリシー
{
"channels": {
"discord": {
"dm": {
"policy": "pairing",
"allowFrom": ["123456789012345678"]
}
}
}
}サーバーチャンネルの設定
{
"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."
}
}
}
}
}
}
}リアクションと確認応答
{
"channels": {
"discord": {
"messages": {
"ackReaction": "👀",
"removeAckAfterReply": true
},
"guilds": {
"GUILD_ID": {
"reactionNotifications": "own"
}
}
}
}
}メッセージのフォーマットと分割
{
"channels": {
"discord": {
"textChunkLimit": 2000,
"chunkMode": "newline",
"historyLimit": 20
}
}
}スラッシュコマンドとツールアクション
メディアとファイル処理
PluralKit 連携
{
"channels": {
"discord": {
"pluralkit": {
"enabled": true,
"token": "pk_live_..."
}
}
}
}実行承認(ボタン UI)
{
"channels": {
"discord": {
"execApprovals": {
"enabled": true,
"approvers": ["USER_ID_1", "USER_ID_2"],
"agentFilter": [],
"sessionFilter": []
}
}
}
}アクションゲート
許可リストの解決とマッチング
Discord 設定リファレンス
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | Discord チャンネルの有効化/無効化 |
| token | string | "" | Discord Bot Token。DISCORD_BOT_TOKEN 環境変数も使用可能 |
| dm.policy | string | "pairing" | ボットに DM できるユーザーを制御。オプション:pairing、allowlist、open、disabled |
| dm.allowFrom | string[] | [] | ボットに DM を許可する Discord ユーザー ID(dm.policy が allowlist の場合) |
| groupPolicy | string | "allowlist" | サーバーチャンネルの処理ポリシー。オプション:open、disabled、allowlist |
| guilds | object | {} | サーバー ID をキーとしたサーバーごとの設定。slug、users、channels、requireMention 等を含む |
| requireMention | boolean | true | サーバーチャンネルでボットの応答に @メンションが必要かどうか |
| messages.ackReaction | string | "" | 処理中にメッセージ確認応答として付けるリアクション絵文字 |
| messages.removeAckAfterReply | boolean | false | AI の応答後に確認応答リアクションを削除する |
| textChunkLimit | number | 2000 | メッセージチャンクあたりの最大文字数(Discord の制限は2000) |
| chunkMode | string | "length" | 長い応答の分割方法。オプション:length(ハード文字数制限)、newline(段落境界) |
| historyLimit | number | 20 | AI コンテキストとして含める最近のサーバーメッセージ数 |
| mediaMaxMb | number | 8 | アップロードの最大メディアファイルサイズ(メガバイト) |
| replyToMode | string | "off" | 返信スレッドモード。オプション:off、first(最初のチャンクのみスレッド)、all(すべてのチャンクをスレッド) |
| configWrites | boolean | true | Discord からの /config set|unset コマンドによる設定更新を許可 |
| allowBots | boolean | false | 他のボットからのメッセージを処理するかどうか。ループ防止のため注意して使用 |
| retry.attempts | number | 3 | 失敗した Discord API 呼び出しのリトライ回数 |
| retry.minDelayMs | number | 500 | リトライ間の最小遅延時間(ミリ秒) |
| retry.maxDelayMs | number | 30000 | リトライ間の最大遅延時間(ミリ秒) |
| retry.jitter | number | 0.1 | リトライ遅延に適用されるランダム化のジッター係数 |
| dm.enabled | boolean | true | ダイレクトメッセージを受け付けるかどうか |
| dm.groupEnabled | boolean | false | グループ DM の処理を有効化 |
| dm.groupChannels | string[] | [] | グループ DM チャンネルの許可リスト |
| dmHistoryLimit | number | - | ユーザーごとの DM 履歴制限オーバーライド |
| maxLinesPerMessage | number | 17 | メッセージチャンクあたりのソフト行数制限 |
| commands.native | string | boolean | "auto" | ネイティブスラッシュコマンド登録。オプション:auto(Discord では有効)、true、false |
| commands.text | object | {} | スタンドアロンの /... メッセージを必要とするテキストコマンド設定 |
| commands.useAccessGroups | boolean | false | コマンドのアクセスグループチェックを強制するかどうか |
| actions.* | boolean | varies | ツールアクションゲート。大半はデフォルトで有効、roles、moderation、presence はデフォルトで無効 |
| pluralkit.enabled | boolean | false | PluralKit プロキシメッセージ解決の有効化 |
Discord チャンネルの有効化/無効化
Discord Bot Token。DISCORD_BOT_TOKEN 環境変数も使用可能
ボットに DM できるユーザーを制御。オプション:pairing、allowlist、open、disabled
ボットに DM を許可する Discord ユーザー ID(dm.policy が allowlist の場合)
サーバーチャンネルの処理ポリシー。オプション:open、disabled、allowlist
サーバー ID をキーとしたサーバーごとの設定。slug、users、channels、requireMention 等を含む
サーバーチャンネルでボットの応答に @メンションが必要かどうか
処理中にメッセージ確認応答として付けるリアクション絵文字
AI の応答後に確認応答リアクションを削除する
メッセージチャンクあたりの最大文字数(Discord の制限は2000)
長い応答の分割方法。オプション:length(ハード文字数制限)、newline(段落境界)
AI コンテキストとして含める最近のサーバーメッセージ数
アップロードの最大メディアファイルサイズ(メガバイト)
返信スレッドモード。オプション:off、first(最初のチャンクのみスレッド)、all(すべてのチャンクをスレッド)
Discord からの /config set|unset コマンドによる設定更新を許可
他のボットからのメッセージを処理するかどうか。ループ防止のため注意して使用
失敗した Discord API 呼び出しのリトライ回数
リトライ間の最小遅延時間(ミリ秒)
リトライ間の最大遅延時間(ミリ秒)
リトライ遅延に適用されるランダム化のジッター係数
ダイレクトメッセージを受け付けるかどうか
グループ DM の処理を有効化
グループ DM チャンネルの許可リスト
ユーザーごとの DM 履歴制限オーバーライド
メッセージチャンクあたりのソフト行数制限
ネイティブスラッシュコマンド登録。オプション:auto(Discord では有効)、true、false
スタンドアロンの /... メッセージを必要とするテキストコマンド設定
コマンドのアクセスグループチェックを強制するかどうか
ツールアクションゲート。大半はデフォルトで有効、roles、moderation、presence はデフォルトで無効
PluralKit プロキシメッセージ解決の有効化
Discord よくある質問
Discord トラブルシューティング
Message Content Intent が有効化されていない、ボットにチャンネル権限がない、またはメンション要件の設定が正しくない。
設定で DM 処理が無効化されているか、ペアリング承認が保留中の可能性がある。
ボットの OAuth2 招待 URL に 'applications.commands' スコープが含まれていなかった。
Discord API のレート制限に達したか、Gateway 接続が不正な状態にある。
groupPolicy のデフォルトは 'allowlist' であるため、ボットは明示的に設定されたサーバー/チャンネルでのみ応答する。
execApprovals が有効化されていない、またはユーザーの Discord ID が approvers 配列に記載されていない。