1. 首页
  2. 事件参考
  3. 消息事件
  4. 消息事件

消息事件

  • 发布于 2026-08-16
  • 6 次阅读

v2.0.6修复了两处引用链路问题:群聊/好友发送入口未接入原生引用构造器,以及私聊接收解析遗漏原生引用段。引用事件保留实际收到的作者、原文和时间;发送接口成功不能替代对接收事件的检查。引用段内的 message_id 目前可能为空,不应将其当作可操作的消息标识;回复当前这条消息时使用事件顶层的 message_id

收到群聊消息

api.on('group_message_received', event => {
  console.log(event.group_name, event.sender.nickname)
  console.log(event.message)
})
字段 类型 说明
post_type string group_message
group_id number 群号
group_name string 群名称,无法取得时省略
msg object 原生消息标识
message_id number 当前账号范围内的公共消息标识,用于引用、撤回等操作
sender object 发送者资料
message Segment[] 结构化消息段
alt_message string 可阅读的消息摘要
source string 插件发送来源,接收消息时通常省略

收到好友消息

api.on('private_message_received', event => {
  console.log(event.sender.user_id, event.alt_message)
})
字段 类型 说明
post_type string friend_message
msg object 原生消息标识
message_id number 当前账号范围内的公共消息标识,不是 msg.seq
sender object 发送者资料
receiver object 接收者资料
message Segment[] 结构化消息段
alt_message string 可阅读的消息摘要
source string 插件发送来源,接收消息时通常省略

消息发送确认

插件通过框架发送消息时,QQ 的原生自身消息回推会与框架保存的发送标识匹配。私聊使用账号、客户端消息序号及随机标识;群聊在发送前按账号、群号和随机标识登记来源,收到发送响应后再校验服务器序号,避免先到的回推丢失来源。匹配成功时,事件的 event_typemessage_sent,并在 source 中给出发起发送的插件名。其他人发来的消息不会因此被归类为发送确认。

私聊同步使用客户端序号,可能早于发送接口响应到达;框架在发起发送前登记该标识。发送响应中的服务器序号与同步回推中的 msg.seq 不保证相等。后续引用消息应使用框架返回的 message_id,不要自行将两种序号混用。

v2.0.6将同一账号自己发送的私聊同步与发送响应关联到同一个 message_id,保留服务器确认的序号,重复或晚到的回推不会覆盖它。可以使用同步事件中的 self_idclient_typemessage_id 调用 delete_msg;若回推早于发送确认,撤回最多等待两秒的本地确认,不重新发送消息或补查历史。未获得确认时返回明确错误,不猜测序号;不能通过此接口撤回其他人发送的私聊消息。此说明不保证外部客户端发出的消息都有框架本地发送确认。

api.on('message_sent', event => {
  console.log(event.source, event.msg.seq, event.msg.random)
})

这不是接口调用成功的替代品:接口结果表示 QQ 已接受发送请求,message_sent 表示框架收到了可匹配的原生自身消息回推,两者不保证先后顺序。框架不会根据接口成功响应伪造事件。多协议登录时,同步可能出现在同一 QQ 的另一个已登录协议上,事件的 client_type 表示实际收到回推的协议。没有原生回推或发送标记已过期时,不保证产生发送确认事件。

消息标识

{
  uid: 0,
  seq: 123,
  random: 456,
  time: 1710000000,
}

seqrandom 是原生消息标识。只有明确要求原生序号的接口才传这些字段;delete_msg、引用回复等要求公共 message_id 的接口使用事件顶层标识,不能用 seq 替代。标识只能用于对应的账号和协议。

发送者

{
  user_id: 123456789,
  nickname: '昵称',
  card: '群名片',
  role: 0,
  title: '头衔',
  level: 1,
}

好友消息不包含群资料。群消息中的 cardroletitlelevel 只在原生推送提供时出现。

消息段

消息段统一使用:

{ type: 'text', data: { text: '你好' } }

完整类型见消息段

图片的 file_id 与尺寸标识资源,下载 URL 内的临时 rkey 可能因协议会话或凭据刷新而不同。不要将整条 URL 当作永久消息身份;引用或撤回时使用事件顶层的 message_id。撤回事件的缓存原文可能保留同一 QQ 另一协议实际收到的图片 URL。