OpenClaw
渠道集成12 分钟阅读

OpenClaw Discord 集成:机器人设置与 Gateway Intents 详解

创建 Discord 机器人并连接 OpenClaw 的完整指南,涵盖 Gateway Intents 详解、私信安全策略配置以及服务器频道访问控制设置。

O

OpenClaw Guides

Tutorial Authors

概述

Discord 集成让您可以通过 Discord 机器人与 OpenClaw 进行对话,支持私信(DM)和服务器文字频道两种通信方式。本指南涵盖创建机器人、理解 Gateway Intents、配置私信安全策略以及设置服务器频道访问控制——所有内容均基于 OpenClaw 官方文档

前提条件

  • 已安装并运行 OpenClaw
  • 一个 Discord 账户
  • 一个您拥有管理员权限的 Discord 服务器(用于测试)

工作原理

在深入了解之前,先了解 OpenClaw 如何路由 Discord 消息:

  • 私信对话 会合并到一个共享会话(agent:main:main),默认使用基于配对的安全机制。
  • 服务器频道对话 按频道隔离,使用 agent:<agentId>:discord:channel:<channelId> 的模式。
  • 群组私信 默认被忽略,但可以通过 channels.discord.dm.groupEnabled 启用。

当存在有效令牌且 enabled 未设为 false 时,网关会自动启动。

步骤1:创建 Discord 应用

前往 Discord Developer Portal

  1. 访问 Discord Developer Portal
  2. 点击 New Application
  3. 输入名称(例如 "OpenClaw Assistant")
  4. 点击 Create

设置机器人

  1. 在应用中,进入 Bot 选项卡
  2. 点击 Add BotYes, do it!
  3. Token 下,点击 Copy 复制机器人令牌

重要: 机器人令牌应视同密码处理。切勿公开分享。如果泄露,请立即重新生成。

步骤2:启用特权 Gateway Intents

Gateway Intents 控制您的机器人从 Discord 接收哪些事件。OpenClaw 需要特定的特权 intents 才能正常运行。

所需 Intents

| Intent | 用途 | 是否必需 | |--------|------|----------| | Message Content Intent | 读取服务器频道中的消息文本 | 必需 — 缺少此 intent 时,机器人会显示 "Used disallowed intents" 错误,或连接成功但无法响应 | | Server Members Intent | 成员查询和白名单匹配 | 推荐 — 基于白名单的访问控制需要此 intent |

在 Developer Portal 中启用 Intents

  1. 在 Developer Portal 中进入 Bot 选项卡
  2. 滚动到 Privileged Gateway Intents
  3. 启用 MESSAGE CONTENT INTENT(必须开启)
  4. 启用 SERVER MEMBERS INTENT(推荐开启)
  5. 点击 Save Changes

注意: 加入 100 个以上服务器的机器人需要通过 Discord 验证才能使用特权 intents。

步骤3:生成机器人邀请 URL

配置 OAuth2

  1. 进入 OAuth2URL Generator

  2. 选择作用域:

    • bot
    • applications.commands(原生斜杠命令需要此项)
  3. 选择机器人权限:

    • View Channels
    • Send Messages
    • Read Message History
    • Embed Links
    • Attach Files
    • Add Reactions(可选但推荐)
    • Use External Emojis(可选)

警告: 除非正在进行调试,否则请避免授予 Administrator 权限。仅授予必要的权限。

  1. 复制生成的 URL

邀请机器人

  1. 在浏览器中打开 URL
  2. 选择您的测试服务器
  3. 点击 Authorize

获取数字 ID

在 Discord 中启用 Developer Mode(用户设置 → 应用设置 → 高级 → 开发者模式),这样您就可以右键点击复制服务器、频道和用户 ID——配置时会用到这些信息。

步骤4:配置 OpenClaw

方式 A:环境变量

将令牌设置为环境变量:

bash
export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN"

方式 B:配置文件

直接在 OpenClaw 配置文件中填入令牌:

json5
{
  channels: {
    discord: {
      enabled: true,
      token: "YOUR_BOT_TOKEN"
    }
  }
}

注意: 当环境变量和配置文件中同时存在令牌时,配置文件优先。

方式 C:多账户支持

运行多个机器人账户:

json5
{
  channels: {
    discord: {
      accounts: [
        { token: "BOT_TOKEN_1", name: "assistant-1" },
        { token: "BOT_TOKEN_2", name: "assistant-2" }
      ]
    }
  }
}

步骤5:启动并测试

启动或重启 OpenClaw 网关:

bash
openclaw gateway restart

检查频道状态:

bash
openclaw channels status --probe

如果发现异常,运行诊断:

bash
openclaw doctor

首次私信联系时,机器人默认使用配对机制——发送者会收到一个限时验证码(1 小时后过期),需要通过审批后对话才能开始。

私信安全策略

OpenClaw 提供三种私信访问控制策略:

配对模式(默认)

未知发送者会收到一个限时配对验证码,1 小时后过期。验证码必须通过审批后对话才能继续。

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "pairing"
      }
    }
  }
}

白名单模式

仅允许配置的用户 ID 或用户名发送私信:

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "allowlist",
        allowFrom: ["123456789012345678", "username#1234"]
      }
    }
  }
}

开放模式

任何人都可以发送私信(请谨慎使用):

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "open",
        allowFrom: ["*"]
      }
    }
  }
}

服务器频道配置

基本服务器访问控制

将机器人限制在特定服务器和频道,并设置提及要求:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          requireMention: true,
          channels: {
            "CHANNEL_ID": {
              enabled: true
            }
          }
        }
      }
    }
  }
}

重要: requireMention 必须在服务器或频道级别配置,不能放在 Discord 配置的顶层。

按频道设置

您可以为每个频道配置白名单和技能限制:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          channels: {
            "CHANNEL_ID_1": {
              enabled: true,
              requireMention: true
            },
            "CHANNEL_ID_2": {
              enabled: true,
              requireMention: false
            }
          }
        }
      }
    }
  }
}

配置参数

消息设置

| 参数 | 默认值 | 说明 | |------|--------|------| | textChunkLimit | 2000 | 每条发送消息的最大字符数 | | chunkMode | — | 设置在应用长度限制前按空行(段落边界)分割 | | maxLinesPerMessage | 17 | 每条消息的最大行数 | | mediaMaxMb | 8 | 媒体文件的最大大小(MB) |

上下文历史

json5
{
  channels: {
    discord: {
      historyLimit: 20  // 作为上下文包含的最近消息数量(默认:20,设为 0 禁用)
    }
  }
}

回复线程

原生回复线程默认关闭。通过以下方式启用:

json5
{
  channels: {
    discord: {
      replyToMode: "on"  // 启用原生回复线程
    }
  }
}

在智能体回复中使用回复标签控制线程行为:

  • [[reply_to_current]] — 回复当前正在处理的消息
  • [[reply_to:<message_id>]] — 回复特定消息

表情反应通知

按服务器配置表情反应事件通知:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          reactionNotifications: "own"  // 选项:"off", "own", "all", "allowlist"
        }
      }
    }
  }
}

工具操作

智能体可以调用 discord 工具在 Discord 中执行操作。大多数操作默认启用,但角色管理操作默认禁用。

可用操作

| 类别 | 操作 | |------|------| | 表情反应 | react, sticker, poll | | 消息 | readMessages, sendMessage, editMessage, deleteMessage, searchMessages | | 线程 | threadCreate, threadList, threadReply | | 置顶 | pinMessage, unpinMessage, listPins | | 频道 | channelInfo, channelList | | 成员 | memberInfo, roleInfo, permissions | | 角色 | roleAdd, roleRemove(默认禁用) | | 管理 | timeout, kick, ban(默认禁用) | | 其他 | emojiList, voiceStatus, eventList, eventCreate, setPresence |

高级功能

PluralKit 支持

启用后,OpenClaw 会将代理消息解析为其底层系统成员,将发送者显示为 "Member (PK:System)" 以防止意外的 Discord 提及通知。

执行审批按钮界面

在私信对话中,OpenClaw 可以展示执行审批按钮,用于工具操作的交互式确认。

重试配置

发送 API 调用在遇到速率限制时会自动重试,使用 Discord 的 retry_after 头信息进行指数退避。可通过 channels.discord.retry 参数配置重试行为。

故障排除

机器人在线但不响应

  1. 检查 Message Content Intent: 缺少此 intent 时,机器人可以连接但无法读取消息文本。前往 Developer Portal → Bot → Privileged Gateway Intents,确保 MESSAGE CONTENT INTENT 已启用。

  2. 验证频道权限: 确保机器人在目标频道中拥有 View ChannelsSend Messages 权限。

  3. 检查提及要求: 如果服务器或频道启用了 requireMention,您必须 @提及机器人。

  4. 检查服务器/频道白名单: 确认频道未被白名单配置阻止。

"Used Disallowed Intents" 错误

这意味着所需的 intents 未在 Developer Portal 中启用:

  1. 前往 Developer Portal → Bot → Privileged Gateway Intents
  2. 启用 MESSAGE CONTENT INTENT
  3. 保存并重启 OpenClaw 网关

私信不工作

  1. 确认 dm.enabled 未设为 false
  2. 检查私信策略——如果设为 "allowlist",确保用户 ID 已包含在列表中
  3. 如果使用 "pairing" 策略,检查配对验证码是否已过期(1 小时限制)

诊断命令

使用内置诊断工具排查问题:

bash
# 运行完整诊断
openclaw doctor

# 检查频道状态并探测连接
openclaw channels status --probe

最佳实践

  1. 将机器人令牌视同密码 — 在受管主机上使用环境变量,切勿将令牌提交到源代码管理。
  2. 仅授予必要权限 — 除非正在调试,否则避免使用 Administrator 权限。
  3. 使用配对或白名单私信策略 — "open" 策略仅应用于已配置适当速率限制的公开机器人。
  4. 启用 Server Members Intent — 如果使用基于白名单的访问控制,可实现更可靠的成员匹配。
  5. 在繁忙的服务器中使用 requireMention — 防止机器人对每条消息都进行响应。
  6. 使用 --force 重启网关 — 如果网关卡住:openclaw gateway restart --force

后续步骤