Source

src/objects/Event.ts

  1. import { Group } from './Group';
  2. import { GroupPermission } from './GroupPermission';
  3. /**
  4. * 事件类型
  5. */
  6. export type EventType = BotEventType | MessageEventType | GroupPolicyEventType | GroupMemberEventType | RequestType;
  7. /**
  8. * 与机器人有关的事件
  9. */
  10. export enum BotEventType {
  11. BOT_ONLINE = 'BotOnlineEvent',
  12. BOT_OFFLINE = 'BotOfflineEventActive',
  13. BOT_OFFLINE_FORCED = 'BotOfflineEventForce',
  14. BOT_OFFLINE_DISCONNECTED = 'BotOfflineEventDropped',
  15. BOT_RELOGIN = 'BotReloginEvent',
  16. BOT_PERMISSION_CHANGED = 'BotGroupPermissionChangeEvent',
  17. BOT_MUTED = 'BotMuteEvent',
  18. BOT_UNMUTED = 'BotUnmuteEvent',
  19. BOT_GROUP_JOINED = 'BotJoinGroupEvent',
  20. BOT_GROUP_PARTED = 'BotLeaveEventActive',
  21. BOT_GROUP_KICKED = 'BotLeaveEventKick',
  22. BOT_CONNECTIVITY_CHANGED = 'BotConnectivityChangedEvent'
  23. }
  24. /**
  25. * 消息撤回事件
  26. */
  27. export enum MessageEventType {
  28. GROUP_MESSAGE_RECALL = 'GroupRecallEvent',
  29. GROUP_MESSAGE_REVOKE = 'GroupRecallEvent',
  30. FRIEND_MESSAGE_RECALL = 'FriendRecallEvent',
  31. FRIEND_MESSAGE_REVOKE = 'FriendRecallEvent',
  32. }
  33. /**
  34. * 群管理事件
  35. */
  36. export enum GroupPolicyEventType {
  37. GROUP_NAMED_CHANGED = 'GroupNameChangeEvent',
  38. GROUP_ANNOUNCEMENT_CHANGED = 'GroupEntranceAnnouncementChangeEvent',
  39. GROUP_MUTE_CHANGED = 'GroupMuteAllEvent',
  40. GROUP_ANONYMOUS_CHAT_POLICY_CHANGED = 'GroupAllowAnonymousChatEvent',
  41. GROUP_CONFESS_TALK_POLICY_CHANGED = 'GroupAllowConfessTalkEvent',
  42. GROUP_INVITE_POLICY_CHANGED = 'GroupAllowMemberInviteEvent',
  43. }
  44. /**
  45. * 群成员事件
  46. */
  47. export enum GroupMemberEventType {
  48. GROUP_MEMBER_JOINED = 'MemberJoinEvent',
  49. GROUP_MEMBER_KICKED = 'MemberLeaveEventKick',
  50. GROUP_MEMBER_PARTED = 'MemberLeaveEventQuit',
  51. GROUP_MEMBER_RENAMED = 'MemberCardChangeEvent',
  52. GROUP_MEMBER_TITLE_CHANGED = 'MemberSpecialTitleChangeEvent',
  53. GROUP_MEMBER_PERMISSION_CHANGED = 'MemberPermissionChangeEvent',
  54. GROUP_MEMBER_MUTED = 'MemberMuteEvent',
  55. GROUP_MEMBER_UNMUTED = 'MemberUnmuteEvent',
  56. }
  57. export type EventTypeLut = {
  58. [BotEventType.BOT_ONLINE]: BotOnlineEvent,
  59. [BotEventType.BOT_OFFLINE]: BotOfflineEvent,
  60. [BotEventType.BOT_OFFLINE_DISCONNECTED]: BotDisconnectedOfflineEvent,
  61. [BotEventType.BOT_OFFLINE_FORCED]: BotForcedOfflineEvent,
  62. [BotEventType.BOT_MUTED]: BotMutedEvent,
  63. [BotEventType.BOT_UNMUTED]: BotUnmutedEvent,
  64. [BotEventType.BOT_RELOGIN]: BotReloginEvent,
  65. [BotEventType.BOT_PERMISSION_CHANGED]: BotPermissionChangedEvent,
  66. [BotEventType.BOT_GROUP_JOINED]: BotJoinedGroupEvent,
  67. [BotEventType.BOT_GROUP_KICKED]: BotKickedFromGroupEvent,
  68. [BotEventType.BOT_GROUP_PARTED]: BotPartedGroupEvent,
  69. [MessageEventType.GROUP_MESSAGE_REVOKE]: GroupMessageRevokedEvent,
  70. [MessageEventType.FRIEND_MESSAGE_REVOKE]: FriendMessageRevokedEvent,
  71. [GroupPolicyEventType.GROUP_NAMED_CHANGED]: GroupNameChangedEvent,
  72. [GroupPolicyEventType.GROUP_ANNOUNCEMENT_CHANGED]: GroupAnnouncementChangedEvent,
  73. [GroupPolicyEventType.GROUP_MUTE_CHANGED]: GroupChatPolicyChangedEvent,
  74. [GroupPolicyEventType.GROUP_ANONYMOUS_CHAT_POLICY_CHANGED]: GroupAnonymousChatPolicyChangedEvent,
  75. [GroupPolicyEventType.GROUP_CONFESS_TALK_POLICY_CHANGED]: GroupConfessTalkPolicyChangedEvent,
  76. [GroupPolicyEventType.GROUP_INVITE_POLICY_CHANGED]: GroupInvitePolicyChangedEvent,
  77. [GroupMemberEventType.GROUP_MEMBER_JOINED]: GroupMemberJoinedEvent,
  78. [GroupMemberEventType.GROUP_MEMBER_KICKED]: GroupMemberKickedEvent,
  79. [GroupMemberEventType.GROUP_MEMBER_PARTED]: GroupMemberPartedEvent,
  80. [GroupMemberEventType.GROUP_MEMBER_RENAMED]: GroupMemberNameChangedEvent,
  81. [GroupMemberEventType.GROUP_MEMBER_TITLE_CHANGED]: GroupMemberTitleChangedEvent,
  82. [GroupMemberEventType.GROUP_MEMBER_PERMISSION_CHANGED]: GroupMemberPermissionChangedEvent,
  83. [GroupMemberEventType.GROUP_MEMBER_MUTED]: GroupMemberMutedEvent,
  84. [GroupMemberEventType.GROUP_MEMBER_UNMUTED]: GroupMemberUnmutedEvent,
  85. };
  86. /**
  87. * 请求事件类型
  88. *
  89. * @enum {string}
  90. */
  91. export enum RequestType {
  92. FRIEND_REQUEST = 'NewFriendRequestEvent',
  93. GROUP_JOIN_REQUEST = 'MemberJoinRequestEvent',
  94. GROUP_INVITE_REQUEST = 'BotInvitedJoinGroupRequestEvent'
  95. }
  96. /**
  97. * 机器人连接状态
  98. */
  99. export enum BotConnectivity {
  100. ONLINE = 'Online',
  101. OFFLINE = 'Offline',
  102. KICKED = 'Kicked',
  103. DISCONNECTED = 'Disconnected'
  104. }
  105. /**
  106. * 事件发起者
  107. */
  108. export interface Operator {
  109. /** QQ 号 */
  110. id: number;
  111. /** 成员名 */
  112. memberName: string;
  113. /** 成员权限 */
  114. permission: GroupPermission;
  115. /** 所属群 */
  116. group: Group;
  117. }
  118. /**
  119. * 事件基类
  120. */
  121. export interface Event {
  122. /** 事件类型 */
  123. type: EventType;
  124. }
  125. export interface BotConnectivityChangeEvent extends Event {
  126. type: BotEventType.BOT_CONNECTIVITY_CHANGED;
  127. qq: number;
  128. state: BotConnectivity;
  129. }
  130. /**
  131. * 机器人连通性事件基类
  132. */
  133. export interface BotConnectivityBaseEvent extends Event {
  134. /** 事件类型 */
  135. type: BotEventType;
  136. /** QQ 号 */
  137. qq: number;
  138. }
  139. /**
  140. * 机器人上线事件
  141. */
  142. export interface BotOnlineEvent extends BotConnectivityBaseEvent {
  143. type: BotEventType.BOT_ONLINE;
  144. }
  145. /**
  146. * 机器人主动下线事件
  147. */
  148. export interface BotOfflineEvent extends BotConnectivityBaseEvent {
  149. type: BotEventType.BOT_OFFLINE;
  150. }
  151. /**
  152. * 机器人被迫下线事件
  153. */
  154. export interface BotForcedOfflineEvent extends BotConnectivityBaseEvent {
  155. type: BotEventType.BOT_OFFLINE_FORCED;
  156. }
  157. /**
  158. * 机器人掉线事件
  159. */
  160. export interface BotDisconnectedOfflineEvent extends BotConnectivityBaseEvent {
  161. type: BotEventType.BOT_OFFLINE_DISCONNECTED;
  162. }
  163. /**
  164. * 机器人掉线重连事件
  165. */
  166. export interface BotReloginEvent extends BotConnectivityBaseEvent {
  167. type: BotEventType.BOT_RELOGIN;
  168. }
  169. /**
  170. * 机器人群权限更改事件
  171. */
  172. export interface BotPermissionChangedEvent extends Event {
  173. type: BotEventType.BOT_PERMISSION_CHANGED;
  174. origin: GroupPermission;
  175. current: GroupPermission;
  176. group: Group;
  177. }
  178. /**
  179. * 机器人被禁言事件
  180. */
  181. export interface BotMutedEvent extends Event {
  182. type: BotEventType.BOT_MUTED;
  183. durationSeconds: number;
  184. operator: Operator;
  185. }
  186. /**
  187. * 机器人禁言解除事件
  188. * <br>
  189. * 似乎仅在主动解除时触发?
  190. */
  191. export interface BotUnmutedEvent extends Event {
  192. type: BotEventType.BOT_UNMUTED;
  193. operator: Operator;
  194. }
  195. /**
  196. * 机器人群管理事件基类
  197. */
  198. export interface BotGroupBaseEvent extends Event {
  199. type: BotEventType;
  200. /** 所属群 */
  201. group: Group;
  202. }
  203. /**
  204. * 机器人加入群聊事件
  205. */
  206. export interface BotJoinedGroupEvent extends BotGroupBaseEvent {
  207. type: BotEventType.BOT_GROUP_JOINED;
  208. }
  209. /**
  210. * 机器人主动离开群聊事件
  211. */
  212. export interface BotPartedGroupEvent extends BotGroupBaseEvent {
  213. type: BotEventType.BOT_GROUP_PARTED;
  214. }
  215. /**
  216. * 机器人被踢出群聊事件
  217. */
  218. export interface BotKickedFromGroupEvent extends BotGroupBaseEvent {
  219. type: BotEventType.BOT_GROUP_KICKED;
  220. }
  221. /**
  222. * 群消息被撤回事件
  223. */
  224. export interface GroupMessageRevokedEvent extends Event {
  225. type: MessageEventType.GROUP_MESSAGE_REVOKE;
  226. /** 消息发送者 QQ */
  227. authorId: number;
  228. /** 消息 ID */
  229. messageId: number;
  230. /** 撤回时间(Unix 时间戳) */
  231. time: number;
  232. /** 所属群 */
  233. group: Group;
  234. /** 撤回消息者对象 */
  235. operator: Operator;
  236. }
  237. /**
  238. * 好友消息撤回事件
  239. */
  240. export interface FriendMessageRevokedEvent extends Event {
  241. type: MessageEventType.FRIEND_MESSAGE_REVOKE;
  242. /** 消息发送者 QQ */
  243. authorId: number;
  244. /** 消息 ID */
  245. messageId: number;
  246. /** 撤回时间 */
  247. time: number;
  248. /** 撤回消息者 QQ */
  249. operator: number; // WTF
  250. }
  251. /**
  252. * 群政策变更事件基类
  253. */
  254. export interface GroupPolicyChangedEvent extends Event {
  255. type: GroupPolicyEventType;
  256. /** 变更前值 */
  257. origin: unknown;
  258. /** 变更后值 */
  259. current: unknown;
  260. /** 所属群 */
  261. group: Group;
  262. /** 操作者对象 */
  263. operator: Operator;
  264. }
  265. export interface GroupStringPolicyChangedEvent extends GroupPolicyChangedEvent {
  266. origin: string;
  267. current: string;
  268. }
  269. export interface GroupBinaryPolicyChangedEvent extends GroupPolicyChangedEvent {
  270. origin: boolean;
  271. current: boolean;
  272. }
  273. /**
  274. * 群名更改事件
  275. */
  276. export interface GroupNameChangedEvent extends GroupStringPolicyChangedEvent {
  277. type: GroupPolicyEventType.GROUP_NAMED_CHANGED;
  278. }
  279. /**
  280. * 入群公告更改事件
  281. */
  282. export interface GroupAnnouncementChangedEvent extends GroupStringPolicyChangedEvent {
  283. type: GroupPolicyEventType.GROUP_ANNOUNCEMENT_CHANGED;
  284. }
  285. /**
  286. * 群全体禁言更改事件
  287. */
  288. export interface GroupChatPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
  289. type: GroupPolicyEventType.GROUP_MUTE_CHANGED;
  290. }
  291. /**
  292. * 群匿名聊天更改事件
  293. */
  294. export interface GroupAnonymousChatPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
  295. type: GroupPolicyEventType.GROUP_ANONYMOUS_CHAT_POLICY_CHANGED;
  296. }
  297. /**
  298. * 群坦白说更改事件
  299. */
  300. export interface GroupConfessTalkPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
  301. type: GroupPolicyEventType.GROUP_CONFESS_TALK_POLICY_CHANGED;
  302. }
  303. /**
  304. * 群邀请政策更改事件
  305. */
  306. export interface GroupInvitePolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
  307. type: GroupPolicyEventType.GROUP_INVITE_POLICY_CHANGED;
  308. }
  309. /**
  310. * 群成员相关事件基类
  311. */
  312. export interface GroupMemberBaseEvent extends Event {
  313. type: GroupMemberEventType;
  314. /** 受影响的成员 */
  315. member: {
  316. /** QQ 号 */
  317. id: number;
  318. /** 成员名 */
  319. memberName: string;
  320. /** 群权限 */
  321. permission: GroupPermission;
  322. /** 所属群 */
  323. group: Group;
  324. }
  325. }
  326. /**
  327. * 群成员加入事件
  328. */
  329. export interface GroupMemberJoinedEvent extends GroupMemberBaseEvent {
  330. type: GroupMemberEventType.GROUP_MEMBER_JOINED;
  331. }
  332. /**
  333. * 群成员踢出事件
  334. */
  335. export interface GroupMemberKickedEvent extends GroupMemberBaseEvent {
  336. type: GroupMemberEventType.GROUP_MEMBER_KICKED;
  337. operator: Operator;
  338. }
  339. /**
  340. * 群成员退出事件
  341. */
  342. export interface GroupMemberPartedEvent extends GroupMemberBaseEvent {
  343. type: GroupMemberEventType.GROUP_MEMBER_PARTED;
  344. }
  345. /**
  346. * 群成员更改群名片事件
  347. */
  348. export interface GroupMemberNameChangedEvent extends GroupMemberBaseEvent {
  349. type: GroupMemberEventType.GROUP_MEMBER_RENAMED;
  350. origin: string;
  351. current: string;
  352. operator: Operator;
  353. }
  354. /**
  355. * 群成员更改群头衔事件
  356. */
  357. export interface GroupMemberTitleChangedEvent extends GroupMemberBaseEvent {
  358. type: GroupMemberEventType.GROUP_MEMBER_TITLE_CHANGED;
  359. origin: string;
  360. current: string;
  361. }
  362. /**
  363. * 群成员权限更改事件
  364. */
  365. export interface GroupMemberPermissionChangedEvent extends GroupMemberBaseEvent {
  366. type: GroupMemberEventType.GROUP_MEMBER_PERMISSION_CHANGED;
  367. origin: GroupPermission;
  368. current: GroupPermission;
  369. }
  370. /**
  371. * 群成员被禁言事件
  372. */
  373. export interface GroupMemberMutedEvent extends GroupMemberBaseEvent {
  374. type: GroupMemberEventType.GROUP_MEMBER_MUTED;
  375. durationSeconds: number;
  376. operator: Operator;
  377. }
  378. /**
  379. * 群成员禁言解除事件
  380. */
  381. export interface GroupMemberUnmutedEvent extends GroupMemberBaseEvent {
  382. type: GroupMemberEventType.GROUP_MEMBER_UNMUTED;
  383. operator: Operator;
  384. }