Skip to main content

Discord(机器人 API)

状态:通过官方 Discord 网关已准备好支持私信和公会频道。

快速设置

你需要创建一个新的应用程序和机器人,将机器人添加到服务器,并将其配对到 OpenClaw。建议将机器人添加到你自己的私有服务器。如果还没有服务器,请先创建一个(选择创建我的专属服务器 > 为我和我的朋友)。
1

创建 Discord 应用程序和机器人

访问 Discord 开发者门户 并点击 新应用。命名为类似 “OpenClaw”。点击侧边栏中的 机器人。将 用户名 设置为你的 OpenClaw 代理名称。
2

启用特权 intents

仍在 机器人 页面,向下滚动到 特权网关 Intents 并启用:
  • 消息内容意图(必需)
  • 服务器成员意图(建议;角色白名单和名称到 ID 匹配所需)
  • 在线状态意图(可选;仅在需要在线状态更新时启用)
3

复制你的机器人令牌

回到 机器人 页面顶部,点击 重置令牌
尽管命名为“重置”,实际上是生成你的第一个令牌——并没有真正“重置”。
复制令牌并妥善保存。这是你的机器人令牌,稍后需要使用。
4

生成邀请链接并将机器人添加到服务器

点击侧边栏的 OAuth2。你将生成具备正确权限的邀请链接以添加机器人到服务器。向下滚动至 OAuth2 URL 生成器,启用:
  • bot
  • applications.commands
下方会出现机器人权限部分。启用:
  • 查看频道
  • 发送消息
  • 读取消息历史
  • 嵌入链接
  • 附加文件
  • 添加表情反应(可选)
复制底部生成的 URL,粘贴至浏览器,选择你的服务器,点击 继续 连接。此时你应该能在 Discord 服务器中看到机器人。
5

启用开发者模式并收集 ID

返回 Discord 应用,需启用开发者模式以便复制内部 ID。
  1. 点击 用户设置(头像旁齿轮图标)→ 高级 → 打开 开发者模式
  2. 右击侧边栏的服务器图标复制服务器 ID
  3. 右击你的头像复制用户 ID
保存你的服务器 ID用户 ID,以及机器人令牌 —— 下一步将发送这三个信息给 OpenClaw。
6

允许服务器成员发送私信

为了配对生效,Discord 需要允许机器人给你发私信。右击服务器图标隐私设置→启用私信这允许服务器成员(包括机器人)向你发送私信。若想用 OpenClaw 的 Discord 私信功能,请保持开启。若只打算使用公会频道,配对完成后可以关闭私信。
7

第 0 步:安全设置机器人令牌(勿在聊天中发送)

你的 Discord 机器人令牌是机密(类似密码)。请在运行 OpenClaw 的机器上设置它,然后再给你的代理发消息。
openclaw config set channels.discord.token '"YOUR_BOT_TOKEN"' --json
openclaw config set channels.discord.enabled true --json
openclaw gateway
如果 OpenClaw 已作为后台服务运行,请用 openclaw gateway restart 重启。
8

配置 OpenClaw 并配对

在任何已有频道(如 Telegram)与 OpenClaw 代理聊天并告知。如果 Discord 是你的第一个频道,请使用 CLI / 配置标签页。
“我已经在配置中设置了 Discord 机器人令牌。请用用户 ID <user_id> 和服务器 ID <server_id> 完成 Discord 设置。”
9

批准首次私信配对

等待网关运行,然后在 Discord 中私信你的机器人。它会回复一个配对码。
将配对码发送给你现有频道的代理:
“批准此 Discord 配对码:<CODE>
配对码 1 小时后过期。现在你应该可以通过私信在 Discord 与代理聊天了。
令牌解析是账户感知的。配置中的令牌优先于环境变量回退。DISCORD_BOT_TOKEN 仅用于默认账户。

推荐:设置公会工作区

私信功能正常后,你可以将 Discord 服务器设置为完整工作区,每个频道都有自己的代理会话和上下文。建议在只有你和机器人使用的私有服务器上这样做。
1

将服务器加入公会白名单

允许你的代理在服务器中任意频道响应,而不仅限私信。
“将我的 Discord 服务器 ID <server_id> 添加到公会白名单”
2

允许无需 @提及即可响应

默认情况下,代理只有在公会频道被 @提及时才会响应。对私有服务器来说,通常希望它响应每条消息。
“允许我的代理在此服务器响应而无需被 @提及”
3

公会频道内的记忆规划

默认情况下,长期记忆(MEMORY.md)只在私信会话加载。公会频道不会自动加载 MEMORY.md。
“在 Discord 频道提问时,如需长期上下文,请使用 memory_search 或 memory_get 从 MEMORY.md 调用。”
现在你可以在 Discord 服务器创建频道并开始对话。代理能看到频道名,每个频道拥有独立会话 — 你可以设立 #coding#home#research 等,以契合你的工作流程。

运行时模型

  • 网关拥有 Discord 连接。
  • 回复路由确定:Discord 收到的回复回传到 Discord。
  • 默认 (session.dmScope=main),私信对话共享代理主会话(agent:main:main)。
  • 公会频道为隔离会话键(agent:<agentId>:discord:channel:<channelId>)。
  • 默认忽略群体私信 (channels.discord.dm.groupEnabled=false)。
  • 原生斜线命令在隔离的命令会话中运行(agent:<agentId>:discord:slash:<userId>),同时携带 CommandTargetSessionKey 以路由至对话会话。

论坛频道

Discord 论坛及媒体频道只接受主题贴。OpenClaw 支持两种创建方式:
  • 向论坛父频道 (channel:<forumId>) 发送消息将自动创建主题。主题标题采用消息的第一行非空内容。
  • 使用 openclaw message thread create 直接创建主题。论坛频道请勿传递 --message-id
示例:向论坛父频道发送消息创建主题
openclaw message send --channel discord --target channel:<forumId> \
  --message "话题标题\n帖子内容"
示例:显式创建论坛主题
openclaw message thread create --channel discord --target channel:<forumId> \
  --thread-name "话题标题" --message "帖子内容"
论坛父频道不支持 Discord 组件。若需组件,请发到主题本身 (channel:<threadId>)。

交互组件

OpenClaw 支持 Discord 组件 v2 容器用于代理消息。使用消息工具并传递 components 负载。交互结果会作为普通入站消息路由回代理,遵循现有 Discord 的 replyToMode 设置。 支持的块类型:
  • textsectionseparatoractionsmedia-galleryfile
  • 操作行可包含最多 5 个按钮或单个选择菜单
  • 选择类型:stringuserrolementionablechannel
默认组件只能单次使用。设置 components.reusable=true 允许按钮、选择菜单和表单多次使用直到过期。 限制点击者可通过在按钮上设置 allowedUsers(Discord 用户 ID、标签或 *)实现。配置后,非匹配用户会收到临时拒绝提示。 /model/models 斜线命令开启交互式模型选择器,包含供应商和模型下拉及提交步骤。选择回复为临时,仅允许调用用户使用。 文件附件:
  • file 块必须指向附件引用 (attachment://<filename>)
  • 通过 media/path/filePath 提供附件(单文件);多文件使用 media-gallery
  • 使用 filename 覆盖上传名以匹配附件引用
模态表单:
  • 添加 components.modal 允许最多 5 个字段
  • 字段类型:textcheckboxradioselectrole-selectuser-select
  • OpenClaw 会自动添加触发按钮
示例:
{
  channel: "discord",
  action: "send",
  to: "channel:123456789012345678",
  message: "可选回退文本",
  components: {
    reusable: true,
    text: "选择路径",
    blocks: [
      {
        type: "actions",
        buttons: [
          {
            label: "批准",
            style: "success",
            allowedUsers: ["123456789012345678"],
          },
          { label: "拒绝", style: "danger" },
        ],
      },
      {
        type: "actions",
        select: {
          type: "string",
          placeholder: "选择一个选项",
          options: [
            { label: "选项 A", value: "a" },
            { label: "选项 B", value: "b" },
          ],
        },
      },
    ],
    modal: {
      title: "详情",
      triggerLabel: "打开表单",
      fields: [
        { type: "text", label: "请求者" },
        {
          type: "select",
          label: "优先级",
          options: [
            { label: "低", value: "low" },
            { label: "高", value: "high" },
          ],
        },
      ],
    },
  },
}

访问控制与路由

channels.discord.dmPolicy 控制私信访问(旧名:channels.discord.dm.policy):
  • pairing(默认)
  • allowlist
  • open(需要 channels.discord.allowFrom 包含 "*";旧名:channels.discord.dm.allowFrom
  • disabled
非开放模式下,未知用户被阻止(或在 pairing 模式提示配对)。多账户优先级:
  • channels.discord.accounts.default.allowFrom 仅适用于默认账户。
  • 命名账户继承 channels.discord.allowFrom,若自身无设置。
  • 命名账户不继承 channels.discord.accounts.default.allowFrom
私信目标格式:
  • user:<id>
  • <@id> 提及格式
裸数 ID 模糊且被拒,除非显式指定用户或频道目标种类。

基于角色的代理路由

使用 bindings[].match.roles 按角色 ID 将 Discord 公会成员路由至不同代理。基于角色的绑定仅接受角色 ID,优先级低于 peer 或 parent-peer 绑定,高于仅公会绑定。如果绑定同时设置多个匹配字段(如 peer + guildId + roles),则所有字段须匹配。
{
  bindings: [
    {
      agentId: "opus",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
        roles: ["111111111111111111"],
      },
    },
    {
      agentId: "sonnet",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
      },
    },
  ],
}

开发者门户设置

  1. Discord 开发者门户 -> 应用 -> 新建应用程序
  2. 机器人 -> 添加机器人
  3. 复制机器人令牌
机器人 -> 特权网关 Intents,启用:
  • 消息内容意图
  • 服务器成员意图(建议)
在线状态意图可选,仅在需要接收状态更新时启用。设置机器人在线状态(setPresence)不需开启成员在线状态更新。
OAuth URL 生成器:
  • 范围:botapplications.commands
常见基础权限:
  • 查看频道
  • 发送消息
  • 读取消息历史
  • 嵌入链接
  • 附加文件
  • 添加表情反应(可选)
除非必要,避免设置管理员权限。
启用 Discord 开发者模式后,复制:
  • 服务器 ID
  • 频道 ID
  • 用户 ID
推荐在 OpenClaw 配置中使用数字 ID 以确保审计和诊断稳定。

原生命令与命令授权

  • commands.native 默认 "auto",Discord 启用。
  • 可针对频道覆盖:channels.discord.commands.native
  • commands.native=false 显式取消注册 Discord 原生命令。
  • 原生命令授权使用与正常消息处理相同的 Discord 白名单/策略。
  • 命令可能在 Discord UI 中对未授权用户仍可见;执行时仍强制 OpenClaw 授权且返回“未授权”消息。
查看 斜线命令 了解命令目录及行为。 默认斜线命令设置:
  • ephemeral: true

功能详情

Discord 支持代理输出中的回复标签:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
channels.discord.replyToMode 控制:
  • off(默认)
  • first
  • all
注意:off 禁用隐式回复线程。显式 [[reply_to_*]] 仍然生效。消息 ID 会在上下文/历史中提供,供代理指向特定消息。
OpenClaw 可通过发送临时消息并编辑其内容流式传输草稿回复。
  • channels.discord.streaming 控制预览流模式(off | partial | block | progress,默认 off)。
  • progress 为跨频道一致性被接受,但在 Discord 映射为 partial
  • channels.discord.streamMode 为旧别名,支持自动迁移。
  • partial 模式下,单条预览消息随代币渐进编辑。
  • block 模式下,输出草稿大小块(可使用 draftChunk 调整大小和断点)。
示例:
{
  channels: {
    discord: {
      streaming: "partial",
    },
  },
}
block 模式默认分块(受限于 channels.discord.textChunkLimit):
{
  channels: {
    discord: {
      streaming: "block",
      draftChunk: {
        minChars: 200,
        maxChars: 800,
        breakPreference: "paragraph",
      },
    },
  },
}
预览流限文本,媒体回复回落为常规发送。注意:预览流与块流区分,若启用 Discord 的块流,OpenClaw 会跳过预览避免重复流。
公会历史上下文:
  • channels.discord.historyLimit 默认 20
  • 后备:messages.groupChat.historyLimit
  • 0 以禁用
私信历史控制:
  • channels.discord.dmHistoryLimit
  • channels.discord.dms["<user_id>"].historyLimit
线程行为:
  • Discord 线程被路由为频道会话
  • 可用父线程元数据做父会话关联
  • 线程配置继承父频道配置,除非存在线程专用配置
频道主题作为不可信上下文注入(非系统提示)。
Discord 可将线程绑定到会话目标,线程内后续消息保留同会话(含子代理会话)。命令:
  • /focus <target> 绑定当前/新线程至子代理/会话目标
  • /unfocus 解除当前线程绑定
  • /agents 显示活跃运行及绑定状态
  • /session idle <duration|off> 查看/更新空闲自动取消绑定
  • /session max-age <duration|off> 查看/更新最大绑定时长
配置:
{
  session: {
    threadBindings: {
      enabled: true,
      idleHours: 24,
      maxAgeHours: 0,
    },
  },
  channels: {
    discord: {
      threadBindings: {
        enabled: true,
        idleHours: 24,
        maxAgeHours: 0,
        spawnSubagentSessions: false, // 需选择加入
      },
    },
  },
}
说明:
  • session.threadBindings.* 设全局默认值。
  • channels.discord.threadBindings.* 覆盖 Discord 行为。
  • spawnSubagentSessions 必须为 true,才会为 sessions_spawn({ thread: true }) 自动创建/绑定线程。
  • spawnAcpSessions 必须为 true,才会为 ACP (/acp spawn ... --thread ...sessions_spawn({ runtime: "acp", thread: true })) 自动创建/绑定线程。
  • 若账号禁用线程绑定,/focus 及相关线程绑定操作不可用。
详见 子代理ACP 代理配置参考
对于稳定“常驻” ACP 工作区,可配置顶层 Typed ACP 绑定目标为 Discord 会话。配置路径:
  • bindings[]type: "acp"match.channel: "discord"
示例:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "discord",
        accountId: "default",
        peer: { kind: "channel", id: "222222222222222222" },
      },
      acp: { label: "codex-main" },
    },
  ],
  channels: {
    discord: {
      guilds: {
        "111111111111111111": {
          channels: {
            "222222222222222222": {
              requireMention: false,
            },
          },
        },
      },
    },
  },
}
说明:
  • 线程消息可继承父频道 ACP 绑定。
  • 在绑定频道或线程内,/new/reset 会重置同一 ACP 会话。
  • 临时线程绑定仍有效,且在激活时可覆盖目标解析。
详见 ACP 代理 绑定详细行为。
按公会配置表情反应通知模式:
  • off
  • own(默认)
  • all
  • allowlist(使用 guilds.<id>.users
表情事件转为系统事件,附加至路由的 Discord 会话。
ackReaction 在 OpenClaw 处理中入站消息时发送确认表情。解析顺序:
  • channels.discord.accounts.<accountId>.ackReaction
  • channels.discord.ackReaction
  • messages.ackReaction
  • 代理身份表情回退(agents.list[].identity.emoji,否则为 ”👀”)
说明:
  • Discord 支持 Unicode 或自定义表情名。
  • "" 禁用指定频道或账户的确认表情。
默认启用频道发起的配置写入。这影响启用命令功能时的 /config set|unset 流程。禁用示例:
{
  channels: {
    discord: {
      configWrites: false,
    },
  },
}
通过 HTTP(S) 代理代理 Discord 网关 WebSocket 流量和启动 REST 查询(应用 ID + 白名单)。
{
  channels: {
    discord: {
      proxy: "http://proxy.example:8080",
    },
  },
}
可针对单账户覆盖:
{
  channels: {
    discord: {
      accounts: {
        primary: {
          proxy: "http://proxy.example:8080",
        },
      },
    },
  },
}
启用 PluralKit 解析,将代理消息映射至系统成员身份:
{
  channels: {
    discord: {
      pluralkit: {
        enabled: true,
        token: "pk_live_...", // 可选,私有系统需提供
      },
    },
  },
}
说明:
  • 白名单中可使用 pk:<memberId>
  • 成员显示名仅名称/slug 匹配时需开启 channels.discord.dangerouslyAllowNameMatching: true
  • 通过原始消息 ID 进行查询,受时间窗限制
  • 查询失败则将代理消息视为机器人消息丢弃,除非 allowBots=true
设置状态或活动字段启用在线状态更新,或者启用自动在线状态。仅状态示例:
{
  channels: {
    discord: {
      status: "idle",
    },
  },
}
活动示例(自定义状态为默认类型):
{
  channels: {
    discord: {
      activity: "专注时间",
      activityType: 4,
    },
  },
}
流媒体示例:
{
  channels: {
    discord: {
      activity: "直播编程",
      activityType: 1,
      activityUrl: "https://twitch.tv/openclaw",
    },
  },
}
活动类型映射:
  • 0:游戏中
  • 1:直播中(需要 activityUrl
  • 2:听着
  • 3:观看
  • 4:自定义(状态使用活动文本,表情可选)
  • 5:竞赛中
自动在线示例(运行时健康信号):
{
  channels: {
    discord: {
      autoPresence: {
        enabled: true,
        intervalMs: 30000,
        minUpdateIntervalMs: 15000,
        exhaustedText: "令牌耗尽",
      },
    },
  },
}
自动在线将运行时可用性映射至 Discord 状态:健康 => 在线,降级或未知 => 闲置,耗尽或不可用 => 请勿打扰。可用文本覆盖:
  • autoPresence.healthyText
  • autoPresence.degradedText
  • autoPresence.exhaustedText(支持 {reason} 占位符)
Discord 支持私信中的按钮型执行审批,且可选择在发起频道内发布审批提示。配置路径:
  • channels.discord.execApprovals.enabled
  • channels.discord.execApprovals.approvers
  • channels.discord.execApprovals.targetdm | channel | both,默认 dm
  • agentFiltersessionFiltercleanupAfterResolve
若目标为 channelboth,审批提示在频道可见。仅配置的审批者可用按钮,其他用户看到临时拒绝提示。审批提示包含命令文本,仅在受信频道启用频道投递。无法从会话键推导频道 ID 时,OpenClaw 退回为私信投递。Gateway auth for this handler uses the same shared credential resolution contract as other Gateway clients:
  • env-first local auth (OPENCLAW_GATEWAY_TOKEN / OPENCLAW_GATEWAY_PASSWORD then gateway.auth.*)
  • in local mode, gateway.remote.* can be used as fallback when gateway.auth.* is unset
  • remote-mode support via gateway.remote.* when applicable
  • URL overrides are override-safe: CLI overrides do not reuse implicit credentials, and env overrides use env credentials only
If approvals fail with unknown approval IDs, verify approver list and feature enablement.相关文档:执行审批

工具和操作门控

Discord 消息操作包括消息发送、频道管理、审核、在线状态及元数据操作。 核心示例:
  • 消息:sendMessagereadMessageseditMessagedeleteMessagethreadReply
  • 表情:reactreactionsemojiList
  • 审核:timeoutkickban
  • 在线状态:setPresence
操作门控在 channels.discord.actions.* 下管理。 默认门控行为:
操作组默认
reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions启用
roles禁用
moderation禁用
presence禁用

Components v2 UI

OpenClaw 使用 Discord components v2 支持执行审批和跨上下文标记。Discord 消息操作亦可接受 components 自定义 UI(高级;需 Carbon 组件实例),遗留的 embeds 仍可用但不推荐。
  • channels.discord.ui.components.accentColor 设置 Discord 组件容器的强调色(十六进制)。
  • 也可为账号单独设置:channels.discord.accounts.<id>.ui.components.accentColor
  • 存在 components v2 时忽略 embeds
示例:
{
  channels: {
    discord: {
      ui: {
        components: {
          accentColor: "#5865F2",
        },
      },
    },
  },
}

语音频道

OpenClaw 可加入 Discord 语音频道支持实时连续对话。该功能独立于语音消息附件。 需求:
  • 启用原生命令(commands.nativechannels.discord.commands.native)。
  • 配置 channels.discord.voice
  • 此机器人需在目标语音频道具备连接及发言权限。
使用仅限 Discord 的原生命令 /vc join|leave|status 控制会话。该命令使用账户默认代理,遵循相同白名单及公会策略。 自动加入示例:
{
  channels: {
    discord: {
      voice: {
        enabled: true,
        autoJoin: [
          {
            guildId: "123456789012345678",
            channelId: "234567890123456789",
          },
        ],
        daveEncryption: true,
        decryptionFailureTolerance: 24,
        tts: {
          provider: "openai",
          openai: { voice: "alloy" },
        },
      },
    },
  },
}
说明:
  • voice.tts 仅覆盖语音播放,不影响 messages.tts
  • 语音转录继承 Discord allowFrom 的所有者状态(或 dm.allowFrom);非所有者发言者无法访问仅限所有者的工具(如 gatewaycron)。
  • 语音默认启用。设置 channels.discord.voice.enabled=false 以禁用。
  • voice.daveEncryptionvoice.decryptionFailureTolerance 映射至 @discordjs/voice 加入选项。
  • 未设置时,@discordjs/voice 默认 daveEncryption=truedecryptionFailureTolerance=24
  • OpenClaw 会监控接收解密失败,失败频繁则自动离开/重新加入频道尝试恢复。
  • 若日志反复出现 DecryptionFailed(UnencryptedWhenPassthroughDisabled),可能是上游 @discordjs/voice 缺陷,详见 discord.js #11419

语音消息

Discord 语音消息带波形预览,需 OGG/Opus 音频及元数据。OpenClaw 会自动生成波形,但需要网关宿主能访问 ffmpegffprobe 以检查和转换音频文件。 需求与限制:
  • 提供本地文件路径(拒绝 URL)。
  • 省略文本内容(Discord 不允许文本+语音消息同载荷)。
  • 接受任意音频格式,必要时自动转换为 OGG/Opus。
例如:
message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true)

故障排除

  • 启用消息内容意图
  • 依赖用户/成员解析时启用服务器成员意图
  • 修改 intents 后重启网关
  • 核查 groupPolicy
  • 核查 channels.discord.guilds 的公会白名单
  • 若存在公会 channels 映射,仅允许列出频道
  • 核查 requireMention 行为与提及模式
有用的检查:
openclaw doctor
openclaw channels status --probe
openclaw logs --follow
常见原因:
  • groupPolicy="allowlist" 且公会/频道白名单未匹配
  • requireMention 配置位置错误(应位于 channels.discord.guilds 或频道条目下)
  • 发送者被公会/频道 users 白名单阻止
常见日志:
  • Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATE
  • Slow listener detected ...
  • discord inbound worker timed out after ...
监听器超时配置:
  • 单账户:channels.discord.eventQueue.listenerTimeout
  • 多账户:channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
工作线程超时配置:
  • 单账户:channels.discord.inboundWorker.runTimeoutMs
  • 多账户:channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs
  • 默认:1800000(30 分钟);设置 0 以禁用
推荐基线:
{
  channels: {
    discord: {
      accounts: {
        default: {
          eventQueue: {
            listenerTimeout: 120000,
          },
          inboundWorker: {
            runTimeoutMs: 1800000,
          },
        },
      },
    },
  },
}
eventQueue.listenerTimeout 控制监听器响应延迟,用 inboundWorker.runTimeoutMs 控制排队代理步长的超时保护。
channels status --probe 权限检查仅支持数字频道 ID。若使用 slug 作为键,运行时匹配仍可用,但探测功能无法完全验证权限。
  • 私信被禁用:channels.discord.dm.enabled=false
  • 私信策略禁用:channels.discord.dmPolicy="disabled"(旧名:channels.discord.dm.policy
  • pairing 模式等待配对批准
默认忽略机器人发出的消息。若设置 channels.discord.allowBots=true,请使用严格提及和白名单规则避免循环行为。 推荐使用 channels.discord.allowBots="mentions" 仅接受提及机器人的机器人消息。
  • 保持 OpenClaw 更新(openclaw update)保证 Discord 语音接收恢复逻辑
  • 确认 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 字段:
  • 启动/授权:enabledtokenaccounts.*allowBots
  • 策略:groupPolicydm.*guilds.*guilds.*.channels.*
  • 命令:commands.nativecommands.useAccessGroupsconfigWritesslashCommand.*
  • 事件队列:eventQueue.listenerTimeout(监听器预算),eventQueue.maxQueueSizeeventQueue.maxConcurrency
  • 入站工作线程:inboundWorker.runTimeoutMs
  • 回复/历史:replyToModehistoryLimitdmHistoryLimitdms.*.historyLimit
  • 交付:textChunkLimitchunkModemaxLinesPerMessage
  • 流式:streaming(旧别名:streamMode),draftChunkblockStreamingblockStreamingCoalesce
  • 媒体/重试:mediaMaxMbretry
  • 操作:actions.*
  • 在线状态:activitystatusactivityTypeactivityUrl
  • UI:ui.components.accentColor
  • 功能:threadBindings,顶层绑定 bindings[]type: "acp"),pluralkitexecApprovalsintentsagentComponentsheartbeatresponsePrefix

安全与运维

  • 视机器人令牌为机密(受监督环境推荐使用 DISCORD_BOT_TOKEN)。
  • 赋予最小权限的 Discord 权限。
  • 如命令部署或状态信息过期,重启网关并用 openclaw channels status --probe 重新检查。

相关链接