跳转至

故障排除

针对行为异常的 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` 映射也会覆盖顶层映射,即使账户映射为空。

如果状态报告配置重载被推迟,请等待当前工作完成后再刷新。成功的频道停止/启动不会应用未发布的配置。该警告用于区分等待发布配置与发布后被推迟的频道工作;仅凭连接健康状况并不能确认策略更改已生效。

有用的检查:
openclaw doctor
openclaw channels status --probe
openclaw logs --follow
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 detected
  • discord voice: repeated decrypt failures; attempting rejoin
  • 如果自动重新加入后故障仍然存在,请收集日志,并与 discord.js #11419 和 discord.js #11449 中的上游 DAVE 接收历史记录进行对比

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw