概述
GenshinUID-core(下简称 core)使用 WebSocket 与各 Bot 平台的插件(下简称插件)进行通信。
WebSocket 消息均使用 text 类型的 UTF-8 编码的 JSON,数据包结构请参阅下一节。
建立连接
插件通过连接 core 的 /ws/{bot_id} 路由建立连接。其中 bot_id 应替换为 Bot 平台的名称,如 NoneBot2。
消息类型 Message
消息由 type 和 data 两部分组成
type 标识此消息的类型,目前有如下类型:
text纯文本消息image图片file文件at提及reply回复node合并转发
此外,还有一种特殊的 log_{level} 类型,此类型仅存在于 MessageSend 包中,插件收到此消息,应按照 level 输出 data 中的内容
data 为任意类型,上方列出的类型对应的 data 如下:
text为文本内容image- 在
MessageReceive中,一般为 url - 在
MessageSend中,为 base64
- 在
file为string,内容为{文件名}|{文件base64}node为Message[](不允许嵌套node)reply为消息 idat为被提及人的 id
上报消息
Bot 平台接收到消息时,插件应向 core 发送 MessageReceive 包进行上报。
MessageReceive 包内容如下:
bot_id(string) 聊天平台的 id,请与路由的bot_id进行区分bot_self_id(string) 机器人 id,对应聊天平台的机器人 idmsg_id(string) 消息 id,对应聊天平台的消息 iduser_type(group/direct/channel/sub_channel) 当前消息所属类型:群/私聊/频道/子频道group_id(string)- 当
user_type为group时,此字段为群号 - 当
user_type为channel时,此字段为频道号 - 当
user_type为sub_channel时,此字段为子频道号
- 当
user_id(string) 用户 iduser_pm(integer) 用户权限,越小越高content(Message[]) 消息正文
user_pm 的建议user_pm 建议 >=1;
对于聊天平台身份与 Bot 框架的权限有联系的(如各聊天平台的 SDK),建议遵循下面的聊天平台身份与
user_pm的映射关系:- 对于
group:- 群主为
2 - 群管理员为
3 - 普通群员为
6 - 如果存在更低的身份,则使用更低的
user_pm
- 群主为
- 对于
channel和sub_channel:- 频道主为
2 - 当前频道的频道主为
3 - 频道管理员为
4 - 当前频道的管理员为
5 - 普通成员为
6 - 如果存在更低的身份,则使用更低的
user_pm
- 频道主为
- 对于
direct,非超级用户始终为6 - 超级用户始终为
1
- 对于
对于无直接联系的(如 Koishi.js),由高到低安排
user_pm,但有以下两条规定- 最高权限使用
1 - 普通权限使用
6
- 最高权限使用
发送消息
当插件接收到 core 发送的 MessageSend 包时,需通过 Bot 平台提供的接口,向聊天平台发送消息。
bot_id(string) 聊天平台的 id,请与路由的bot_id进行区分bot_self_id(string) 机器人 id,对应聊天平台的机器人 idmsg_id(string) 消息 id,对应聊天平台的消息 idtarget_type(string/null) 当前消息所属类型:群/私聊/频道/子频道target_id(string/null) 目标 idcontent(Message[]) 消息正文
content 中第 1 个元素为 log 类型的消息,则仅输出 log 即可