🦞OpenClaw ClawBook

Discord 接入

OpenClaw 支持通过 Discord Bot API 进行私信和服务器频道通信。支持表情反应、内联按钮、执行审批等丰富交互。

快速开始

  1. Discord 开发者门户 创建应用 → Bot → 复制 Token。
  2. 启用 Message Content Intent(推荐同时启用 Server Members Intent)。
  3. 生成 OAuth2 邀请链接,将机器人添加到服务器。
  4. 配置 Token 并启动 Gateway。
# 环境变量
export DISCORD_BOT_TOKEN="your-token"

# 或配置文件
{
  channels: {
    discord: {
      enabled: true,
      token: "your-token"
    }
  }
}

创建 Discord 应用

  1. Discord 开发者门户 → Applications → New Application
  2. Bot → Add Bot → 复制 Token
  3. 启用特权网关意图:
    • Message Content Intent(必需)
    • Server Members Intent(推荐,用于成员查找和允许列表匹配)
  4. OAuth2 → URL Generator,选择 Scopes:bot + applications.commands
  5. 设置 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

  1. Discord 桌面/网页 → 用户设置 → 高级 → 启用开发者模式
  2. 右键点击服务器名称 → 复制服务器 ID
  3. 右键点击频道 → 复制频道 ID
  4. 右键点击用户 → 复制用户 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 doctoropenclaw channels status --probe 排查问题