# 事件定义列表

> For the complete documentation index, see [llms.txt](https://simbot.forte.love/llms.txt).

QQ频道组件中的事件类型包含两个层面：

1. API 模块 中，对 QQ频道 API 中官方定义的事件结构的基本封装与实现。

2. 核心模块 中，基于 API 模块中的事件封装，对 simbot 标准库中的 `Event` 事件类型的实现。

## API 模块事件封装

API 模块所有的事件封装类型都在包 `love.forte.simbot.qguild.event` 中， 并且基本上命名与官网API中的事件类型名称有一定关联。

所有事件封装类型均继承密封类 `love.forte.simbot.qguild.event.Signal.Dispatch`。

> **Tip:**
> 自 `5.0` 起，`GroupAtMessageCreate.Data.author` 与 `GroupMessageCreate.Data.author` 在 `memberOpenid`、`memberRole`、`bot` 之外，补充 `id`、`username`、`unionOpenid` 和 `unionUserAccount`。 核心组件仍使用群成员 OpenID 作为 `QGGroupAuthor.id`，昵称由 `name` 提供。

Ready
: `love.forte.simbot.qguild.event.Ready`
:
:
:
: 事件类型名: `"READY"`
:
:
:
: 鉴权成功之后，后台会下发的 Ready Event.

Resumed
: `love.forte.simbot.qguild.event.Resumed`
:
:
:
: 事件类型名: `"RESUMED"`
:
:
:
: [4.恢复连接](https://bot.q.qq.com/wiki/develop/api/gateway/reference.html) 恢复成功之后，就开始补发遗漏事件，所有事件补发完成之后，会下发一个 `Resumed Event`

C2CManagementDispatch
: `love.forte.simbot.qguild.event.C2CManagementDispatch`
:
:
:
: 用户模块-用户管理相关事件。 `data` 类型为 `C2CManagementData`

FriendAdd
: `love.forte.simbot.qguild.event.FriendAdd`
:
:
:
: 事件类型名: `"FRIEND_ADD"`
:
:
:
: [用户添加机器人](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/user/manage/event.html#用户添加机器人) 触发场景	用户添加机器人'好友'到消息列表

FriendDel
: `love.forte.simbot.qguild.event.FriendDel`
:
:
:
: 事件类型名: `"FRIEND_DEL"`
:
:
:
: [用户删除机器人](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/user/manage/event.html#用户删除机器人) 触发场景	用户删除机器人'好友'

C2CMsgReject
: `love.forte.simbot.qguild.event.C2CMsgReject`
:
:
:
: 事件类型名: `"C2C_MSG_REJECT"`
:
:
:
: [拒绝机器人主动消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/user/manage/event.html#拒绝机器人主动消息) 触发场景	用户在机器人资料卡手动关闭"主动消息"推送

C2CMsgReceive
: `love.forte.simbot.qguild.event.C2CMsgReceive`
:
:
:
: 事件类型名: `"C2C_MSG_RECEIVE"`
:
:
:
: [允许机器人主动消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/user/manage/event.html#允许机器人主动消息) 触发场景	用户在机器人资料卡手动开启"主动消息"推送开关

C2CMessageCreate
: `love.forte.simbot.qguild.event.C2CMessageCreate`
:
:
:
: 事件类型名: `"C2C_MESSAGE_CREATE"`
:
:
:
: [单聊消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/send-receive/event.html#单聊消息) 触发场景	用户在单聊发送消息给机器人
:
:
:
: 自 `5.0` 起，事件数据还可能提供 `messageType` 和 `messageScene`。
:
:
:
: `messageScene` 包含消息来源 `source` 与场景扩展 `ext`；`ext` 是 `key=value` 形式的字符串列表，
:
:
:
: 自定义菜单开关操作的结果位于其中。 上游未提供这些字段时，对应值为 `null`。

GroupAtMessageCreate
: `love.forte.simbot.qguild.event.GroupAtMessageCreate`
:
:
:
: 事件类型名: `"GROUP_AT_MESSAGE_CREATE"`
:
:
:
: [群聊@机器人](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/send-receive/event.html#群聊-机器人) 触发场景	用户在群聊@机器人发送消息

GroupMessageCreate
: `love.forte.simbot.qguild.event.GroupMessageCreate`
:
:
:
: 事件类型名: `"GROUP_MESSAGE_CREATE"`
:
:
:
: > **Note:**
: > 自 `4.3.0` 开始支持。
:
:
:
: [群聊全量消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/message/send-receive/event.html#群聊全量消息) 触发场景	群主设定允许机器人接收群内全部消息后，群内成员发送消息

ChannelDispatch
: `love.forte.simbot.qguild.event.ChannelDispatch`
:
:
:
: channel相关的事件类型。 `data` 类型为 `EventChannel` 。

ChannelCreate
: `love.forte.simbot.qguild.event.ChannelCreate`
:
:
:
: 事件类型名: `"CHANNEL_CREATE"`
:
:
:
: 子频道事件 [CHANNEL_CREATE](https://bot.q.qq.com/wiki/develop/api/gateway/channel.html#channel-create)
:
:
:
: 发送时机
:
:
:
: * 子频道被创建

ChannelUpdate
: `love.forte.simbot.qguild.event.ChannelUpdate`
:
:
:
: 事件类型名: `"CHANNEL_UPDATE"`
:
:
:
: 子频道事件 [CHANNEL_UPDATE](https://bot.q.qq.com/wiki/develop/api/gateway/channel.html#channel-update)
:
:
:
: 发送时机
:
:
:
: * 子频道信息变更

ChannelDelete
: `love.forte.simbot.qguild.event.ChannelDelete`
:
:
:
: 事件类型名: `"CHANNEL_DELETE"`
:
:
:
: 子频道事件 [CHANNEL_DELETE](https://bot.q.qq.com/wiki/develop/api/gateway/channel.html#channel-delete)
:
:
:
: 发送时机
:
:
:
: * 子频道被删除

ForumDispatch
: `love.forte.simbot.qguild.event.ForumDispatch`
:
:
:
: [论坛事件(ForumEvent)](https://bot.q.qq.com/wiki/develop/api/gateway/forum.html#forum-event-intents-forum-event)
:
:
:
: 发送时机
:
:
:
: 用户在话题子频道内发帖、评论、回复评论时产生该事件
:
:
:
: 主题事件
:
:
:
: * FORUM_THREAD_CREATE
:
: * FORUM_THREAD_UPDATE
:
: * FORUM_THREAD_DELETE 事件内容为 `Thread` 对象
:
:
:
: 帖子事件
:
:
:
: * FORUM_POST_CREATE
:
: * FORUM_POST_DELETE 事件内容为 `Post` 对象
:
:
:
: 回复事件
:
:
:
: * FORUM_REPLY_CREATE
:
: * FORUM_REPLY_DELETE 事件内容为 `Reply` 对象
:
:
:
: 帖子审核事件
:
:
:
: * FORUM_PUBLISH_AUDIT_RESULT 事件内容为 `AuditResult` 对象

ForumThreadDispatch
: `love.forte.simbot.qguild.event.ForumThreadDispatch`
:
:
:
: 论坛事件：主题事件

ForumThreadCreate
: `love.forte.simbot.qguild.event.ForumThreadCreate`
:
:
:
: 事件类型名: `"FORUM_THREAD_CREATE"`
:
:
:
: 主题创建事件。

ForumThreadUpdate
: `love.forte.simbot.qguild.event.ForumThreadUpdate`
:
:
:
: 事件类型名: `"FORUM_THREAD_UPDATE"`
:
:
:
: 主题更新事件。

ForumThreadDelete
: `love.forte.simbot.qguild.event.ForumThreadDelete`
:
:
:
: 事件类型名: `"FORUM_THREAD_DELETE"`
:
:
:
: 主题删除事件。

ForumPostDispatch
: `love.forte.simbot.qguild.event.ForumPostDispatch`
:
:
:
: 论坛事件：帖子事件

ForumPostCreate
: `love.forte.simbot.qguild.event.ForumPostCreate`
:
:
:
: 事件类型名: `"FORUM_POST_CREATE"`
:
:
:
: 帖子创建事件

ForumPostDelete
: `love.forte.simbot.qguild.event.ForumPostDelete`
:
:
:
: 事件类型名: `"FORUM_POST_DELETE"`
:
:
:
: 帖子删除事件

ForumReplyDispatch
: `love.forte.simbot.qguild.event.ForumReplyDispatch`
:
:
:
: 论坛事件：回复事件

ForumReplyCreate
: `love.forte.simbot.qguild.event.ForumReplyCreate`
:
:
:
: 事件类型名: `"FORUM_REPLY_CREATE"`
:
:
:
: 回复创建事件

ForumReplyDelete
: `love.forte.simbot.qguild.event.ForumReplyDelete`
:
:
:
: 事件类型名: `"FORUM_REPLY_DELETE"`
:
:
:
: 回复删除事件

ForumPublishAuditResult
: `love.forte.simbot.qguild.event.ForumPublishAuditResult`
:
:
:
: 事件类型名: `"FORUM_PUBLISH_AUDIT_RESULT"`
:
:
:
: 帖子审核事件

GroupRobotManagementDispatch
: `love.forte.simbot.qguild.event.GroupRobotManagementDispatch`
:
:
:
: 群聊模块-群管理相关事件。 `data` 类型为 `GroupRobotManagementData`

GroupAddRobot
: `love.forte.simbot.qguild.event.GroupAddRobot`
:
:
:
: 事件类型名: `"GROUP_ADD_ROBOT"`
:
:
:
: [机器人加入群聊](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#机器人加入群聊) 触发场景	机器人被添加到群聊

GroupDelRobot
: `love.forte.simbot.qguild.event.GroupDelRobot`
:
:
:
: 事件类型名: `"GROUP_DEL_ROBOT"`
:
:
:
: [机器人退出群聊](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#机器人退出群聊) 触发场景	机器人被移出群聊

GroupMsgReject
: `love.forte.simbot.qguild.event.GroupMsgReject`
:
:
:
: 事件类型名: `"GROUP_MSG_REJECT"`
:
:
:
: [群聊拒绝机器人主动消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#群聊拒绝机器人主动消息) 触发场景	群管理员主动在机器人资料页操作关闭通知

GroupMsgReceive
: `love.forte.simbot.qguild.event.GroupMsgReceive`
:
:
:
: 事件类型名: `"GROUP_MSG_RECEIVE"`
:
:
:
: [群聊接受机器人主动消息](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#群聊接受机器人主动消息) 触发场景	群管理员主动在机器人资料页操作开启通知

GroupMemberManagementDispatch
: `love.forte.simbot.qguild.event.GroupMemberManagementDispatch`
:
:
:
: 群成员进退群聊事件。 `data` 类型为 `GroupMemberManagementData`。
:
:
:
: > **Note:**
: > 自 `4.4.0` 开始支持。

GroupMemberAdd
: `love.forte.simbot.qguild.event.GroupMemberAdd`
:
:
:
: 事件类型名: `"GROUP_MEMBER_ADD"`
:
:
:
: > **Note:**
: > 自 `4.4.0` 开始支持。需要订阅 `EventIntents.GroupMembers (1<<24)`。
:
:
:
: [群成员加入群聊](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#群成员加入-退出群聊) 触发场景	成员加入群聊

GroupMemberRemove
: `love.forte.simbot.qguild.event.GroupMemberRemove`
:
:
:
: 事件类型名: `"GROUP_MEMBER_REMOVE"`
:
:
:
: > **Note:**
: > 自 `4.4.0` 开始支持。需要订阅 `EventIntents.GroupMembers (1<<24)`。
:
:
:
: [群成员退出群聊](https://bot.q.qq.com/wiki/develop/api-v2/server-inter/group/manage/event.html#群成员加入-退出群聊) 触发场景	成员退出群聊

InteractionCreate
: `love.forte.simbot.qguild.event.InteractionCreate`
:
:
:
: 事件类型名: `"INTERACTION_CREATE"`
:
:
:
: > **Note:**
: > 自 `4.4.0` 开始支持。需要订阅 `EventIntents.Interaction`。
:
:
:
: 互动事件创建时。消息按钮点击回调的 `type` 为 `11`，自定义菜单操作的 `type` 为 `12`。
:
:
:
: 消息按钮的解析数据在 `data.resolved.buttonData` 与 `data.resolved.buttonId` 中。
:
:
:
: 自定义菜单项的标识在 `data.resolved.featureId` 中。

EventGuildDispatch
: `love.forte.simbot.qguild.event.EventGuildDispatch`
:
:
:
: Guild相关事件类型。 `data` 类型为 `EventGuild` 。

GuildCreate
: `love.forte.simbot.qguild.event.GuildCreate`
:
:
:
: 事件类型名: `"GUILD_CREATE"`
:
:
:
: [GUILD_CREATE](https://bot.q.qq.com/wiki/develop/api/gateway/guild.html#guild-create)
:
:
:
: 发送时机
:
:
:
: * 机器人被加入到某个频道的时候

GuildUpdate
: `love.forte.simbot.qguild.event.GuildUpdate`
:
:
:
: 事件类型名: `"GUILD_UPDATE"`
:
:
:
: [GUILD_UPDATE](https://bot.q.qq.com/wiki/develop/api/gateway/guild.html#guild-update)
:
:
:
: 发送时机
:
:
:
: * 频道信息变更
:
: * 事件内容为变更后的数据

GuildDelete
: `love.forte.simbot.qguild.event.GuildDelete`
:
:
:
: 事件类型名: `"GUILD_DELETE"`
:
:
:
: [GUILD_DELETE](https://bot.q.qq.com/wiki/develop/api/gateway/guild.html#guild-delete)
:
:
:
: 发送时机
:
:
:
: * 频道被解散
:
: * 机器人被移除
:
: * 事件内容为变更前的数据

GuildMemberAdd
: `love.forte.simbot.qguild.event.GuildMemberAdd`
:
:
:
: 事件类型名: `"GUILD_MEMBER_ADD"`
:
:
:
: [GUILD_MEMBER_ADD](https://bot.q.qq.com/wiki/develop/api/gateway/guild_member.html#guild-member-add)
:
:
:
: 发送时机
:
:
:
: * 新用户加入频道

GuildMemberUpdate
: `love.forte.simbot.qguild.event.GuildMemberUpdate`
:
:
:
: 事件类型名: `"GUILD_MEMBER_UPDATE"`
:
:
:
: [GUILD_MEMBER_UPDATE](https://bot.q.qq.com/wiki/develop/api/gateway/guild_member.html#guild-member-update)
:
:
:
: 发送时机
:
:
:
: * 用户的频道属性发生变化，如频道昵称，或者身份组

GuildMemberRemove
: `love.forte.simbot.qguild.event.GuildMemberRemove`
:
:
:
: 事件类型名: `"GUILD_MEMBER_REMOVE"`
:
:
:
: [GUILD_MEMBER_REMOVE](https://bot.q.qq.com/wiki/develop/api/gateway/guild_member.html#guild-member-remove)
:
:
:
: 发送时机
:
:
:
: * 用户离开频道

MessageDispatch
: `love.forte.simbot.qguild.event.MessageDispatch`
:
:
:
: 与 `message` 相关的事件类型。 `data` 类型为 `Message`

AtMessageCreate
: `love.forte.simbot.qguild.event.AtMessageCreate`
:
:
:
: 事件类型名: `"AT_MESSAGE_CREATE"`
:
:
:
: 消息事件 [AT_MESSAGE_CREATE（intents PUBLIC_GUILD_MESSAGES）](https://bot.q.qq.com/wiki/develop/api/gateway/message.html#at-message-create-intents-public-guild-messages)
:
:
:
: 发送时机
:
:
:
: * 用户发送消息，@当前机器人或回复机器人消息时
:
: * 为保障消息投递的速度，消息顺序我们虽然会尽量有序，但是并不保证是严格有序的， 如开发者对消息顺序有严格有序的需求，可以自行缓冲消息事件之后，基于 `seq` 进行排序

PublicMessageDeleteCreate
: `love.forte.simbot.qguild.event.PublicMessageDeleteCreate`
:
:
:
: 事件类型名: `"PUBLIC_MESSAGE_DELETE"`
:
:
:
: 消息事件 `PUBLIC_MESSAGE_DELETE_TYPE`

DirectMessageCreate
: `love.forte.simbot.qguild.event.DirectMessageCreate`
:
:
:
: 事件类型名: `"DIRECT_MESSAGE_CREATE"`
:
:
:
: 私信消息事件 [DIRECT_MESSAGE_CREATE (intents DIRECT_MESSAGE)](https://bot.q.qq.com/wiki/develop/api/gateway/direct_message.html#direct-message-create-intents-direct-message)
:
:
:
: 发送时机
:
:
:
: * 用户通过私信发消息给机器人时

MessageAuditedDispatch
: `love.forte.simbot.qguild.event.MessageAuditedDispatch`
:
:
:
: 与 `MessageAudited` 相关的事件类型。 `data` 类型为 `MessageAudited` 。

MessageCreate
: `love.forte.simbot.qguild.event.MessageCreate`
:
:
:
: 事件类型名: `"MESSAGE_CREATE"`
:
:
:
: 发送消息事件，代表频道内的全部消息，而不只是 at 机器人的消息。内容与 AT_MESSAGE_CREATE 相同

MessageDelete
: `love.forte.simbot.qguild.event.MessageDelete`
:
:
:
: 事件类型名: `"MESSAGE_DELETE"`
:
:
:
: 删除（撤回）消息事件

MessageAuditPass
: `love.forte.simbot.qguild.event.MessageAuditPass`
:
:
:
: 事件类型名: `"MESSAGE_AUDIT_PASS"`
:
:
:
: 消息审核事件 [MESSAGE_AUDIT_PASS（intents MESSAGE_AUDIT）](https://bot.q.qq.com/wiki/develop/api/gateway/message.html#message-audit-pass-intents-message-audit)
:
:
:
: 发送时机
:
:
:
: * 消息审核通过

MessageAuditReject
: `love.forte.simbot.qguild.event.MessageAuditReject`
:
:
:
: 事件类型名: `"MESSAGE_AUDIT_REJECT"`
:
:
:
: 消息审核事件 [MESSAGE_AUDIT_REJECT（intents MESSAGE_AUDIT）](https://bot.q.qq.com/wiki/develop/api/gateway/message.html#message-audit-reject-intents-message-audit)
:
:
:
: 发送时机
:
:
:
: * 消息审核不通过

OpenForumDispatch
: `love.forte.simbot.qguild.event.OpenForumDispatch`
:
:
:
: [开放论坛事件(OpenForumEvent)](https://bot.q.qq.com/wiki/develop/api/gateway/open_forum.html) 相关的事件父类。
:
:
:
: 发送时机
:
:
:
: 用户在话题子频道内发帖、评论、回复评论时产生该事件
:
:
:
: 主题事件
:
:
:
: * OPEN_FORUM_THREAD_CREATE
:
: * OPEN_FORUM_THREAD_UPDATE
:
: * OPEN_FORUM_THREAD_DELETE 参考 `OpenForumThreadDispatch`
:
:
:
: 帖子（评论）事件
:
:
:
: * OPEN_FORUM_POST_CREATE
:
: * OPEN_FORUM_POST_DELETE 参考 `OpenForumPostDispatch`
:
:
:
: 回复事件
:
:
:
: * OPEN_FORUM_REPLY_CREATE
:
: * OPEN_FORUM_REPLY_DELETE 参考 `OpenForumReplyDispatch`

OpenForumThreadDispatch
: `love.forte.simbot.qguild.event.OpenForumThreadDispatch`
:
:
:
: 开放论坛事件的 主题事件。

OpenForumThreadCreate
: `love.forte.simbot.qguild.event.OpenForumThreadCreate`
:
:
:
: 事件类型名: `"OPEN_FORUM_THREAD_CREATE"`
:
:
:
: 主题事件：创建主题

OpenForumThreadUpdate
: `love.forte.simbot.qguild.event.OpenForumThreadUpdate`
:
:
:
: 事件类型名: `"OPEN_FORUM_THREAD_UPDATE"`
:
:
:
: 主题事件：更新主题

OpenForumThreadDelete
: `love.forte.simbot.qguild.event.OpenForumThreadDelete`
:
:
:
: 事件类型名: `"OPEN_FORUM_THREAD_DELETE"`
:
:
:
: 主题事件：删除主题

OpenForumPostDispatch
: `love.forte.simbot.qguild.event.OpenForumPostDispatch`
:
:
:
: 开放论坛事件的 帖子（评论）事件。

OpenForumPostCreate
: `love.forte.simbot.qguild.event.OpenForumPostCreate`
:
:
:
: 事件类型名: `"OPEN_FORUM_POST_CREATE"`
:
:
:
: 帖子事件：创建帖子（评论）

OpenForumPostDelete
: `love.forte.simbot.qguild.event.OpenForumPostDelete`
:
:
:
: 事件类型名: `"OPEN_FORUM_POST_DELETE"`
:
:
:
: 帖子事件：删除帖子（评论）

OpenForumReplyDispatch
: `love.forte.simbot.qguild.event.OpenForumReplyDispatch`
:
:
:
: 开放论坛事件的 回复事件。

OpenForumReplyCreate
: `love.forte.simbot.qguild.event.OpenForumReplyCreate`
:
:
:
: 事件类型名: `"OPEN_FORUM_REPLY_CREATE"`
:
:
:
: 回复事件：创建回复

OpenForumReplyDelete
: `love.forte.simbot.qguild.event.OpenForumReplyDelete`
:
:
:
: 事件类型名: `"OPEN_FORUM_REPLY_DELETE"`
:
:
:
: 回复事件：删除回复

API 模块事件封装可以使用在 标准库模块 (stdlib) 中，使用 `Bot` 类型对他们进行监听与处理。

## 组件模块的标准 Event 实现

使用核心库，可以在 simbot 的 `Application` 或 Spring Boot 中使用这些事件类型实现。

核心模块所有的 simbot Event 实现类型定义都在包 `love.forte.simbot.component.qguild.event` 中。

所有实现类型均继承 `love.forte.simbot.qguild.component.event.QGEvent`。

> **Tip:**
> QQ频道的 simbot 事件实现会根据含义，选择性的实现一些特定的类型。 举个例子，`QGAtMessageCreateEvent` 可以代表“子频道消息事件”， 因此它实现了 `ChatChannelMessageEvent`。

> **Tip:**
> 仔细观察可以发现，大部分 simbot Event 实现类型都可以与 API 模块的事件封装类型相对应。

QGChannelCreateEvent
: 子频道创建事件

QGChannelUpdateEvent
: 子频道修改事件

QGChannelDeleteEvent
: 子频道删除事件

QGForumThreadCreateEvent
: 主题创建事件

QGForumThreadUpdateEvent
: 主题更新事件

QGForumThreadDeleteEvent
: 主题删除事件

QGForumPostCreateEvent
: 帖子创建事件

QGForumPostDeleteEvent
: 帖子删除事件

QGForumReplyCreateEvent
: 回复创建事件

QGForumReplyDeleteEvent
: 回复删除事件

QGForumPublishAuditResultEvent
: 帖子审核事件

QGGuildCreateEvent
: 新用户加入频道事件

QGGuildUpdateEvent
: 用户的频道属性发生变化事件

QGGuildDeleteEvent
: 用户离开频道事件

QGMemberAddEvent
: 新用户加入频道事件

QGMemberUpdateEvent
: 用户的频道属性发生变化事件

QGMemberRemoveEvent
: 用户离开频道事件

QGAtMessageCreateEvent
: 收到公域at消息事件

QGOpenForumThreadCreateEvent
: "开放"创建主题事件

QGOpenForumThreadUpdateEvent
: "开放"更新主题事件

QGOpenForumThreadDeleteEvent
: "开放"删除主题事件

QGOpenForumPostCreateEvent
: "开放"帖子创建(评论)事件

QGOpenForumPostDeleteEvent
: "开放"帖子删除(评论)事件

QGOpenForumReplyCreateEvent
: "开放"回复创建事件

QGOpenForumReplyDeleteEvent
: "开放"回复删除事件

QGGroupAtMessageCreateEvent
: 群at消息事件

QGGroupMessageCreateEvent
: 群聊全量消息事件，自 `4.3.0` 开始支持

QGGroupAddRobotEvent
: 机器人加入群聊事件

QGGroupDelRobotEvent
: 机器人退出群聊事件

QGGroupMsgRejectEvent
: 群聊拒绝机器人主动消息事件

QGGroupMsgReceiveEvent
: 群聊接受机器人主动消息事件

QGGroupMemberAddEvent
: 群成员加入群聊事件，自 `4.4.0` 开始支持

QGGroupMemberRemoveEvent
: 群成员退出群聊事件，自 `4.4.0` 开始支持

QGInteractionCreateEvent
: 互动事件创建事件，自 `4.4.0` 开始支持，可用于处理消息按钮和自定义菜单操作回调

QGC2CMessageCreateEvent
: C2C单聊消息事件

QGFriendAddEvent
: 用户添加机器人事件

QGFriendDelEvent
: 用户删除机器人事件

QGC2CMsgRejectEvent
: 拒绝机器人主动消息事件

QGC2CMsgReceiveEvent
: 允许机器人主动消息事件

QGUnsupportedEvent
: 特殊的事件类型，用于包装兼容那些尚未被封装支持的 API 模块的事件封装类型。

### C2C 消息元数据

`QGC2CMessageCreateEvent` 暴露原始 C2C 消息中的 `messageType` 与 `messageScene`。 两个字段都可能为 `null`；`messageScene.source` 表示消息来源，`messageScene.ext` 为场景扩展信息列表， 其中每项使用 `key=value` 表示。自定义菜单开关操作的结果也会通过 `ext` 提供。

### 互动事件

`QGInteractionCreateEvent` 对应 API 模块事件 `InteractionCreate`。 收到消息按钮或自定义菜单操作回调后，需要回应互动事件，否则客户端会持续处于 loading 状态直到超时。

当 `event.type` 为 `11` 时，可通过 `event.resolved.buttonData` 和 `event.resolved.buttonId` 读取消息按钮数据； 当 `event.type` 为 `12` 时，表示 C2C 自定义菜单操作（`event.scene` 为 `c2c`）， 可通过 `event.resolved.featureId` 读取菜单项标识。

Kotlin:

```KOTLIN
listen<QGInteractionCreateEvent> { event ->
    val buttonData = event.resolved.buttonData
    val buttonId = event.resolved.buttonId

    if (buttonData == "confirm") {
        event.respond(InteractionResponseApi.CODE_SUCCESS)
    } else {
        event.respond(InteractionResponseApi.CODE_FAILED)
    }
}
```

Java:

```JAVA
application.getEventDispatcher().register(EventListeners.async(
        QGInteractionCreateEvent.class,
        (context, event) -> {
            var buttonData = event.getResolved().getButtonData();
            var buttonId = event.getResolved().getButtonId();

            if ("confirm".equals(buttonData)) {
                return event.respondAsync(InteractionResponseApi.CODE_SUCCESS)
                        .thenApply(result -> EventResult.empty());
            }

            return event.respondAsync(InteractionResponseApi.CODE_FAILED)
                    .thenApply(result -> EventResult.empty());
        }
));
```

```JAVA
application.getEventDispatcher().register(EventListeners.block(
        QGInteractionCreateEvent.class,
        (context, event) -> {
            var buttonData = event.getResolved().getButtonData();
            var buttonId = event.getResolved().getButtonId();

            if ("confirm".equals(buttonData)) {
                event.respondBlocking(InteractionResponseApi.CODE_SUCCESS);
            } else {
                event.respondBlocking(InteractionResponseApi.CODE_FAILED);
            }

            return EventResult.empty();
        }
));
```

```JAVA
application.getEventDispatcher().register(EventListeners.nonBlock(
        QGInteractionCreateEvent.class,
        (context, event) -> {
            var buttonData = event.getResolved().getButtonData();
            var buttonId = event.getResolved().getButtonId();

            var response = "confirm".equals(buttonData) ?
                    event.respondReserve(InteractionResponseApi.CODE_SUCCESS) :
                    event.respondReserve(InteractionResponseApi.CODE_FAILED);

            return EventResult.of(response.transform(SuspendReserves.mono()).then());
        }
));
```

`QGGroupMemberAddEvent` 与 `QGGroupMemberRemoveEvent` 对应 API 模块事件 `GroupMemberAdd` 与 `GroupMemberRemove`。 这两个事件的 `content()` 是发生变更的群，`member()` 是加入或退出的群成员。

Kotlin:

```KOTLIN
listen<QGGroupMemberAddEvent> { event ->
    val group = event.content()
    val member = event.member()
    println("${member.id} joined ${group.id}")
}
```

Java:

```JAVA
application.getEventDispatcher().register(EventListeners.async(
        QGGroupMemberAddEvent.class,
        (context, event) -> event.getMemberAsync()
                .thenApply(member -> {
                    System.out.println(member.getId());
                    return EventResult.empty();
                })
));
```

```JAVA
application.getEventDispatcher().register(EventListeners.block(
        QGGroupMemberAddEvent.class,
        (context, event) -> {
            var member = event.getMemberBlocking();
            System.out.println(member.getId());
            return EventResult.empty();
        }
));
```

```JAVA
application.getEventDispatcher().register(EventListeners.nonBlock(
        QGGroupMemberAddEvent.class,
        (context, event) -> {
            var member = event.getMemberReserve()
                    .transform(SuspendReserves.mono())
                    .doOnNext(value -> System.out.println(value.getId()))
                    .then();

            return EventResult.of(member);
        }
));
```

