Discord 接入
OpenClaw 支持通过 Discord Bot API 进行私信和服务器频道通信。支持表情反应、内联按钮、执行审批等丰富交互。
快速开始
- 在 Discord 开发者门户 创建应用 → Bot → 复制 Token。
- 启用 Message Content Intent(推荐同时启用 Server Members Intent)。
- 生成 OAuth2 邀请链接,将机器人添加到服务器。
- 配置 Token 并启动 Gateway。
# 环境变量
export DISCORD_BOT_TOKEN="your-token"
# 或配置文件
{
channels: {
discord: {
enabled: true,
token: "your-token"
}
}
}创建 Discord 应用
- Discord 开发者门户 → Applications → New Application
- Bot → Add Bot → 复制 Token
- 启用特权网关意图:
- Message Content Intent(必需)
- Server Members Intent(推荐,用于成员查找和允许列表匹配)
- OAuth2 → URL Generator,选择 Scopes:
bot+applications.commands - 设置 Bot Permissions:View Channels、Send Messages、Read Message History、Embed Links、Attach Files、Add Reactions
私信访问控制
通过 channels.discord.dm 控制私信行为:
{
channels: {
discord: {
dm: {
enabled: true,
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["123456789"],
groupEnabled: false, // 群组私信
groupChannels: [] // 群组私信频道白名单
}
}
}
}私信默认合并到主会话(agent:main:main);原生斜杠命令使用隔离的会话键。
服务器与频道
通过 guilds 按服务器 ID(推荐)或 slug 配置规则。每个服务器可独立设置允许列表、提及要求和频道过滤。
{
channels: {
discord: {
groupPolicy: "allowlist",
guilds: {
"123456789012345678": {
requireMention: true,
users: ["987654321"],
channels: {
general: { allow: true },
help: {
allow: true,
requireMention: true,
users: ["987654321"],
skills: ["search", "docs"],
systemPrompt: "回复简洁。"
}
}
},
"*": { requireMention: true }
}
}
}
}- 配置了
channels时,未列出的频道默认被拒绝 - 用
"*"频道条目设置所有频道的默认值 - 话题继承父频道配置,也可单独覆盖
- 频道会话键格式:
agent:<id>:discord:channel:<channelId>
工具与操作
Discord 渠道提供丰富的工具操作,每个都可通过 actions 单独开关:
| 操作 | 默认 | 说明 |
|---|---|---|
| reactions | 启用 | 表情反应 |
| messages | 启用 | 读取/发送/编辑/删除消息 |
| threads | 启用 | 创建/列出/回复话题 |
| pins | 启用 | 置顶/取消置顶 |
| polls | 启用 | 创建投票 |
| channels | 启用 | 频道/类别管理 |
| roles | 禁用 | 角色添加/移除 |
| moderation | 禁用 | 超时/踢出/封禁 |
执行审批
Discord 支持在私信中通过按钮 UI 审批工具执行请求:
{
channels: {
discord: {
execApprovals: {
enabled: true,
approvers: ["YOUR_USER_ID"]
}
}
}
}审批者会在私信中收到按钮提示:Allow once / Always allow / Deny。
获取 ID
- Discord 桌面/网页 → 用户设置 → 高级 → 启用开发者模式
- 右键点击服务器名称 → 复制服务器 ID
- 右键点击频道 → 复制频道 ID
- 右键点击用户 → 复制用户 ID
常见问题
Used disallowed intents
在开发者门户启用 Message Content Intent(必要时也启用 Server Members Intent),然后重启 Gateway。
机器人连接但不回复频道消息
- 检查 Message Content Intent 是否启用
- 确认机器人有该频道的 View/Send/Read History 权限
- 检查配置是否需要提及但你没有 @它
- 检查服务器/频道允许列表
requireMention: false 但仍不回复
groupPolicy 默认 allowlist,需设为 open 或在 guilds 下添加服务器条目。 注意 requireMention 必须放在 guilds 下,顶层会被忽略。
注意事项
- Token 等同于密码,优先用环境变量管理
- 只授予机器人所需的最小权限
- 出站文本按 2000 字符分块,长回复按 17 行分割
- 允许回复其他机器人时(
allowBots: true),注意防止回复循环 - 首先运行
openclaw doctor和openclaw channels status --probe排查问题