故障排除
针对行为异常的 Discord 账户,从症状入手的检查。
故障排查¶
使用了不允许的 Intent 或 Bot 看不到服务器消息
- 启用 Message Content Intent
- 当你依赖用户/成员解析时,启用 Server Members Intent
- 更改 Intents 后重启 gateway
服务器消息被意外阻止
- 验证 `groupPolicy`
- 验证 `channels.discord.guilds` 下的服务器白名单
- 如果存在服务器 `channels` 映射,则仅允许列出的频道
- 验证 `requireMention` 行为和提及模式
当有效策略为 `allowlist` 但未配置任何服务器时,Control UI 频道详情和 `openclaw channels status` 会发出警告。请将你的服务器添加到 `channels.discord.guilds` 下,或在被覆盖时添加到账户的 `guilds` 映射中。显式的 `channels.discord.accounts.default.guilds` 映射也会覆盖顶层映射,即使账户映射为空。
如果状态报告配置重载被推迟,请等待当前工作完成后再刷新。成功的频道停止/启动不会应用未发布的配置。该警告用于区分等待发布配置与发布后被推迟的频道工作;仅凭连接健康状况并不能确认策略更改已生效。
有用的检查:
requireMention 为 false 但仍被阻止
常见原因:
groupPolicy="allowlist"但没有匹配的服务器/频道白名单requireMention配置在错误的位置(必须位于channels.discord.guilds或频道条目下)- 发送者被服务器/频道的
users白名单阻止
Discord 回合运行时间过长或出现重复回复
典型日志:
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
Discord 不会对排队的智能体回合施加频道级的超时。消息监听器会立即移交处理,排队的 Discord 运行会保持每个会话的先后顺序,直到会话/工具/运行时生命周期完成或中止该工作。
Gateway 元数据查找超时警告
OpenClaw 在连接前会获取 Discord /gateway/bot 元数据。瞬时故障会回退到 Discord 的默认 gateway URL,并在日志中进行速率限制。
元数据超时默认为 30 秒。OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS 可以在特殊的主机环境中覆盖该值。
Gateway READY 超时重启
OpenClaw 在启动期间以及运行时重连后,会等待 Discord gateway 的 READY 事件。采用启动交错的多账户设置可能需要比默认值更长的启动 READY 窗口。
启动等待 15 秒,运行时重连等待 30 秒。OPENCLAW_DISCORD_READY_TIMEOUT_MS 和 OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS 在特殊的主机环境中仍然可用。
权限审计不匹配
channels status --probe 的权限检查仅适用于数字频道 ID。
如果你使用 slug 键,运行时匹配仍然可以工作,但 probe 无法完全验证权限。
DM 与配对问题
- DM 已禁用:
channels.discord.dm.enabled=false - DM 策略已禁用:
channels.discord.dmPolicy="disabled"(旧版:channels.discord.dm.policy) - 在
pairing模式下等待配对批准
Bot 到 Bot 循环
Bot 撰写的消息在正常的提及和访问规则下默认会被接受。
请保持适合该房间的提及和白名单规则。设置 `channels.discord.allowBots=false` 可禁用 Bot 触发的回合,或设置 `channels.discord.allowBots="mentions"` 以仅接受提及该 Bot 的 Bot 消息。这些设置不会隐藏可访问的 Bot 撰写的历史记录或人工选择的回复上下文。
在 `"mentions"` 模式下,仅凭回复 ping 元数据并不算作提及。Bot 回复需要有主动的原生提及,或在 Markdown 代码之外配置的文本/记录提及。
OpenClaw 还提供了共享的 [Bot 循环保护](../bot-loop-protection.md)。每当 `allowBots` 允许 Bot 撰写的消息进入分发流程时,Discord 会将入站事件映射为 `(account, channel, bot pair)` 事实,通用配对守卫会在其超过配置的事件预算后抑制该配对。该守卫限制快速的 Bot 到 Bot 循环;低于预算的交互可以继续。它不影响人类消息或低于预算的一次性 Bot 回复。
默认设置(每当允许 Bot 撰写的消息时生效):
- `maxEventsPerWindow: 20` -- Bot 配对可以在滑动窗口内交换 20 条消息
- `windowSeconds: 60` -- 滑动窗口长度
- `cooldownSeconds: 60` -- 一旦预算超限,一分钟内任何方向的额外 Bot 到 Bot 消息都会被丢弃
在 `channels.defaults.botLoopProtection` 下配置一次共享默认值,然后在合法工作流需要更多余量时覆盖 Discord。优先级为:
- `channels.discord.accounts.<account>.botLoopProtection`
- `channels.discord.botLoopProtection`
- `channels.defaults.botLoopProtection`
- 内置默认值
Discord 使用通用的 `maxEventsPerWindow`、`windowSeconds` 和 `cooldownSeconds` 键。
{
channels: {
defaults: {
botLoopProtection: {
maxEventsPerWindow: 20,
windowSeconds: 60,
cooldownSeconds: 60,
},
},
discord: {
// Optional Discord-wide override. Account blocks override individual
// fields and inherit omitted fields from here.
botLoopProtection: {
maxEventsPerWindow: 4,
},
accounts: {
alpha: {
// Alpha listens to other bots only when they mention it.
allowBots: "mentions",
},
bravo: {
// Bravo listens to all bot-authored Discord messages.
allowBots: true,
mentionAliases: {
// Lets Bravo write an Alpha Discord mention with the configured user id.
Alpha: "ALPHA_DISCORD_USER_ID",
},
botLoopProtection: {
// Allow up to five messages per minute before suppressing the pair.
maxEventsPerWindow: 5,
windowSeconds: 60,
cooldownSeconds: 90,
},
},
},
},
},
}
语音 STT 因 DecryptionFailed(...) 中断
- 运行 OpenClaw 2026.2.24 或更高版本(
openclaw update),该版本新增了 Discord 语音接收恢复逻辑(#25861) - 确认
channels.discord.voice.daveEncryption=true(默认值) - 从
channels.discord.voice.decryptionFailureTolerance=24(上游默认值)开始,仅在必要时调整 - 在日志中查看以下内容:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin- 如果自动重新加入后故障仍然存在,请收集日志,并与 discord.js #11419 和 discord.js #11449 中的上游 DAVE 接收历史记录进行对比
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw