$cd ../troubleshooting/
High🔗 Connectivity
Discordボットはサーバー参加するがメッセージを読まない — Intents不足
// OpenClaw Discordボットはオンライン表示、古いスラッシュコマンドには応答するが、通常チャンネルメッセージとDMを完全無視。典型的なPrivileged Gateway Intent不足:Developer PortalでMessage Content Intentを有効にしない限り、Discordはボットにメッセージ本文を渡しません。ロールベースルーティングや表示名解決にはServer Members Intentも必要な構成があります。ボットは接続済み — DiscordがOpenClawに必要なイベントを配信していないだけ。本非公式ガイドではintents有効化、bot + applications.commandsスコープの新OAuth招待、openclaw.jsonチャネル設定更新、gateway再起動でメッセージハンドラを実際に動かす手順を説明します。
diagnose.sh
🔍 これがあなたの問題ですか?
?Discordでボットオンラインだがプレーンテキストを無視
?スラッシュは動くが通常チャットは動かない可能性
?Gatewayログは接続OKだがメッセージハンドラ未発火
?Discord Developer PortalでMessage Content Intentを未启用
?Intent有効化前に招待 — 同じ招待URLを再利用
portal_intents.md
✅ 修正1 — PortalでPrivileged Gateway Intentsを有効化
Portalトグル — Message Contentが usual fix
# ブラウザ:discord.com/developers/applications # 1. ボットアプリケーションを選択 # 2. Bot → Privileged Gateway Intents # 3. 有効化: # ☑ MESSAGE CONTENT INTENT(必須) # ☑ SERVER MEMBERS INTENT(ロール/名前使用時) # 4. Save Changes
トークンはOpenClaw設定に — スクリーンショット公開しない
# 任意:Application ID(Client ID)をメモ # Botタブ → Token → 漏洩時のみReset # トークン共有禁止;~/.openclaw/.env に: # DISCORD_BOT_TOKEN=your_token_here
invite_url.txt
✅ 修正2 — 正しいスコープでボット招待を再生成
Intent変更後は新招待
# 招待URL生成(CLIENT_IDを置換) https://discord.com/api/oauth2/authorize?client_id=CLIENT_ID&permissions=2147875840&scope=bot%20applications.commands # permissionsにSend Messages、Read History等 # scopeはbotとapplications.commands必須
クリック派はURL Generator
# サーバーに再追加またはキックして再招待 # PortalのOAuth2 → URL Generatorでも可 # 必須scopes:bot、applications.commands # Bot権限:Read Messages、Send Messages、 # Read Message History、Embed Links、Attach Files
openclaw.json
✅ 修正3 — 設定更新とGateway再起動
guild/channel ID allowlist — 空設定はメッセージ無視
// ~/.openclaw/openclaw.json — discordチャネル
{
"channels": {
"discord": {
"enabled": true,
"tokenEnv": "DISCORD_BOT_TOKEN",
"guilds": {
"YOUR_GUILD_ID": {
"channels": ["YOUR_CHANNEL_ID"]
}
}
}
}
}Portal + 設定変更後は再起動必須
openclaw doctor openclaw gateway restart # 許可チャンネルでテスト送信 # ログ監視: openclaw logs --follow | grep -i discord
💡 プロのヒント:Intent変更後は再招待
Portalでintentを切り替えても古いギルド認可は遡及修正されません。ボットをキックするか同一client IDの新招待URLを使い、エージェント返信テスト前にgateway debugログでMESSAGE_CREATEイベントを確認。
🛡️ 予防チェックリスト
- • 初回本番招待前にMessage Content Intentを有効化 — runbookにportal URLを記録
- • ボットトークンは ~/.openclaw/.env か openclaw.json のみ — Discordサポートチケットに貼ったらローテーション
- • devとprodで別Discord Application — intent実験が本番サーバーを壊さない
- • Portal変更後は必ずgateway再起動しGatewayIntentBits警告を確認
- • 100+サーバーボットはprivileged intents向けDiscord verified-bot要件を確認
❓ FAQ
Q1. OpenClaw Discordに必要なintentsは?
最低限:Guilds、Guild Messages、Message Content(privileged)、Direct Messages。Message Contentが最も見落とされがち — 無効だとMESSAGE_CREATEのcontentが空。Discordロールをエージェント権限にマップしたり表示名でメンションするならServer Members Intentも。Presence Intentはpresence感知自動化以外 rarely 不要。バージョンのDiscordチャネルアダプターのデフォルトintentセットを確認。
Q2. テストサーバーでは読めるが別サーバーでは読めない — なぜ?
Intentsはアプリ単位でグローバルだが、openclaw.jsonのチャネルallowlistが処理するguild/channel IDを制限している可能性。channels.discord.guildsにguild idが無いと無視。そのサーバーでボットロールにRead Message HistoryとView Channelsがあるか確認。@everyone拒否はintent正しくてもボットを静かにブロック。
Q3. Message Content Intentなしでスラッシュコマンドは動く?
はい。スラッシュはinteractionイベントでmessage content不要。/pingだけ動いて自由テキスト無視はMessage Content Intentオフの典型。有効化→gateway再起動→スラッシュではなくplain textでhello送信して確認。
Q4. Message ContentにDiscordがボット検証を要求 — どうする?
100+サーバーでMessage Content Intentを使うボットはDiscordの本人確認が必要。100未満のホームラボボットは通常トグル即時有効。検証壁なら開発者検証を完了するか、承認までスラッシュ/スレッドのみ。Mac Miniコミュニティ構成は通常閾値未満。
Q5. OpenClawでDiscordボットトークンはどこ?
~/.openclaw/openclaw.json の channels.discord.token、または tokenEnv で ~/.openclaw/.env の DISCORD_BOT_TOKEN。トークンをコミットしない。Portalでローテーション後は設定更新とgateway再起動。無効トークンはログイン失敗 — intent問題(ログイン成功・メッセージ空)と別。
Q6. ログでintents動作確認するには?
log_level: debug、gateway再起動、許可チャンネルでテスト送信。非空contentのMESSAGE_CREATEまたはdiscord:messageハンドラを探す。'Received message with empty content'やintent bitmask警告はPortalトグルへ。公式プロジェクト:github.com/openclaw/openclaw。