名称: discord 描述: “当需要通过Otto的discord工具控制Discord时使用:发送消息、添加反应、发布或上传贴纸、上传表情符号、运行投票、管理线程/置顶/搜索、创建/编辑/删除频道和类别、获取权限或成员/角色/频道信息、设置机器人状态/活动,或在Discord私信或频道中处理管理操作。” 元数据: {“otto”:{“emoji”:“🎮”,“requires”:{“config”:[“channels.discord”]}}}
Discord 操作
概述
使用discord管理消息、反应、线程、投票和管理。您可以通过discord.actions.*禁用操作组(默认启用,但角色/管理除外)。该工具使用为Otto配置的机器人令牌。
需要收集的输入
- 对于反应:
channelId、messageId和一个emoji。 - 对于fetchMessage:
guildId、channelId、messageId,或一个如https://discord.com/channels/<guildId>/<channelId>/<messageId>的messageLink。 - 对于贴纸/投票/sendMessage:一个
to目标(channel:<id>或user:<id>)。可选的content文本。 - 投票还需要一个
question加上2–10个answers。 - 对于媒体:
mediaUrl,使用file:///path表示本地文件或https://...表示远程文件。 - 对于表情符号上传:
guildId、name、mediaUrl,可选的roleIds(限制256KB,PNG/JPG/GIF)。 - 对于贴纸上载:
guildId、name、description、tags、mediaUrl(限制512KB,PNG/APNG/Lottie JSON)。
消息上下文行包括discord message id和channel字段,您可以直接重用。
注意: sendMessage使用to: "channel:<id>"格式,不是channelId。其他操作如react、readMessages、editMessage直接使用channelId。
注意: fetchMessage接受消息ID或完整链接如https://discord.com/channels/<guildId>/<channelId>/<messageId>。
操作
对消息添加反应
{
"action": "react",
"channelId": "123",
"messageId": "456",
"emoji": "✅"
}
列出反应和用户
{
"action": "reactions",
"channelId": "123",
"messageId": "456",
"limit": 100
}
发送贴纸
{
"action": "sticker",
"to": "channel:123",
"stickerIds": ["9876543210"],
"content": "干得好!"
}
- 每个消息最多3个贴纸ID。
to可以是user:<id>用于私信。
上传自定义表情符号
{
"action": "emojiUpload",
"guildId": "999",
"name": "party_blob",
"mediaUrl": "file:///tmp/party.png",
"roleIds": ["222"]
}
- 表情符号图像必须是PNG/JPG/GIF且<=256KB。
roleIds是可选的;省略以使表情符号对所有人生效。
上传贴纸
{
"action": "stickerUpload",
"guildId": "999",
"name": "otto_wave",
"description": "Otto挥手打招呼",
"tags": "👋",
"mediaUrl": "file:///tmp/wave.png"
}
- 贴纸需要
name、description和tags。 - 上传必须是PNG/APNG/Lottie JSON且<=512KB。
创建投票
{
"action": "poll",
"to": "channel:123",
"question": "午餐吃什么?",
"answers": ["披萨", "寿司", "沙拉"],
"allowMultiselect": false,
"durationHours": 24,
"content": "现在投票"
}
durationHours默认为24;最大32天(768小时)。
检查机器人对频道的权限
{
"action": "permissions",
"channelId": "123"
}
可尝试的想法
- 使用✅/⚠️反应标记状态更新。
- 发布快速投票用于发布决策或会议时间。
- 部署成功后发送庆祝贴纸。
- 为发布时刻上传新表情符号/贴纸。
- 在团队频道运行每周“优先级检查”投票。
- 当用户请求完成时,私信发送贴纸作为确认。
操作门控
使用discord.actions.*禁用操作组:
reactions(反应 + 反应列表 + emojiList)stickers、polls、permissions、messages、threads、pins、searchemojiUploads、stickerUploadsmemberInfo、roleInfo、channelInfo、voiceStatus、eventsroles(角色添加/移除,默认false)channels(频道/类别创建/编辑/删除/移动,默认false)moderation(超时/踢出/封禁,默认false)presence(机器人状态/活动,默认false)
读取最近消息
{
"action": "readMessages",
"channelId": "123",
"limit": 20
}
获取单个消息
{
"action": "fetchMessage",
"guildId": "999",
"channelId": "123",
"messageId": "456"
}
{
"action": "fetchMessage",
"messageLink": "https://discord.com/channels/999/123/456"
}
发送/编辑/删除消息
{
"action": "sendMessage",
"to": "channel:123",
"content": "Otto发来问候"
}
带媒体附件:
{
"action": "sendMessage",
"to": "channel:123",
"content": "看看这个音频!",
"mediaUrl": "file:///tmp/audio.mp3"
}
to使用格式channel:<id>或user:<id>用于私信(不是channelId!)mediaUrl支持本地文件(file:///path/to/file)和远程URL(https://...)- 可选的
replyTo带消息ID以回复特定消息
{
"action": "editMessage",
"channelId": "123",
"messageId": "456",
"content": "修正错别字"
}
{
"action": "deleteMessage",
"channelId": "123",
"messageId": "456"
}
线程
{
"action": "threadCreate",
"channelId": "123",
"name": "Bug整理",
"messageId": "456"
}
{
"action": "threadList",
"guildId": "999"
}
{
"action": "threadReply",
"channelId": "777",
"content": "在线程中回复"
}
置顶
{
"action": "pinMessage",
"channelId": "123",
"messageId": "456"
}
{
"action": "listPins",
"channelId": "123"
}
搜索消息
{
"action": "searchMessages",
"guildId": "999",
"content": "发布说明",
"channelIds": ["123", "456"],
"limit": 10
}
成员 + 角色信息
{
"action": "memberInfo",
"guildId": "999",
"userId": "111"
}
{
"action": "roleInfo",
"guildId": "999"
}
列出可用自定义表情符号
{
"action": "emojiList",
"guildId": "999"
}
角色变更(默认禁用)
{
"action": "roleAdd",
"guildId": "999",
"userId": "111",
"roleId": "222"
}
频道信息
{
"action": "channelInfo",
"channelId": "123"
}
{
"action": "channelList",
"guildId": "999"
}
频道管理(默认禁用)
创建、编辑、删除和移动频道和类别。通过discord.actions.channels: true启用。
创建文本频道:
{
"action": "channelCreate",
"guildId": "999",
"name": "general-chat",
"type": 0,
"parentId": "888",
"topic": "一般讨论"
}
type:Discord频道类型整数(0 = 文本,2 = 语音,4 = 类别;支持其他值)parentId:要嵌套的类别ID(可选)topic、position、nsfw:可选
创建类别:
{
"action": "categoryCreate",
"guildId": "999",
"name": "项目"
}
编辑频道:
{
"action": "channelEdit",
"channelId": "123",
"name": "new-name",
"topic": "更新主题"
}
- 支持
name、topic、position、parentId(null以从类别移除)、nsfw、rateLimitPerUser
移动频道:
{
"action": "channelMove",
"guildId": "999",
"channelId": "123",
"parentId": "888",
"position": 2
}
parentId:目标类别(null以移到顶级)
删除频道:
{
"action": "channelDelete",
"channelId": "123"
}
编辑/删除类别:
{
"action": "categoryEdit",
"categoryId": "888",
"name": "重命名类别"
}
{
"action": "categoryDelete",
"categoryId": "888"
}
语音状态
{
"action": "voiceStatus",
"guildId": "999",
"userId": "111"
}
计划事件
{
"action": "eventList",
"guildId": "999"
}
管理(默认禁用)
{
"action": "timeout",
"guildId": "999",
"userId": "111",
"durationMinutes": 10
}
机器人状态/活动(默认禁用)
设置机器人在线状态和活动。通过discord.actions.presence: true启用。
Discord机器人只能设置活动中的name、state、type和url。其他活动字段(details、emoji、assets)被网关接受但被Discord静默忽略。
字段如何根据活动类型渲染:
- playing、streaming、listening、watching、competing:
activityName显示在侧栏机器人名称下(例如,类型为“playing”且名称为“with fire”时显示“with fire”)。activityState显示在个人资料弹出窗口中。 - custom:
activityName被忽略。仅activityState显示为侧栏中的状态文本。 - streaming:
activityUrl可能在客户端中显示或嵌入。
设置播放状态:
{
"action": "setPresence",
"activityType": "playing",
"activityName": "with fire"
}
侧栏结果:“with fire”。弹出窗口显示:“Playing: with fire”
带状态(显示在弹出窗口):
{
"action": "setPresence",
"activityType": "playing",
"activityName": "My Game",
"activityState": "In the lobby"
}
侧栏结果:“My Game”。弹出窗口显示:“Playing: My Game (换行) In the lobby”。
设置流媒体(可选URL,可能不渲染):
{
"action": "setPresence",
"activityType": "streaming",
"activityName": "Live coding",
"activityUrl": "https://twitch.tv/example"
}
设置收听/观看:
{
"action": "setPresence",
"activityType": "listening",
"activityName": "Spotify"
}
{
"action": "setPresence",
"activityType": "watching",
"activityName": "the logs"
}
设置自定义状态(侧栏文本):
{
"action": "setPresence",
"activityType": "custom",
"activityState": "享受"
}
侧栏结果:“享受”。注意:对于custom类型,activityName被忽略。
仅设置机器人状态(无活动/清除状态):
{
"action": "setPresence",
"status": "dnd"
}
参数:
activityType:playing、streaming、listening、watching、competing、customactivityName:对于非custom类型显示在侧栏的文本(custom时忽略)activityUrl:用于streaming类型的Twitch或YouTube URL(可选;可能不渲染)activityState:对于custom是状态文本;对于其他类型显示在个人资料弹出窗口status:online(默认)、dnd、idle、invisible
Discord 写作风格指南
保持对话性! Discord是聊天平台,不是文档。
该做
- 简短、有力的消息(1-3句理想)
- 多个快速回复 > 一大段文本
- 使用表情符号表达语气/强调 🦞
- 小写随意风格
- 将信息分解成易于消化的小块
- 匹配对话的能量
不该做
- 不要使用Markdown表格(Discord将其渲染为丑陋的原始
| text |) - 不要用
## 标题进行随意聊天(使用粗体或大写强调) - 避免多段落文章
- 不要过度解释简单事情
- 跳过“我很乐意帮助!”的废话
有效的格式
- 粗体强调
代码技术术语- 列表多项
-
引用引用
- 用
<>包裹多个链接以抑制嵌入
示例转换
❌ 不好:
我很乐意帮助您!以下是版本策略的全面概述:
## 语义版本
Semver使用MAJOR.MINOR.PATCH格式...
## 日历版本
CalVer使用基于日期的版本如...
✅ 好:
版本选项:semver(1.2.3)、calver(2026.01.04)或yolo(永远`latest`)。哪种适合您的发布节奏?