概述
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 即可