跳到主要内容

消息

  • 各平台的消息类型及字段均不同,微信是 XML,其他是 JSON,同时其中的字段也存在差异
  • 消息回复时调用的方式也不同,有些是直接回复,有些需要调用 API,且调用时参数各异
  • 需要一个统一的消息模型便于多平台消息的汇总、处理以及统一的指令格式调用

属性说明

  • num
    • 消息唯一序号
  • platform
    • 消息来源平台,包括 LR5921,LR232,WECHAT,BILI
  • evnet
    • 触发事件,包括处理、发送
    • 消息进入 msg_process 的处理逻辑,判断是调用指令匹配、发送函数还是其他的内容
    • 保留扩展可能,如游戏、匹配
  • kind
    • 消息种类,包含接收、添加、删除等接收类型,以及发送、消息获取等发送类型,详见下方
  • seq
    • 消息原始 ID,用于事件回复(LR232,WECHAT)、消息获取(LR5921)等
    • 其中 LR232 是字母数字混合,其他的为纯数字
    • 可为空(某些事件没有消息序号)
  • content
    • 消息内容,初始化时统一转换成消息段列表详见下方
    • 可为空(某些事件没有消息内容)
  • user
    • 消息发送者,私聊中为好友,群聊中为群成员
    • 其中 LR232 和 WECHAT 是字母数字组合,其他的为纯数字
    • 可为空(某些发送事件不需要 user 属性)
  • group
    • 消息发送群
    • LR232 为字母数字组合,LR5921 是纯数字
    • 可为空(私聊没有 group 属性)

消息处理流程

  • 后端接收到原始数据
  • 在 xx_receive 中格式化并创建消息
  • 消息创建后自动投入消息池、消息队列
  • 在消息队列中根据触发事件判断
    • 处理:根据消息种类、用户、群组、内容等判断对应指令
      • 在 logic.command 中执行对应指令
        • 进行 logic.data 中的数据操作(修改数据库、保存文件等)
        • 生成新的消息(一般为发送事件的消息)
    • 发送:调用消息发送函数
      • 调用对应的 xx_dispatch 函数

消息格式

msg.kind

消息接收格式

消息类型/平台参数说明LR5921 私聊LR232 私聊BILIWECHATLR5921 群聊LR232 群聊
接收
添加不处理
删除x不处理不处理x不处理不处理
撤回xx 撤回了 xx 的消息xx
戳戳xx x了x xx 的xxxxxx
回应[表情:xx]xxxxx
设精xx 给 xx 的消息设置了精华xxxxx

消息发送格式

其中 /n 代表'可为空',即 xx=None

函数/平台参数说明LR5921 私聊LR232 私聊BILIWECHATLR5921 群聊LR232 群聊
发送dispatch(content(其他/n),kind,user,group,num,seq,order)
添加发送dispatch(content(其他/n),kind,user,group,num,seq,order)xxxx
消息获取msg_get(seq,num/n, user/n)xxx
文件上传file_upload(file,type/n,url/n,record/n)xx
文件下载file_download(file,path)xxx
撤回withdraw(seq,user/n,kind/n)x
签名signature(sign)xxxx
昵称nickname(num,user)xxxx
  • 其中 LR232 发送可把 event 设置为发送1,2等等,可自动传入 order

单个:

  • BILI

    • 直播开启 live_start(num)
    • 直播标题 live_title(title,file/n),可使用标题|封面路径标题
    • 直播公告 live_notice(notice)
    • 直播关闭 live_stop()
    • 粉丝获取 fan_get()
    • 用户视频 user_video(num,mid)
    • 用户合集 user_colletion(num,mid,collection,sort) 使用合集号|true/false
    • 搜索 search(num,keyword,type/n) 使用搜索项|bili_user搜索项
    • 视频下载 bv_download(num,bv)
    • cid cid(av/n,bv/n) 使用av|av号bv|bv号
  • LR5921

    • 状态 status(state/n, battery_status/n, emoji/n, word/n),可使用自定义|表情|文字或者状态|电量
    • 成员 member(num,group)
    • 签到 sign_in(group)
    • 回应 echo(seq,emoji)
    • 精华 essence(id,content/n)
    • 头衔 title(user,group,title)

消息字段

  • 消息字段 content 格式为 json 列表
  • 使用 onebot-11 的消息段类型
  • 表格中加粗的为匹配字段

接收类型

类型/数据类型格式textidqqresultsummaryfileurlother
text文本文本
face[表情:xx]表情显示时转文字
at[at:xx]qq
rps[猜拳:xx]1,2,3显示时1:布2:剪刀3:石头
dice[骰子:xx]点数
reply[回复:xx]content:消息列表
forward[转发:xx]content.message:消息列表
poke[戳戳]种类type
image[动画表情:xx]概括文件名下载链接key,emoji_id,emoji_package_id(LR5921)
image[动画表情:xx]概括(LR232)
image[动画表情:动画表情]概括文件名下载链接file_size,width,height (LR232)
image[动画表情:xx]概括文件名下载链接sub_type,file_size(LR5921)
image[动画表情:xx]概括raw(WECHAT)
image[动画表情:xx]概括(BILI)
image[图片:xx]概括文件名下载链接sub_type,file_size(LR5921)
image[图片:xx]文件名下载链接file_size,width,height(LR232)
image[图片:xx]文件名下载链接original,size,width,height(BILI)
image[图片:xx]文件名下载链接(WECHAT)
record[语音:xx]文件名下载链接path,file_size(LR5921)
record[语音:xx]文件名下载链接file_size,width,height(LR232)
record[语音:xx]文件名(WECHAT)
video[视频:xx]文件名下载链接file_size(LR5921)
video[视频:xx]文件名(WECHAT)
file[文件:xx]文件名file_id,file_size(LR5921)
file[文件:xx]文件名url,size,width,height(LR232)
json[卡片:xx]data(prompt)
  • 注:表情分为普通的 ascii 表情,各平台均显示在文本中;以及带 id 的 QQ 表情,解析为"表情";其他的,包括 QQ 的商城表情、自定义表情,微信的 emoji 表情,B 站的各类表情包,全部解析为"动画表情"

发送类型

类型/数据类型格式textidqqresultsummaryfileurlother
text文本文本
face[表情:xx]表情表情列表中的表情中文
at[at:xx]qq
rps[猜拳:xx]布,剪刀,石头
dice[骰子:xx]点数
reply[回复:xx]消息 id
forward[转发:xx]消息 id
node[节点:xx]user_id, nickname, content(LR5921)
poke[戳戳]种类type(LR5921)
mface[动画表情:xx]概括name(LR5921)
image[动画表情:xx]概括文件名(LR5921)
image[动画表情:xx]概括(BILI)
image[图片:xx]文件名(LR5921/232/BILI/WECHAT)
record[语音:xx]文件名
video[视频:xx]文件名(LR5921/232)
video[视频:xx]文件名title.description(WECHAT)
file[文件:xx]文件路径(LR5921)
file[文件:xx]文件路径name(LR5921)
json[卡片:xx]data(prompt)
  • 注:发送时只要消息内容遵循格式,自动转换
  • 动画表情中可以使用 [动画表情:概括|名称] 的形式发送,系统会根据表情配置自动把名称解析成对应的字段并以 mface 格式发送
  • 动画表情也可以使用 [动画表情:概括|文件] 的形式发送,不在表情配置时会自动以 image 带文件形式发送
  • 视频在 wechat 可以用[视频:文件|标题|描述]的形式发送
  • 文件可以用[文件:路径]或者[文件:路径|名称]的形式发送,会自动解析
  • 卡片在 wechat 可以用[卡片:介绍|标题|描述|音乐链接]的形式发送,或者[卡片:介绍|标题|描述|链接|封面链接]的形式发送,链接必须可访问
  • 节点为:[节点:id|用户名|内容],内容为消息格式,可以为除转发外所有消息格式,同时可以是多种消息格式合并,如 文本[表情:xx],[节点:][节点:] 等等