--- summary: "创建 Discord 应用程序、邀请机器人并设置公会工作区" read_when: - "首次为 OpenClaw 设置 Discord 机器人" - "将 Discord 服务器添加到公会白名单" title: "Discord 设置" sidebarTitle: "设置" --- 让 Discord 机器人运行所需的一切:创建应用程序、授予意图、邀请它到服务器、配对并准备公会工作区。 ## 快速设置 创建一个带有机器人的 Discord 应用,将机器人添加到你的服务器,并将其与 OpenClaw 配对。如果可以,请使用私有服务器;如有需要,先[创建一个](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server)(**创建我自己的 > 供我和我的朋友使用**)。 在 [Discord 开发人员 Portal](https://discord.com/developers/applications) 中,单击 **新建应用程序** 并将其命名(例如“OpenClaw”)。 在侧边栏中打开 **机器人**,并将 **用户名** 设置为你的代理名称。 仍在 **机器人** 页面,在 **特权网关意图** 下启用: - **消息内容意图**(普通服务器消息所必需) - **服务器成员意图**(推荐;角色允许列表、名称到 ID 的匹配以及频道受众访问组所必需) - **在线状态意图**(可选;仅用于状态更新) 在 **机器人** 页面,点击 **重置令牌** 并复制该令牌。 尽管名称如此,这会生成你的第一个令牌——并没有真正进行“重置”。 在侧边栏中打开 **OAuth2**。在 **OAuth2 URL 生成器** 中,启用以下作用域: - `bot` - `applications.commands` 在出现的 **机器人权限** 部分,至少启用: **常规权限** - 查看频道 **文本权限** - 发送消息 - 阅读消息历史记录 - 嵌入链接 - 附加文件 - 添加反应(可选) 这就是普通文本频道的基础权限。如果机器人还会在线程中发消息——包括会创建或继续线程的论坛或媒体频道工作流——也请启用 **在线程中发送消息**。 复制生成的 URL,在浏览器中打开,选择你的服务器,然后点击 **继续**。此时机器人应该会出现在你的服务器中。 在 Discord 应用程序中,启用开发者模式,以便您可以复制 ID: 1. **用户设置**(齿轮图标)→ **开发者** → 打开 **开发者模式** *(在移动端:**应用设置** → **高级**)* 2. 右键单击你的 **服务器图标** → **复制服务器 ID** 3. 右键单击你自己的 **头像** → **复制用户 ID** 将服务器 ID 和用户 ID 与你的机器人令牌一起保存;下一步你会需要这三者。 为了使配对正常工作,Discord 必须让机器人 DM 进行操作。右键单击您的 **服务器图标** → **隐私设置** → 打开 **直接消息**。 如果你使用 Discord 私信和 OpenClaw,请保持开启。如果你只使用服务器频道,配对完成后可以将其关闭。 机器人令牌是机密信息。在向你的代理发送消息之前,先在运行 OpenClaw 的机器上设置它: ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" cat > discord.patch.json5 <<'JSON5' { channels: { discord: { enabled: true, token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN" }, }, }, } JSON5 openclaw config patch --file ./discord.patch.json5 --dry-run openclaw config patch --file ./discord.patch.json5 openclaw gateway ``` 如果 OpenClaw 已作为后台服务运行,请通过 OpenClaw Mac 应用程序或停止并重新启动 `openclaw gateway run` 进程来重新启动它。对于托管服务安装,请从设置了 `DISCORD_BOT_TOKEN` 的 shell 运行 `openclaw gateway install`,或将变量存储在 `~/.openclaw/.env` 中,以便服务在重新启动后可以解析环境 SecretRef。如果您的主机被 Discord 的启动应用程序查找阻止或速率限制,请从开发人员门户设置 application/client ID,以便启动可以跳过该 REST 调用:默认帐户为 `channels.discord.applicationId`,或每个机器人为 `channels.discord.accounts..applicationId`。 在现有频道(例如 Telegram)上与您的 OpenClaw 代理聊天并告诉它。如果 Discord 是您的第一个通道,请改用 CLI / 配置选项卡。 > “我已经把 Discord 机器人令牌设置到配置中了。请使用用户 ID `` 和服务器 ID `` 完成 Discord 设置。” 基于文件的配置: ```json5 { channels: { discord: { enabled: true, token: { source: "env", provider: "default", id: "DISCORD_BOT_TOKEN", }, }, }, } ``` 默认账户的 env 回退值: ```bash DISCORD_BOT_TOKEN=... ``` 对于脚本化或远程设置,请使用 `openclaw config patch --file ./discord.patch.json5 --dry-run` 写入相同的 JSON5 块,然后在不使用 `--dry-run` 的情况下重新运行。明文 `token` 字符串也可以工作,并且跨 env/file/exec/store 提供程序的 `channels.discord.token` 支持 SecretRef 值。请参阅 [ 秘密 Management](/gateway/secrets)。 对于多个 Discord 机器人,将每个机器人令牌和应用程序 ID 保持在各自的账户下。顶层的 `channels.discord.applicationId` 会被账户继承,因此只有当所有账户都使用相同的应用程序 ID 时才应在这里设置。 ```json5 { channels: { discord: { enabled: true, accounts: { personal: { token: { source: "env", provider: "default", id: "DISCORD_PERSONAL_TOKEN" }, applicationId: "111111111111111111", }, work: { token: { source: "env", provider: "default", id: "DISCORD_WORK_TOKEN" }, applicationId: "222222222222222222", }, }, }, }, } ``` 网关运行后,DM 您的机器人将位于 Discord 中。它会回复一个配对码。 在你现有的频道中把配对码发送给你的代理: > “批准这个 Discord 配对码:``” ```bash openclaw pairing list discord openclaw pairing approve discord ``` 配对代码将在 1 小时后过期。批准后,在 Discord DM 中与您的代理聊天。 如果 Discord 无法授予消息内容意图,OpenClaw 仍然可以在用户明确提及机器人的 DM 和行会频道中运行。设置 `channels.discord.intents.messageContent: false`,以便网关不会请求不可用的特权意图,并在每个配置的行会通道上保留 `requireMention: true`。 Discord 在此模式下省略其他公会消息中用户创作的内容。 令牌解析是帐户感知的。配置令牌值胜过 env 后备,并且 `DISCORD_BOT_TOKEN` 仅用于默认帐户。如果两个已启用的 Discord 帐户解析为同一个机器人令牌,则 OpenClaw 仅为该令牌启动一个网关监视器:配置来源的令牌胜过 env 回退;否则,第一个启用的帐户将获胜,并且重复的帐户将被报告为禁用,原因为 `duplicate bot token`。对于高级出站呼叫(消息 tool/channel 操作),显式每次呼叫 `token` 用于该呼叫。这适用于发送和 read/check-style 操作 (read/search/fetch/thread/pins/permissions)。帐户 policy/retry 设置仍然来自活动运行时快照中选定的帐户。 ## 推荐:设置 guild 工作区 一旦私信正常工作,你就可以把服务器变成一个完整的工作区,让每个频道都有自己独立的代理会话和上下文。推荐用于只有你和机器人在的私有服务器。 这样可以让你的代理在服务器上的任何频道响应,而不只是私信。 > “把我的 Discord Server ID `` 添加到 guild 白名单” ```json5 { channels: { discord: { groupPolicy: "allowlist", guilds: { YOUR_SERVER_ID: { requireMention: true, users: ["YOUR_USER_ID"], }, }, }, }, } ``` 默认情况下,代理仅在 @mentioned. 时在公会频道中响应。在私人服务器上,您可能希望它响应每条消息。 在公会频道中,普通回复默认会自动发布。对于始终在线的共享房间,请选择 `messages.groupChat.visibleReplies: "message_tool"`,以便代理可以潜伏并仅在认为频道回复有用时才发布。这最适合最新一代、工具可靠的模型,例如 GPT-6 Astra。除非工具发送,否则环境房间事件将保持安静。请参阅 [ 环境房间事件 ](/channels/ambient-room-events) 了解完整的潜伏模式配置。 如果 Discord 显示正在输入,而且日志显示 token 使用量但没有实际发出消息,请检查该轮次是否被配置为环境房间事件,或者是否启用了消息工具可见回复。 会话繁忙通知也遵循此回复策略。对于环境事件和消息工具回复,Discord 在网关日志中记录故障和抑制通知,而不发布到房间。 > “允许我的代理在此服务器上响应,而不必是 @mentioned” 在你的公会配置中设置 `requireMention: false`: ```json5 { channels: { discord: { guilds: { YOUR_SERVER_ID: { requireMention: false, }, }, }, }, } ``` 要要求消息工具发送可见的 group/channel 回复,请设置 `messages.groupChat.visibleReplies: "message_tool"`。 长期记忆 (MEMORY.md) 仅在 DM 会话中自动加载;公会频道不加载它。 > “当我在 Discord 频道中提问时,如果您需要来自 MEMORY.md. 的长期上下文,请使用 memory_search 或 memory_get” 如果要为每个频道共享上下文,请把稳定的指令放在 `AGENTS.md` 或 `USER.md` 中(每个会话都会注入)。把长期笔记保存在 `MEMORY.md` 中,并在需要时使用 memory 工具访问它们。 现在创建频道并开始聊天。代理会看到频道名称,而且每个频道都是一个独立会话——可以设置 `#coding`、`#home`、`#research`,或者任何适合你工作流的频道。