Discord
Discord(Bot API)
状态:通过官方 Discord Bot Gateway 支持私聊和公会文字频道。
快速设置(初学者)
- 创建 Discord Bot 并复制 Bot Token。
- 在 Discord 应用设置中,启用消息内容意图(以及服务器成员意图,如果你计划使用白名单或名称查找)。
- 为 OpenClaw 设置 Token:
- 环境变量:
DISCORD_BOT_TOKEN=... - 或配置:
channels.discord.token: "..."。 - 如果两者都设置,配置优先(环境变量回退仅用于默认账户)。
- 环境变量:
- 邀请 Bot 到你的服务器,具有消息权限(如果你只想要私聊,创建私有服务器)。
- 启动 Gateway。
- 私聊访问默认是配对;首次联系时批准配对码。
最小配置:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN"
}
}
}
目标
- 通过 Discord 私聊或公会频道与 OpenClaw 对话。
- 直接聊天折叠到 Agent 的主会话(默认
agent:main:main);公会频道保持隔离为agent:<agentId>:discord:channel:<channelId>(显示名称使用discord:<guildSlug>#<channelSlug>)。 - 群组私聊默认被忽略;通过
channels.discord.dm.groupEnabled启用,并可选择通过channels.discord.dm.groupChannels限制。 - 保持路由确定性:回复总是返回到它们到达的频道。
工作原理
- 创建 Discord 应用 → Bot,启用你需要的意图(私聊 + 公会消息 + 消息内容),并获取 Bot Token。
- 邀请 Bot 到你的服务器,具有在你想使用它的地方读取/发送消息所需的权限。
- 使用
channels.discord.token(或DISCORD_BOT_TOKEN作为回退)配置 OpenClaw。 - 运行 Gateway;当 Token 可用时自动启动 Discord 频道(配置优先,环境变量回退)且
channels.discord.enabled不为false。- 如果你更喜欢环境变量,设置
DISCORD_BOT_TOKEN(配置块是可选的)。
- 如果你更喜欢环境变量,设置
- 直接聊天:发送时使用
user:<id>(或<@id>提及);所有轮次都落在共享的main会话中。纯数字 ID 有歧义并被拒绝。 - 公会频道:发送时使用
channel:<channelId>。默认需要提及,可以为每个公会或每个频道设置。 - 直接聊天:通过
channels.discord.dm.policy默认安全(默认:"pairing")。未知发送者获得配对码(1 小时后过期);通过openclaw pairing approve discord <code>批准。- 保持旧的"对任何人开放"行为:设置
channels.discord.dm.policy="open"和channels.discord.dm.allowFrom=["*"]。 - 硬白名单:设置
channels.discord.dm.policy="allowlist"并在channels.discord.dm.allowFrom中列出发送者。 - 忽略所有私聊:设置
channels.discord.dm.enabled=false或channels.discord.dm.policy="disabled"。
- 保持旧的"对任何人开放"行为:设置
- 群组私聊默认被忽略;通过
channels.discord.dm.groupEnabled启用,并可选择通过channels.discord.dm.groupChannels限制。 - 可选公会规则:通过公会 id(首选)或 slug 设置
channels.discord.guilds,带有每频道规则。 - 可选原生命令:
commands.native默认为"auto"(Discord/Telegram 开启,Slack 关闭)。使用channels.discord.commands.native: true|false|"auto"覆盖;false清除先前注册的命令。文本命令由commands.text控制,必须作为独立的/...消息发送。使用commands.useAccessGroups: false绕过命令的访问组检查。- 完整命令列表 + 配置:[斜杠命令(../tools/slash-commands.html)
- 可选公会上下文历史:设置
channels.discord.historyLimit(默认 20,回退到messages.groupChat.historyLimit)以在回复提及时包含最后 N 条公会消息作为上下文。设置0禁用。 - 反应:Agent 可以通过
discord工具触发反应(由channels.discord.actions.*门控)。- 反应移除语义:参见 [/tools/reactions(../tools/reactions.html)。
discord工具仅在当前频道是 Discord 时暴露。
- 原生命令使用隔离的会话键(
agent:<agentId>:discord:slash:<userId>)而不是共享的main会话。
注意:名称 → id 解析使用公会成员搜索并需要服务器成员意图;如果 Bot 无法搜索成员,使用 id 或 <@id> 提及。
注意:Slugs 是小写,空格替换为 -。频道名称不带前导 # 进行 slug 化。
注意:公会上下文 [from:] 行包含 author.tag + id 以便轻松进行 ping 就绪回复。
配置写入
默认情况下,Discord 允许写入由 /config set|unset 触发的配置更新(需要 commands.config: true)。
禁用:
{
channels: { discord: { configWrites: false } }
}
如何创建你自己的 Bot
这是在服务器(公会)频道如 #help 中运行 OpenClaw 的"Discord 开发者门户"设置。