插件接 Discord、QQ
插件在 Discord 上能注册斜杠命令、收自己的按钮和表单、开私信会话、发频道消息;在 QQ 上能收「.」开头的命令、开私聊会话、发群消息。每一样都要清单里声明、装的人确认。
Discord:context.discord
| 要做的 | 接口 | 能力 |
|---|---|---|
| 注册斜杠命令 | add_commands(commands, guild_ids) |
discord.interactions |
| 收自己的按钮、下拉、表单 | set_interaction_handler(handler) |
discord.interactions |
| 收以某个前缀开头的文字消息 | set_legacy_command(prefix, handler) |
discord.commands.legacy |
| 私信某个人 | send_dm(user_id, content=…) |
discord.dm.send |
| 接管某个人发来的私信一段时间 | open_dm_session(user_id, ttl_seconds)、set_dm_text_handler(handler) |
discord.dm.session |
| 往频道发消息、改 / 删自己发的 | send_channel、edit_own_message、delete_own_message、find_own_message |
discord.channel.send、discord.message.delete |
- 斜杠命令只能注册清单
discord.commands里写过的顶层名字;按钮的custom_id要以p.<插件编号>:开头,别的插件的点击看不到。 - 私信每个插件每分钟最多 30 条,@ 一律关掉;@everyone 要
discord.mention.everyone。 - 私信会话最长两个小时(可以续);会话期间这个人发给人格的私信交给插件,不进人格的记忆。批这项能力,等于同意插件在会话期间接管这些私信。
- 只能改、删人格自己发的消息;在频道里找消息只返回编号,拿不到别人的消息内容。
QQ:context.qq
| 要做的 | 接口 | 能力 |
|---|---|---|
收以前缀开头的文字命令(像 .反馈) |
set_command(prefix, handler) |
qq.commands |
| 接管某个人的私聊一段时间 | open_private_session(user, ttl_seconds)、set_private_text_handler(handler) |
qq.private.session |
| 发私聊 | send_private(user, text) |
qq.private.send |
| 往群里发消息 | send_group(group, text) |
qq.group.send |
- QQ 的命令前缀要以
.或!开头,写在清单qq.command_prefixes里。 - 只在人格连着 QQ、而且没设成「只看不说」的时候能用;群消息只能发到人格的群白名单里的群,私聊只能发给人格本来就接私聊的人(私聊名单里的、认成同一个人的号)。
哪个人格
一个运行时里有好几个人格时,插件挂在其中一个人格上(没指定就是默认人格):命令、消息都走这个人格的账号。网页后台「插件中心」里这个插件的设置有「托管人格」一行(装了两个以上人格才出现);接口是 PUT /api/plugins/<插件编号>/hosting,只认现有的人格,空着就是默认人格。context.discord.persona_id() 告诉你是哪个。
没做到的
- QQ 上没有按钮、表单这类交互,插件只能收发文字。
- 一个插件只能挂在一个人格上,不能同时用几个人格的账号。