事件上报

February 26, 2020 · View on GitHub

这部分是从 https://cqhttp.cc/docs/4.14/#/Post 抄过来改一改的

数据类型的 number (int64) 就是 Long

数据类型的 number (int32) 就是 Integer

使用方法

@Component
public class DemoPlugin extends CQPlugin {
    @Override
    public int onPrivateMessage(CoolQ cq, CQPrivateMessageEvent event) {
        // 直接在这里event.getXXX();
        // 如果有嵌套可以继续get, 比如 event.getSender().getNickname()
        Long userId = event.getUserId();
        return MESSAGE_IGNORE;
    }
}

事件列表

私聊消息

上报数据

字段名数据类型可能的值说明
postTypestringmessage上报类型
messageTypestringprivate消息类型
subTypestringfriendgroupdiscussother消息子类型,如果是好友则是 friend,如果从群或讨论组来的临时会话则分别是 groupdiscuss
messageIdnumber (int32)-消息 ID
userIdnumber (int64)-发送者 QQ 号
messagemessage-消息内容
rawMessagestring-原始消息内容
fontnumber (int32)-字体
senderobject-发送人信息

其中 sender 字段的内容如下:

字段名数据类型说明
userIdnumber (int64)发送者 QQ 号
nicknamestring昵称
sexstring性别,malefemaleunknown
agenumber (int32)年龄

需要注意的是,sender 中的各字段是尽最大努力提供的,也就是说,不保证每个字段都一定存在,也不保证存在的字段都是完全正确的(缓存可能过期)。

示例
{
    "time": 1515204254,
    "post_type": "message",
    "message_type": "private",
    "sub_type": "friend",
    "message_id": 12,
    "user_id": 12345678,
    "message": "你好~",
    "raw_message": "你好~",
    "font": 456,
    "sender": {
        "nickname": "小不点",
        "sex": "male",
        "age": 18
    }
}

下面的其它事件同这个类似,将不再给出。

响应数据

字段名数据类型说明默认情况
replymessage要回复的内容不回复
autoEscapeboolean消息内容是否作为纯文本发送(即不解析 CQ 码),只在 reply 字段是字符串时有效不转义

群消息

上报数据

字段名数据类型可能的值说明
postTypestringmessage上报类型
messageTypestringgroup消息类型
subTypestringnormalanonymousnotice消息子类型,正常消息是 normal,匿名消息是 anonymous,系统提示(如「管理员已禁止群内匿名聊天」)是 notice
messageIdnumber (int32)-消息 ID
groupIdnumber (int64)-群号
userIdnumber (int64)-发送者 QQ 号
anonymousobject-匿名信息,如果不是匿名消息则为 null
messagemessage-消息内容
rawMessagestring-原始消息内容
fontnumber (int32)-字体
senderobject-发送人信息

其中 anonymous 字段的内容如下:

字段名数据类型说明
idnumber (int64)匿名用户 ID
namestring匿名用户名称
flagstring匿名用户 flag,在调用禁言 API 时需要传入

sender 字段的内容如下:

字段名数据类型说明
userIdnumber (int64)发送者 QQ 号
nicknamestring昵称
cardstring群名片/备注
sexstring性别,malefemaleunknown
agenumber (int32)年龄
areastring地区
levelstring成员等级
rolestring角色,owneradminmember
titlestring专属头衔

需要注意的是,sender 中的各字段是尽最大努力提供的,也就是说,不保证每个字段都一定存在,也不保证存在的字段都是完全正确的(缓存可能过期)。尤其对于匿名消息,此字段不具有参考价值。

响应数据

字段名数据类型说明默认情况
replymessage要回复的内容不回复
autoEscapeboolean消息内容是否作为纯文本发送(即不解析 CQ 码),只在 reply 字段是字符串时有效不转义
atSenderboolean是否要在回复开头 at 发送者(自动添加),发送者是匿名用户时无效at 发送者
deleteboolean撤回该条消息不撤回
kickboolean把发送者踢出群组(需要登录号权限足够),不拒绝此人后续加群请求,发送者是匿名用户时无效不踢
banboolean把发送者禁言 banDuration 指定时长,对匿名用户也有效不禁言
banDurationnumber禁言时长30 分钟

讨论组消息

上报数据

字段名数据类型可能的值说明
postTypestringmessage上报类型
messageTypestringdiscuss消息类型
messageIdnumber (int32)-消息 ID
discussIdnumber (int64)-讨论组 ID
userIdnumber (int64)-发送者 QQ 号
messagemessage-消息内容
rawMessagestring-原始消息内容
fontnumber (int32)-字体
senderobject-发送人信息

其中 sender 字段的内容如下:

字段名数据类型说明
userIdnumber (int64)发送者 QQ 号
nicknamestring昵称
sexstring性别,malefemaleunknown
agenumber (int32)年龄

响应数据

字段名数据类型说明默认情况
replymessage要回复的内容不回复
autoEscapeboolean消息内容是否作为纯文本发送(即不解析 CQ 码),只在 reply 字段是字符串时有效不转义
atSenderboolean是否要在回复开头 at 发送者(自动添加)at 发送者

群文件上传

注意:仅群文件上传表现为事件,好友发送文件在 酷Q 中没有独立的事件,而是直接表现为好友消息,请注意在编写业务逻辑时进行判断。

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringgroupUpload通知类型
groupIdnumber (int64)-群号
userIdnumber (int64)-发送者 QQ 号
fileobject-文件信息

其中 file 字段的内容如下:

字段名数据类型说明
idstring文件 ID
namestring文件名
sizenumber (int64)文件大小(字节数)
busidnumber (int64)busid(目前不清楚有什么作用)

群管理员变动

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringgroupAdmin通知类型
subTypestringsetunset事件子类型,分别表示设置和取消管理员
groupIdnumber (int64)-群号
userIdnumber (int64)-管理员 QQ 号

群成员减少

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringgroupDecrease通知类型
subTypestringleavekickkickMe事件子类型,分别表示主动退群、成员被踢、登录号被踢
groupIdnumber (int64)-群号
operatorIdnumber (int64)-操作者 QQ 号(如果是主动退群,则和 userId 相同)
userIdnumber (int64)-离开者 QQ 号

群成员增加

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringgroupIncrease通知类型
subTypestringapproveinvite事件子类型,分别表示管理员已同意入群、管理员邀请入群
groupIdnumber (int64)-群号
operatorIdnumber (int64)-操作者 QQ 号
userIdnumber (int64)-加入者 QQ 号

群禁言

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringgroupBan通知类型
subTypestringbanliftBan事件子类型,分别表示禁言、解除禁言
groupIdnumber (int64)-群号
operatorIdnumber (int64)-操作者 QQ 号
userIdnumber (int64)-被禁言 QQ 号
durationnumber (int64)-禁言时长,单位秒

好友添加

上报数据

字段名数据类型可能的值说明
postTypestringnotice上报类型
noticeTypestringfriendAdd通知类型
userIdnumber (int64)-新添加好友 QQ 号

加好友请求

上报数据

字段名数据类型可能的值说明
postTypestringrequest上报类型
requestTypestringfriend请求类型
userIdnumber (int64)-发送请求的 QQ 号
commentstring-验证信息(可能包含 CQ 码,特殊字符被转义)
flagstring-请求 flag,在调用处理请求的 API 时需要传入

响应数据

字段名数据类型说明默认情况
approveboolean是否同意请求不处理
remarkstring添加后的好友备注(仅在同意时有效)无备注

加群请求/邀请

上报数据

字段名数据类型可能的值说明
postTypestringrequest上报类型
requestTypestringgroup请求类型
subTypestringaddinvite请求子类型,分别表示加群请求、邀请登录号入群
groupIdnumber (int64)-群号
userIdnumber (int64)-发送请求的 QQ 号
commentstring-验证信息(可能包含 CQ 码,特殊字符被转义)
flagstring-请求 flag,在调用处理请求的 API 时需要传入

响应数据

字段名数据类型说明默认情况
approveboolean是否同意请求/邀请不处理
reasonstring拒绝理由(仅在拒绝时有效)无理由

元事件

上面的事件列表是 酷Q 直接支持的、QQ 机器人真实接收到的事件,除了这些,插件自己还会产生一类事件,这里称之为「元事件」,例如生命周期事件、心跳事件等,这类事件与插件(以及 酷Q)本身的运行状态有关,而与 QQ 无关。

元事件的上报方式和普通事件完全一样,post_type 字段为 meta_event

元事件列表

生命周期

字段名数据类型可能的值说明
postTypestringmetaEvent上报类型
metaEventTypestringlifecycle元事件类型
subTypestringenabledisableconnect事件子类型,分别表示插件启用、插件停用、WebSocket 连接成功

注意,目前生命周期元事件中,只有 HTTP 上报(配置了 post_url )的情况下可以收到 enabledisable,只有 WebSocket 和反向 WebSocket 可以收到 connect

心跳

心跳类型的元事件需要通过设置配置项 enable_heartbeattrue 开启,并可通过 heartbeat_interval 配置心跳间隔(单位毫秒)。

字段名数据类型可能的值说明
postTypestringmetaEvent上报类型
metaEventTypestringheartbeat元事件类型
statusobject-状态信息
intervalnumber (int64)-到下次心跳的间隔,单位毫秒

其中 status 字段的内容和 get_status 接口的响应数据 相同。