Install
openclaw skills install @thcjp/discord通过 discord 工具控制 Discord 机器人,覆盖消息收发与编辑、表情回应与统计、 贴纸发送与上传、自定义表情包上传、投票创建、线程管理、消息置顶、全文搜索、 成员与角色查询、频道信息、语音状态、定时事件、审核操作(禁言/踢出/封禁)等全套能力. 支持通过 discord.actions.* 对各操作组...
openclaw skills install @thcjp/discord| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | Discord 全能控制处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
sendMessage:向频道 channel:<id> 或私信 user:<id> 发送消息,支持 content、mediaUrl(本地 file:/// 或远程 https://)、replyTo 回复指定消息.editMessage:按 channelId + messageId 编辑已发消息内容.deleteMessage:按 channelId + messageId 删除消息.readMessages:按 channelId 拉取最近消息,支持 limit 控制条数.react:对指定消息添加 emoji(如 ✅、⚠️).reactions:列出某条消息的回应及对应用户列表,支持 limit.emojiList:列出服务器可用自定义表情.emojiUpload:上传自定义表情,需 guildId、name、mediaUrl,可选 roleIds 限定可见角色。PNG/JPG/GIF,≤256KB.
输出: 返回表情回应的解析响应,包含完成状态码、响应数据和完成日志。sticker:发送贴纸,to 指定目标,stickerIds 最多 3 个,可附带 content.stickerUpload:上传贴纸,需 guildId、name、description、tags、mediaUrl。PNG/APNG/Lottie JSON,≤512KB.poll:在频道发起投票,需 question + 2~10 个 answers,支持 allowMultiselect、durationHours(默认 24,最大 768 即 32 天).threadCreate:基于消息或频道创建线程,需 channelId、name,可选 messageId.threadList:列出服务器下所有活跃线程.threadReply:在线程内回复消息.pinMessage / listPins:置顶或列出频道置顶消息.searchMessages:按 guildId 全文搜索,支持 content、channelIds、limit.memberInfo:查询成员资料(guildId + userId).roleInfo / roleAdd / roleRemove:查询或变更角色(默认关闭,需显式开启 discord.actions.roles).channelInfo / channelList:频道详情与列表.voiceStatus:查询成员当前语音状态.eventList:列出服务器定时事件.permissions:检查机器人在指定频道的权限.timeout:临时禁言成员(durationMinutes).kick / ban:踢出或封禁成员。需开启 discord.actions.moderation.action: "permissions" 检查机器人在目标频道的权限;确认所需操作组未被 discord.actions.* 关闭(角色、审核默认关闭).sendMessage/sticker/poll 用 to: "channel:<id>" 或 to: "user:<id>";react/readMessages/editMessage/deleteMessage 用 channelId 直传.<> 抑制预览);媒体走 mediaUrl,file:/// 本地或 https:// 远程;表情包/贴纸确认大小与格式限制.messageId、threadId 供后续编辑/回复/置顶复用.pinMessage、threadReply、searchMessages 回溯;审核类操作在日志频道留痕.目标:向 #releases(channel:9876543210)发布 v2.4.0 并置顶.
{
"action": "sendMessage",
"to": "channel:9876543210",
"content": "**v2.4.0 已发布**\n- 新增投票统计导出\n- 修复线程回复丢失问题\n完整说明见附件",
"mediaUrl": "file:///tmp/changelog-v2.4.0.md"
}
返回 messageId=1122334455667788 后:
{ "action": "react", "channelId": "9876543210", "messageId": "1122334455667788", "emoji": "✅" }
{ "action": "pinMessage", "channelId": "9876543210", "messageId": "1122334455667788" }
结果:频道出现带附件的发布消息,带 ✅ 反应并置顶.
目标:48 小时多选投票"下周团建活动".
{
"action": "poll",
"to": "channel:555000555000",
"question": "下周团建活动(可多选)",
"answers": ["密室逃脱", "户外烧烤", "电影之夜", "桌游下午茶"],
"allowMultiselect": true,
"durationHours": 48,
"content": "请大家投票,周四截止"
}
到期后通过 reactions 或投票对象统计各选项票数,在原频道回填"烧烤 12 票 / 密室 9 票"结果.
目标:成员 userId=111 在 guildId=999 发布广告,禁言 30 分钟并记录.
{ "action": "deleteMessage", "channelId": "123", "messageId": "456" }
{ "action": "timeout", "guildId": "999", "userId": "111", "durationMinutes": 30 }
{ "action": "threadCreate", "channelId": "123", "name": "mod-log-111-广告", "messageId": "456" }
在审核日志频道形成可追溯的处置线程.
sendMessage 报错说找不到频道,而 readMessages 能用?sendMessage 接收的是 to: "channel:<id>" 格式(带 channel: 前缀),readMessages 接收的是裸 channelId。两者格式不可混用,这是最常见的参数错误.
在 配置中使用 discord.actions.* 门控,例如设 discord.actions.moderation=false、discord.actions.roles=false(两者默认即关闭),也可关闭 emojiUploads、stickerUploads、polls 等.
表情包:PNG/JPG/GIF,≤256KB,服务器表情数受 Boost 等级限制。贴纸:PNG/APNG/Lottie JSON,≤512KB,普通服务器 5 个动态贴纸位,Boost 后扩展。stickerUpload 必须同时提供 name、description、tags.
durationHours 最大 768(32 天)。到期后投票自动关闭,可通过 reactions 拉取各选项的投票用户列表自行统计,或在投票消息上读取内置投票结果.
threadCreate 在频道内创建独立线程(可基于某条消息),threadReply 在已存在线程内发消息。普通 sendMessage 只发到主频道,不会自动进入线程。threadList 可按 guildId 列出服务器所有活跃线程以获取 threadId.
timeout/kick/ban 具有破坏性,默认关闭以防误操作。需要时在配置显式开启 discord.actions.moderation,并确保机器人持有 MODERATE_MEMBERS(禁言)、KICK_MEMBERS、BAN_MEMBERS 权限及高于目标成员的角色层级.
sendMessage 的 to 与其他 action 的 channelId 格式不同,混用会直接报错.roleAdd/roleRemove)与审核(timeout/kick/ban)默认关闭,需显式开启且机器人角色须高于目标.durationHours 上限 768 小时(32 天),单次最多 10 个选项.searchMessages)依赖服务器开启该权限,部分大型服务器可能受限或延迟较高.| 文本,通知类消息应改用列表或粗体.| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
需要配置对应API Key,详见上文环境配置章节
API Key配置方式:
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 消息批量发送 | 30分钟/次 | 5分钟/次 | 25分钟/次 | 100% |
| 表情统计 | 1小时/次 | 10分钟/次 | 50分钟/次 | 100% |
| 贴纸上传 | 30分钟/次 | 5分钟/次 | 25分钟/次 | 100% |
| 投票创建 | 15分钟/次 | 3分钟/次 | 12分钟/次 | 100% |
| 线程管理 | 1小时/次 | 10分钟/次 | 50分钟/次 | 100% |
| 对比维度 | 本技能 | 手动操作 | Python脚本 | 专业软件 |
|---|---|---|---|---|
| 功能全面性 | 高 | 低 | 中 | 高 |
| 操作便捷性 | 高 | 低 | 中 | 高 |
| 适应场景 | 广泛 | 有限 | 有限 | 有限 |
| 成本效益 | 高 | 低 | 中 | 高 |
| 扩展性 | 高 | 低 | 中 | 高 |
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 消息管理效率低 | 手动管理大量消息耗时且易出错 | 社区运营、团队协作 | 自动化消息管理 | 时间节约25分钟/次 |
| 表情统计困难 | 手动统计表情使用情况耗时且不准确 | 社区互动、表情包管理 | 自动化表情统计 | 准确率提升100% |
| 贴纸管理复杂 | 手动上传和管理贴纸耗时且难以维护 | 社区文化、贴纸推广 | 自动化贴纸管理 | 时间节约25分钟/次 |
| 风险项 | 等级 | 防护措施 | 验证方法 |
|---|---|---|---|
| API密钥泄露 | 高 | 通过环境变量配置,禁止硬编码 | 定期检查代码和配置文件 |
| 命令执行风险 | 高 | 仅执行白名单命令,避免拼接用户输入 | 使用沙箱环境测试 |
| 网络通信安全 | 中 | 使用HTTPS协议,验证SSL证书 | 定期检查证书有效期 |
| 敏感数据暴露 | 高 | 输出结果中不包含密钥、令牌等敏感信息 | 日志脱敏审查 |
| 未授权访问 | 中 | 限制访问权限,实施认证机制 | 定期审计访问日志 |
针对Discord 全能控制使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |