OpenClaw 集成 Discord 详细指南
前言
之前研究了飞书、WhatsApp、Telegram等渠道的集成。发现都不是很满意:
- 飞书:接口限额,调用频率受限
- WhatsApp:各种格式支持有限,消息类型受限
- Telegram:体验还算可以,但功能相对简单
试了下 Discord,发现它有很多优势:
- ✅ 支持格式多(文本、图片、视频、文件等)
- ✅ 支持 Markdown 格式
- ✅ 可以在群聊、频道、私聊场景中使用机器人,可用于多Agent
- ✅ 支持斜杠命令(Slash Commands)
- ✅ 支持丰富的 Embed 消息格式
- ✅ API 调用限额合理,适合生产环境
![[image-20260205102413692.png]]
下面详细介绍从零到一的集成步骤。
📋 准备工作
在开始之前,请确保你已经:
- ✅ 拥有一个 Discord 账号(如果没有,请先注册:https://discord.com/)
- ✅ 已安装 Node.js 环境(建议 v22+)
- ✅ 已安装 OpenClaw 或 Clawdbot
- ✅ 必须有梯子, 需要开启 TUN 模式 或全局代理
第一步:创建 Discord 应用和机器人
1.1 访问 Discord 开发者门户
- 打开浏览器,访问:https://discord.com/developers/applications
- 如果未登录,会提示你登录 Discord 账号
- 登录后,点击右上角的 “New Application” 按钮
1.2 创建应用
- 在弹出的对话框中,给你的应用命名(例如:
OpenClaw Bot或MyBot) - 点击 “Create” 按钮创建应用
- 应用创建后,会进入应用概览页面
提示:
- 应用名称可以后续修改
- 可以上传应用图标(推荐上传)
- 填写应用描述(可选)
1.3 创建机器人
- 在左侧菜单中,点击 “Bot” 选项
- 在页面右侧,点击 “Add Bot” 按钮
- 确认对话框中点击 “Yes, do it!”
1.4 配置机器人权限(⚠️ 重要步骤)
在 Bot 页面中,找到 “Privileged Gateway Intents” 部分,必须开启以下权限:
| 权限名称 | 说明 | 是否必需 |
|---|---|---|
| ✅ MESSAGE CONTENT INTENT | 用于读取消息内容 | 必需 |
| ✅ SERVER MEMBERS INTENT | 用于成员相关功能 | 可选 |
| ✅ PRESENCE INTENT | 用于在线状态功能 | 可选 |
特别注意:
MESSAGE CONTENT INTENT是必需的,否则机器人无法读取消息内容- 这些权限开启后,机器人可以访问更丰富的消息数据
1.5 获取机器人 Token
- 在 Bot 页面的 “Build-A-Bot” 部分,点击 “Reset Token” 按钮
- 在确认对话框中点击 “Yes, do it!”
- 重要:Token 只会显示一次,请立即复制并妥善保存!
- Token 格式示例:
MTQ2NjY0MzE3OTA4NzU5MzU0NQ.Gc4idi.04PM1TqFYnOyW9IJyzyX-Rz4VMQakql_gVeY0k
安全提示:
- ⚠️ Token 相当于机器人的密码,绝对不能分享给他人
- ⚠️ 不要将 Token 提交到公开代码仓库(如 GitHub)
- ⚠️ 如果 Token 泄露,立即点击 “Reset Token” 重新生成
1.6 配置 OAuth2 权限
这一步用于生成邀请机器人到服务器的链接。
- 在左侧菜单中,点击 “OAuth2” → “URL Generator”
在 “Scopes” 部分,勾选以下选项:
- ✅ bot - 机器人身份
- ✅ applications.commands - 斜杠命令权限
在 “Bot Permissions” 部分,勾选以下权限:
- ✅ Read Messages/View Channels - 读取消息
- ✅ Send Messages - 发送消息
- ✅ Embed Links - 发送富文本链接
- ✅ Attach Files - 发送文件
- ✅ Use Slash Commands - 使用斜杠命令
- ✅ Read Message History - 读取消息历史(可选)
- ✅ Mention Everyone - @所有人权限(谨慎使用)
- ✅ Add Reactions - 添加 Emoji 反应(推荐,用于点赞、标记等)
复制生成的 URL(页面底部的 “Generated URL” 部分)
1.7 邀请机器人到服务器
- 将复制的 URL 粘贴到浏览器中打开
- 在下拉菜单中选择要添加机器人的服务器(如果没有,可以创建一个新服务器)
- 点击 “授权” 按钮
- 确认授权后,机器人就会被添加到服务器
验证:
- 打开 Discord 客户端,进入你的服务器
- 在右侧成员列表中应该能看到机器人(状态通常是离线)
- 机器人的名称后面会有 “BOT” 标识
获取 ID(服务器/用户/频道):
Discord 到处使用数字 ID;OpenClaw 配置优先使用 ID。
- Discord(桌面/网页)→ 用户设置 → 高级 → 启用 开发者模式
- 右键点击:
- 服务器名称 → 复制服务器 ID(服务器 ID)
- 频道(例如
#help)→ 复制频道 ID - 你的用户 → 复制用户 ID
第二步:配置 Discord 通道
3.1 定位配置文件
OpenClaw/Clawdbot 的配置文件通常位于:
- Linux/Mac:
~/.openclaw/openclaw.json - Windows:
C:\Users\你的用户名\.openclaw\openclaw.json
3.2 编辑配置文件
使用你喜欢的编辑器打开配置文件,添加 Discord 通道配置:
基础配置(最小可用配置):
{
"plugins": {
"entries": {
"discord": {
"enabled": true
}
}
},
"channels": {
"discord": {
"token": "你的Discord机器人Token",
"enabled": true
}
}
}
3.5 多 Agent 频道配置(⭐ 核心功能)
核心架构:
这是一个一人软件公司,用discord的频道来隔离不同角色,每个频道有自己的工作空间、模型、人设、会话session等等。
频道间互不影响,并且能发挥模型的最大能力。前端强的模型来做前端的事,后端强的来做后端的事。这些优势是飞书和 Telegram 没有的。
┌─────────────────────────────────────────────────────────────┐
│ Discord 服务器 │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ #产品经理 │ │ #UI设计 │ │ #前端开发 │ │
│ │ 频道ID: A │ │ 频道ID: B │ │ 频道ID: C │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ 1 个 Discord │ │
│ │ Bot │ │
│ │ Token: xxx │ │
│ └───────┬───────┘ │
└────────────────────────────┼────────────────────────────────┘
│
│ 频道ID → bindings 匹配
│
┌────────▼────────┐
│ OpenClaw │
│ Gateway │
└────────┬────────┘
│ 路由到对应 Agent
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ 产品经理 │ │ 设计师 │ │ 前端 │
│workspace │ │workspace │ │workspace│
│SOUL.md │ │SOUL.md │ │SOUL.md │
│MEMORY.md │ │MEMORY.md │ │MEMORY.md│
└─────────┘ └─────────┘ └─────────┘
架构说明:
5 个频道:
- `产品经 - 频道 ID: xxxA
设计- 频道 ID: xxxB前端- 频道 ID: xxxC后端- 频道 ID: xxxD测试- 频道 ID: xxxE
5 个 Agent(每个有独立 workspace):
- 产品 - workspace:
~/.openclaw/discord/workspace-product - 设计- workspace:
~/.openclaw/discord/workspace-design - 前端 - workspace:
~/.openclaw/discord/workspace-frontend - 后端 - workspace:
~/.openclaw/discord/workspace-backend - 测试 - workspace:
~/.openclaw/discord/workspace-qa
- 产品 - workspace:
1 个 Bot:
- Discord Bot(只有一个 Token)
- 在所有频道中在线
- 根据 bindings 配置路由消息到对应 Agent
关键概念 - Workspace:
每个 Agent 都有自己独立的 workspace 目录,包含:
SOUL.md- Agent 的人设、角色定位、能力边界MEMORY.md- Agent 的长期记忆和历史对话- 其他配置文件
为什么需要独立 workspace?
- ✅ 人设独立:每个 Agent 有不同的 SOUL.md,形成不同的人格
- ✅ 记忆隔离:不同 Agent 的对话历史互不干扰
- ✅ 配置灵活:可以为每个 Agent 设置不同的参数和提示词
- ✅ 干净、隔离、不串味:真正实现功能隔离
3.5.1 创建 Discord 频道
首先在 Discord 服务器中创建对应的频道:
- 进入你的 Discord 服务器
- 点击频道列表旁边的 “+” 按钮
- 选择 “Create Channel”
- 为每个 Agent 创建一个专用频道:
产品- 产品经理工作区设计- UI 设计师工作区前端- 前端工程师工作区后端- 后端工程师工作区测试- 测试工程师工作区
- 每个频道可以设置为私享频道(Private Channel),仅允许特定成员访问
频道设置提示:
- 为每个频道添加对应的 Emoji 前缀,便于识别
- 设置频道描述,说明该频道的用途
- 可以为每个频道创建子频道,用于项目讨论
3.5.2 获取频道 ID
使用开发者模式获取每个频道的 ID:
- 打开 Discord 客户端
- 进入 Settings → Advanced
- 开启 Developer Mode
- 右键点击每个频道,选择 “Copy ID”
- 将所有频道 ID 记录下来
3.5.3 创建 Agent Workspace
为每个 Agent 创建独立的 workspace 目录和配置文件:
创建目录结构:
# 在命令行执行
mkdir -p ~/.openclaw/discord/workspace-product
mkdir -p ~/.openclaw/discord/workspace-design
mkdir -p ~/.openclaw/discord/workspace-frontend
mkdir -p ~/.openclaw/discord/workspace-backend
mkdir -p ~/.openclaw/discord/workspace-qa
为每个 Agent 创建 SOUL.md:
产品经理的 SOUL.md (~/.openclaw/discord/workspace-product/SOUL.md):
# 人设
你是一位经验丰富的产品经理,擅长需求分析、用户故事编写、产品规划。
## 核心职责
1. 分析用户需求,提取关键信息
2. 编写清晰的用户故事和需求文档
3. 协助产品决策和优先级排序
4. 提供产品思维和最佳实践建议
## 工作方式
- 始终保持专业、清晰的沟通风格
- 用结构化的方式表达需求
- 注重用户价值和产品目标
## 边界
- 不提供具体的技术实现方案(交给开发团队)
- 不提供 UI 设计细节(交给设计团队)
前端工程师的 SOUL.md (~/.openclaw/discord/workspace-frontend/SOUL.md):
# 人设
你是一位资深的前端工程师,精通 React、Vue、TypeScript 等现代前端技术。
## 技术栈
- React, Vue, TypeScript
- Tailwind CSS, SCSS
- Next.js, Vite
- 状态管理: Redux, Zustand
## 核心职责
1. 前端架构设计和技术选型
2. 代码审查和最佳实践建议
3. 性能优化和调试
4. 组件设计和状态管理
## 工作方式
- 提供具体、可执行的代码建议
- 解释代码的原理和设计思路
- 遵循 Clean Code 原则
## 边界
- 不提供服务器端配置(后端工程师负责)
- 不提供部署脚本(DevOps 负责)
- 不提供 UI 设计稿(UI 设计师负责)
为每个 Agent 创建配置文件:
除了 SOUL.md,你还可以在 workspace 中创建其他配置文件来指定模型和参数(你也可以直接在openclaw.json中设置模型):
CONFIG.json(可选,在每个 workspace 目录下):
{
"model": "claude-3-sonnet",
"temperature": 0.6,
"maxTokens": 8192,
"memoryLimit": 1000
}
产品经理的 CONFIG.json (~/.openclaw/discord/workspace-product/CONFIG.json):
{
"model": "claude-3-sonnet",
"temperature": 0.7,
"maxTokens": 4096,
"memoryLimit": 500
}
UI 设计师的 CONFIG.json (~/.openclaw/discord/workspace-design/CONFIG.json):
{
"model": "claude-3-sonnet",
"temperature": 0.8,
"maxTokens": 4096,
"memoryLimit": 500
}
后端工程师的 CONFIG.json (~/.openclaw/discord/workspace-backend/CONFIG.json):
{
"model": "claude-3-sonnet",
"temperature": 0.5,
"maxTokens": 8192,
"memoryLimit": 1000
}
测试工程师的 CONFIG.json (~/.openclaw/discord/workspace-qa/CONFIG.json):
{
"model": "claude-3-sonnet",
"temperature": 0.6,
"maxTokens": 4096,
"memoryLimit": 500
}
CONFIG.json 参数说明:
| 参数 | 类型 | 说明 | 推荐值 |
|---|---|---|---|
model |
string | 使用的 AI 模型 | claude-3-sonnet, claude-3-haiku |
temperature |
number | 生成随机性(0-2) | 产品 0.7,设计 0.8,前端 0.6,后端 0.5,测试 0.6 |
maxTokens |
number | 最大生成 Token 数 | 前端/后端 8192,其他 4096 |
memoryLimit |
number | 记忆限制 | 500-1000 |
类似地,为其他 Agent 创建对应的 SOUL.md 和 CONFIG.json 文件。
3.5.4 配置 openclaw.json
配置文件分为三个部分:定义 Agent、开启 Discord、写 bindings。
完整配置示例:
{
// ========== 第一部分:定义 Agent ==========
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
},
"list": [
{
"id": "main",
"default": true,
"identity": {
"name": "小管家",
"emoji": "🤖"
},
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
},
{
"id": "product",
"workspace": "/root/.openclaw/discord/workspace-product",
"identity": {
"name": "产品经理",
"emoji": "📋"
},
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
},
{
"id": "designer",
"workspace": "/root/.openclaw/discord/workspace-design",
"identity": {
"name": "设计师",
"emoji": "🎨"
}
},
{
"id": "frontend",
"workspace": "/root/.openclaw/discord/workspace-frontend",
"identity": {
"name": "前端",
"emoji": "💻"
},
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
},
{
"id": "backend",
"workspace": "/root/.openclaw/discord/workspace-backend",
"identity": {
"name": "后端",
"emoji": "🔧"
},
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
},
{
"id": "qa",
"workspace": "/root/.openclaw/discord/workspace-qa",
"identity": {
"name": "测试",
"emoji": "🧪"
},
"model": {
"primary": "anthropic/claude-opus-4-6",
"fallbacks": [
"openai-codex/gpt-5.3-codex",
"google-antigravity/claude-opus-4-6-thinking"
]
}
}
]
},
// ========== 第二部分:开启 Discord ==========
"channels": {
"discord": {
"enabled": true,
"token": "你的BOT_TOKEN",
"groupPolicy": "open",
"guilds": {
"你的服务器ID": {
"channels": {
"产品经理频道ID": {
"allow": true,
"requireMention": false
},
"UI设计频道ID": {
"allow": true,
"requireMention": false
},
"前端开发频道ID": {
"allow": true,
"requireMention": false
},
"后端开发频道ID": {
"allow": true,
"requireMention": false
},
"测试频道ID": {
"allow": true,
"requireMention": false
}
}
}
}
}
},
// ========== 第三部分:写 bindings(频道 → Agent 路由) ==========
"bindings": [
{
"agentId": "product",
"match": {
"channel": "discord",
"peer": {
"kind": "channel",
"id": "产品经理频道ID"
},
"guildId": "你的服务器ID"
}
},
{
"agentId": "designer",
"match": {
"channel": "discord",
"peer": {
"kind": "channel",
"id": "UI设计频道ID"
},
"guildId": "你的服务器ID"
}
},
{
"agentId": "frontend",
"match": {
"channel": "discord",
"peer": {
"kind": "channel",
"id": "前端开发频道ID"
},
"guildId": "你的服务器ID"
}
},
{
"agentId": "backend",
"match": {
"channel": "discord",
"peer": {
"kind": "channel",
"id": "后端开发频道ID"
},
"guildId": "你的服务器ID"
}
},
{
"agentId": "qa",
"match": {
"channel": "discord",
"peer": {
"kind": "channel",
"id": "测试频道ID"
},
"guildId": "你的服务器ID"
}
}
]
}
配置说明:
requireMention: false(关键)⚠️workspace(重要)- 每个指向独立的 workspace 目录
- 不同 workspace = 不同人格
- 包含 SOUL.md、MEMORY.md 等配置文件
identity.emoji- 每个 Agent 有自己的 emoji
- 用于区分不同 Agent 的回复
bindings(核心)- 定义频道到 Agent 的路由规则
- 通过
peer.id匹配频道 ID - 通过
agentId指定对应的 Agent
3.5.5 重启并验证
配置完成后,重启 OpenClaw 网关:
openclaw gateway restart
验证方法:
去每个频道发句话测试:
# 产品经理频道
用户:你好
产品经理📋:你好!我是产品经理,有什么需求需要分析吗?
# 前端开发频道
用户:你好
前端💻:你好!我是前端工程师,有什么代码问题需要我帮忙吗?
验证标准:
- ✅ Emoji 正确(产品经理📋、前端💻、后端🔧)
- ✅ 人设正确(根据 SOUL.md 定义的回复风格)
- ✅ Emoji 对了,路由就没问题!
第四步:启动/重启 OpenClaw 网关
4.1 重启网关
配置文件修改后,需要重启网关使配置生效:
clawdbot gateway restart
4.2 检查网关状态
查看网关是否正常运行:
clawdbot gateway status
4.3 查看日志(如果需要)
如果遇到问题,可以查看详细日志:
clawdbot logs
或者查看 Discord 插件相关日志:
clawdbot logs --filter discord
4.4 自动热重载(可选)
如果你的 OpenClaw 配置了文件监视,配置文件修改后会自动重载。这种方式无需手动重启。
配置方法(在 openclaw.json 中):
{
"watchConfig": true
}
第五步:测试与验证
5.1 检查机器人在线状态
- 打开 Discord 客户端
- 进入你添加机器人的服务器
- 在右侧成员列表中查看机器人状态
- ✅ 机器人显示为 在线(绿色圆点)- 表示连接成功
- ❌ 机器人显示为 离线(灰色圆点)- 表示连接失败
5.2 群组消息测试
在服务器频道中发送消息:
Hello, bot!
期望结果:
- 机器人应该能够读取到消息(如果配置正确)
- 根据你的 OpenClaw 配置,机器人可能会有响应
5.3 私聊测试(如果配置了 dmPolicy: “pairing” 或 “open”)
- 在 Discord 中找到机器人(在成员列表)
- 右键点击机器人,选择 “Message”
- 发送测试消息:
或/ping你好,机器人
注意:
- 如果使用
pairing模式,可能需要先进行配对流程 - 配对方法取决于 OpenClaw 的具体实现
5.4 斜杠命令测试
- 在任意频道中,输入
/键 - 应该能看到机器人提供的命令列表
- 常见的默认命令:
/ping- 检查机器人状态/help- 获取帮助信息/status- 查看机器人状态
5.5 富文本消息测试
测试机器人是否支持富文本格式:
Markdown 测试:
**粗体文本**
*斜体文本*
`代码文本`
[链接文本](https://example.com)
Embed 测试:
如果机器人配置了 Embed 消息,应该能看到格式化的消息卡片。
5.6 验证清单
使用以下清单确认所有功能正常:
| 测试项 | 状态 | 备注 |
|---|---|---|
| 机器人在线显示 | ☐ / ☐ | 检查 Discord 客户端 |
| 群组消息读取 | ☐ / ☐ | 在频道发送消息 |
| 群组消息发送 | ☐ / ☐ | 检查机器人是否回复 |
| 私聊功能 | ☐ / ☐ | 如果启用了私信 |
| 斜杠命令 | ☐ / ☐ | 输入 / 查看命令 |
| Markdown 格式 | ☐ / ☐ | 发送格式化文本 |
| 文件附件 | ☐ / ☐ | 上传文件测试 |
| Emoji 反应 | ☐ / ☐ | 对消息添加 Emoji |
第六步:常见问题排查
6.1 机器人不在线
症状:机器人在 Discord 中显示为离线状态
可能原因及解决方案:
Token 错误
- 检查 Token 是否正确复制(注意不要有多余空格)
- 重新生成 Token(开发者门户 → Bot → Reset Token)
- 确认 Token 在配置文件中格式正确(不要有引号问题)
网络问题
- 检查服务器网络连接,确保服务器或本地环境可以正常访问 Discord API。如果使用了代理软件(如 Clash、V2Ray 等),需要开启 TUN 模式 或全局代理
- 确认防火墙没有阻止 Discord API 连接
- 尝试重启网关:
clawdbot gateway restart
网关未运行
- 检查网关状态:
clawdbot gateway status - 如果未运行,启动网关:
clawdbot gateway start
- 检查网关状态:
查看日志
clawdbot logs --tail 50 --filter discord查找错误信息,如:
- “Invalid token”
- “Connection refused”
- “Timeout”
6.2 无法读取消息
症状:机器人在线,但无法读取或响应消息
解决方案:
检查 MESSAGE CONTENT INTENT
- 回到 Discord 开发者门户
- 进入应用 → Bot
- 确保 MESSAGE CONTENT INTENT 已勾选
- 保存后重启网关
检查频道权限
- 在 Discord 服务器中,点击服务器名称 → Server Settings → Roles
- 找到机器人的角色
- 确保有 “Read Messages” 和 “Read Message History” 权限
检查机器人权限
- 进入 Discord 开发者门户
- 重新生成 OAuth2 URL(确保勾选了正确权限)
- 重新邀请机器人到服务器
6.3 Token 泄露
症状:Token 被泄露或怀疑泄露
紧急处理步骤:
立即重置 Token
- 进入 Discord 开发者门户
- Bot → Reset Token
- 复制新 Token
更新配置文件
- 使用新 Token 更新配置文件
- 重启网关
检查异常活动
- 查看机器人日志,查找异常活动
- 考虑启用更多安全措施
6.4 速率限制
症状:机器人响应变慢或提示速率限制
解决方案:
Discord 速率限制
- Discord API 有速率限制(如:每秒最多发送 10 条消息)
- 实现消息队列或延迟发送
检查日志
clawdbot logs --filter "rate limit"优化发送逻辑
- 合并多条消息
- 使用 Embed 格式减少消息数量
6.5 斜杠命令不工作
症状:输入 / 后看不到机器人的命令
解决方案:
检查 OAuth2 权限
- 确保在 Scopes 中勾选了
applications.commands - 重新生成邀请链接并重新授权
- 确保在 Scopes 中勾选了
等待命令注册
- 新添加的命令可能需要几分钟才能生效
- 重启机器人可以加速命令注册
查看命令注册日志
clawdbot logs --filter "command"
Discord 特有功能
1. 斜杠命令(Slash Commands)
Discord 的斜杠命令是官方推荐的消息交互方式,提供更好的用户体验。
特点:
- ✅ 自动补全和提示
- ✅ 参数验证
- ✅ 集成的帮助文档
- ✅ 更好的权限控制
默认命令:
/ping- 检查机器人延迟/help- 显示帮助信息/status- 查看机器人状态
自定义命令示例:
{
"customCommands": {
"weather": {
"description": "查询天气",
"options": [
{
"name": "city",
"description": "城市名称",
"type": "string",
"required": true
}
]
},
"translate": {
"description": "翻译文本",
"options": [
{
"name": "text",
"description": "要翻译的文本",
"type": "string",
"required": true
},
{
"name": "from",
"description": "源语言",
"type": "string",
"required": false
},
{
"name": "to",
"description": "目标语言",
"type": "string",
"required": false
}
]
}
}
}
2. 消息反应(Message Reactions)
支持对消息添加 Emoji 反应,实现投票、反馈等功能。
使用场景:
- 📊 投票统计
- 👍👎 反馈收集
- ✅❌ 任务确认
- ⭐⭐⭐⭐⭐ 评分系统
示例:
// 添加消息反应
await message.react('👍');
await message.react('👎');
// 监听反应
client.on('messageReactionAdd', (reaction, user) => {
console.log(`${user} reacted with ${reaction.emoji.name}`);
});
3. 富文本消息(Embeds)
Discord 的 Embed 消息提供了丰富的格式化选项,可以创建美观的消息卡片。
Embed 特性:
- 🎨 自定义颜色
- 📝 多个字段
- 🖼️ 缩略图和图片
- 🔗 作者和页脚信息
- 📅 时间戳
Embed 示例:
{
"embed": {
"title": "📊 每日报告",
"description": "以下是今天的数据统计",
"color": 3447003,
"fields": [
{
"name": "用户增长",
"value": "+1,234",
"inline": true
},
{
"name": "活跃度",
"value": "85%",
"inline": true
},
{
"name": "错误率",
"value": "0.02%",
"inline": true
}
],
"footer": {
"text": "自动生成 | OpenClaw Bot",
"icon_url": "https://example.com/icon.png"
},
"timestamp": "2024-01-15T10:00:00Z"
}
}
4. 文件附件
支持发送各种类型的文件,包括图片、视频、文档等。
支持的文件类型:
- 📷 图片:PNG, JPG, GIF, WebP
- 🎬 视频:MP4, WEBM, MOV
- 📄 文档:PDF, DOC, TXT
- 💾 其他:ZIP, JSON, CSV 等
发送文件示例:
// 发送本地文件
await channel.send({
files: [{
attachment: '/path/to/file.pdf',
name: '报告.pdf',
description: '月度报告'
}]
});
// 发送 Buffer
const buffer = Buffer.from(data);
await channel.send({
files: [{
attachment: buffer,
name: 'data.json'
}]
});
5. 语音频道集成(高级)
机器人可以加入语音频道,实现以下功能:
- 🎵 音乐播放
- 🎙️ 语音转文字
- 🗣️ 文字转语音
- 🔊 音效播放
配置示例:
{
"voice": {
"enabled": true,
"autoJoin": false,
"channels": ["123456789012345678"]
}
}
6. Webhook 支持
使用 Webhook 可以在特定频道发送消息,无需机器人在线。
使用场景:
- 📢 系统通知
- 🔔 警报推送
- 📈 定时报告
- 🎉 事件提醒
Webhook 创建方法:
- 进入服务器设置
- 选择频道
- 集成 → Webhooks → 创建 Webhook
- 复制 Webhook URL
7. 线程(Threads)
Discord 的线程功能允许在频道中创建子讨论,适合复杂的对话场景。
使用场景:
- 💬 长对话讨论
- 🔍 问题追踪
- 📋 任务管理
- 🎯 用户支持
线程示例:
// 创建线程
const thread = await message.startThread({
name: '讨论主题',
autoArchiveDuration: 1440 // 24小时
});
// 在线程中发送消息
await thread.send('这是线程中的消息');
8. 按钮和选择菜单(交互组件)
Discord 支持交互式 UI 组件,提升用户体验。
按钮示例:
{
"components": [
{
"type": 1,
"components": [
{
"type": 2,
"label": "确认",
"style": 3,
"custom_id": "confirm_button"
},
{
"type": 2,
"label": "取消",
"style": 4,
"custom_id": "cancel_button"
}
]
}
]
}
最佳实践
安全建议
Token 管理
- ❌ 不要将 Token 提交到版本控制系统
- ❌ 不要在公开渠道分享 Token
- ✅ 使用环境变量存储 Token
- ✅ 定期更换 Token
权限控制
- ✅ 遵循最小权限原则
- ✅ 使用白名单机制
- ✅ 定期审查机器人权限
日志管理
- ✅ 记录关键操作日志
- ❌ 不要记录敏感信息(Token、用户密码)
- ✅ 定期清理旧日志
性能优化
消息缓存
- 合理设置
historyLimit - 避免缓存过多历史消息
- 合理设置
速率限制处理
- 实现消息队列
- 添加重试机制
- 监控 API 调用量
错误处理
- 捕获所有可能的异常
- 提供友好的错误提示
- 实现自动恢复机制
用户体验
响应时间
- 及时响应用户消息
- 对于长时间操作,显示加载状态
帮助文档
- 提供清晰的命令说明
- 使用示例和提示
状态反馈
- 明确的操作反馈
- 错误信息易于理解

微信收款码
支付宝收款码