Lib.utils.EventClassifier
事件分发器
1""" 2事件分发器 3""" 4 5from typing import TypedDict, NotRequired, Literal 6 7from ..core import EventManager, ListenerServer 8from . import QQRichText, QQDataCacher, Logger 9 10logger = Logger.get_logger() 11 12 13class Event(EventManager.Event): 14 """ 15 事件类 16 """ 17 18 def __init__(self, event_data): 19 self.event_data: dict = event_data 20 self.time: int = self["time"] 21 self.self_id: int = self["self_id"] 22 self.post_type: str = self["post_type"] 23 24 def __getitem__(self, item): 25 if item not in self.event_data: 26 raise KeyError(f"{item} not in {self.event_data}") 27 return self.event_data.get(item) 28 29 def get(self, key, default=None): 30 """ 31 获取事件数据 32 Args: 33 key: 键 34 default: 默认值 35 Returns: 36 None 37 """ 38 return self.event_data.get(key, default) 39 40 def __contains__(self, other): 41 return other in self.event_data 42 43 def __repr__(self): 44 return str(self.event_data) 45 46 def logger(self): 47 """ 48 发送事件日志 49 """ 50 return False 51 52 53class EventData(TypedDict): 54 """ 55 事件数据 56 """ 57 cls: Event 58 post_type: str 59 rules: dict 60 61 62events: list[EventData] = [] 63 64 65def register_event(post_type: str, **other_rules): 66 """ 67 注册事件 68 Args: 69 post_type: 事件类型 70 other_rules: 其他规则 71 Returns: 72 None 73 """ 74 75 def decorator(cls): 76 """ 77 Args: 78 @param cls: 79 Returns: 80 None 81 """ 82 data: EventData = { 83 "cls": cls, 84 "post_type": post_type, 85 "rules": other_rules 86 } 87 events.append(data) 88 return cls 89 90 return decorator 91 92 93class SenderDict(TypedDict, total=False): 94 """ 95 发送者数据 96 """ 97 user_id: NotRequired[int] 98 nickname: NotRequired[str] 99 sex: NotRequired[Literal["male", "female", "unknown"]] 100 age: NotRequired[int] 101 102 103class PrivateDict(TypedDict, total=False): 104 """ 105 私聊发送者数据 106 """ 107 user_id: NotRequired[int] 108 nickname: NotRequired[str] 109 sex: NotRequired[Literal["male", "female", "unknown"]] 110 age: NotRequired[int] 111 112 113class GroupSenderDict(TypedDict, total=False): 114 """ 115 群聊发送者数据 116 """ 117 user_id: NotRequired[int] 118 nickname: NotRequired[str] 119 card: NotRequired[str] 120 sex: NotRequired[Literal["male", "female", "unknown"]] 121 age: NotRequired[int] 122 level: NotRequired[int] 123 role: NotRequired[Literal["owner", "admin", "member"]] 124 title: NotRequired[str] 125 126 127# 注册事件类 128@register_event("message") 129class MessageEvent(Event): 130 """ 131 消息事件 132 """ 133 134 def __init__(self, event_data): 135 super().__init__(event_data) 136 self.message_type = self["message_type"] 137 self.user_id: int = int(self["user_id"]) 138 self.sub_type: str = self["sub_type"] 139 self.message: QQRichText.QQRichText = QQRichText.QQRichText(self["message"]) 140 self.raw_message: str = self["raw_message"] 141 self.message_id: int = int(self["message_id"]) 142 self.sender: SenderDict = self["sender"] 143 144 145@register_event("message", message_type="private") 146class PrivateMessageEvent(MessageEvent): 147 """ 148 私聊消息事件 149 """ 150 151 def __init__(self, event_data): 152 super().__init__(event_data) 153 self.sender: PrivateDict = self["sender"] 154 155 def logger(self): 156 if self.sub_type == "friend": 157 logger.info( 158 f"收到来自好友 " 159 f"{QQDataCacher.get_user_info( 160 self.user_id, 161 is_friend=True, 162 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 163 ).nickname}" 164 f"({self.user_id}) " 165 f"的消息: " 166 f"{self.message.render()}" 167 f"({self.message_id})" 168 ) 169 170 elif self.sub_type == "group": 171 logger.info( 172 f"收到来自群 " 173 f"{QQDataCacher.get_group_info(self.get('group_id')).group_name}" 174 f"({self.get('group_id')})" 175 f" 内成员 " 176 f"{QQDataCacher.get_group_member_info( 177 self.get('group_id'), self.user_id, 178 **{k: v for k, v in self.sender.items() if k not in ['group_id', 'user_id']} 179 ).get_nickname()}" 180 f"({self.user_id}) " 181 f"的群临时会话消息: " 182 f"{self.message.render()}" 183 f"({self.message_id})" 184 ) 185 186 elif self.sub_type == "other": 187 logger.info( 188 f"收到来自 " 189 f"{QQDataCacher.get_user_info( 190 self.user_id, 191 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 192 ).nickname}" 193 f"({self.user_id}) " 194 f"的消息: " 195 f"{self.message.render()}" 196 f"({self.message_id})" 197 ) 198 199 else: 200 return super().logger() 201 202 203@register_event("message", message_type="group") 204class GroupMessageEvent(MessageEvent): 205 """ 206 群聊消息事件 207 """ 208 209 def __init__(self, event_data): 210 super().__init__(event_data) 211 self.group_id: int = int(self["group_id"]) 212 self.sender: GroupSenderDict = self["sender"] 213 214 def logger(self): 215 if self.sub_type == "normal": 216 logger.info( 217 f"收到来自群 " 218 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 219 f"({self.group_id})" 220 f" 内成员 " 221 f"{QQDataCacher.get_group_member_info( 222 self.group_id, self.user_id, 223 **{k: v for k, v in self.sender.items() 224 if k not in ['group_id', 'user_id']}).get_nickname()}" 225 f"({self.user_id}) " 226 f"的消息: " 227 f"{self.message.render(group_id=self.group_id)}" 228 f"({self.message_id})" 229 ) 230 231 elif self.sub_type == "anonymous": 232 anonymous_data = self.get('anonymous', {}) 233 anonymous_str = f"{QQDataCacher.get_user_info(anonymous_data['id']).nickname}"\ 234 if anonymous_data else "匿名用户" 235 anonymous_detail = f"({anonymous_data['id']}; flag: {anonymous_data['flag']})" if anonymous_data else "" 236 logger.info( 237 f"收到来自群 " 238 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 239 f"({self.group_id})" 240 f" 内 {anonymous_str}{anonymous_detail} " 241 f"的匿名消息: " 242 f"{self.message.render(group_id=self.group_id)}" 243 f"({self.message_id})" 244 ) 245 246 elif self.sub_type == "notice": 247 logger.info( 248 f"收到来自群 " 249 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 250 f"({self.group_id}) " 251 f"内的系统消息: " 252 f"{self.message.render(group_id=self.group_id)}" 253 f"({self.message_id})" 254 ) 255 256 else: 257 return super().logger() 258 259 260@register_event("notice") 261class NoticeEvent(Event): 262 """ 263 通知事件 264 """ 265 266 def __init__(self, event_data): 267 super().__init__(event_data) 268 self.notice_type: str = self["notice_type"] 269 270 271class FileDict(TypedDict, total=False): 272 """ 273 文件数据 274 """ 275 id: str 276 name: str 277 size: int 278 busid: int 279 280 281@register_event("notice", notice_type="group_upload") 282class GroupUploadEvent(NoticeEvent): 283 """ 284 群文件上传事件 285 """ 286 287 def __init__(self, event_data): 288 super().__init__(event_data) 289 self.group_id: int = int(self["group_id"]) 290 self.user_id: int = int(self["user_id"]) 291 self.file: FileDict = self["file"] 292 293 def logger(self): 294 logger.info( 295 f"群 " 296 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 297 f"({self.group_id}) " 298 f"内成员 " 299 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()} " 300 f"({self.user_id}) " 301 f"上传了文件: " 302 f"{self.file['name']}" 303 f"({self.file['id']})" 304 ) 305 306 307@register_event("notice", notice_type="group_admin") 308class GroupAdminEvent(NoticeEvent): 309 """ 310 群管理员变动事件 311 """ 312 313 def __init__(self, event_data): 314 super().__init__(event_data) 315 self.group_id: int = int(self["group_id"]) 316 self.user_id: int = int(self["user_id"]) 317 self.sub_type: str = self["sub_type"] 318 319 320@register_event("notice", notice_type="group_admin", sub_type="set") 321class GroupSetAdminEvent(GroupAdminEvent): 322 """ 323 群管理员被设置事件 324 """ 325 326 def logger(self): 327 logger.info( 328 f"群 " 329 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 330 f"({self.group_id}) " 331 f"内 成员 " 332 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 333 f"({self.user_id}) " 334 f"被设置为管理员" 335 ) 336 337 338@register_event("notice", notice_type="group_admin", sub_type="unset") 339class GroupUnsetAdminEvent(GroupAdminEvent): 340 """ 341 群管理员被取消事件 342 """ 343 344 def logger(self): 345 logger.info( 346 f"群 " 347 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 348 f"({self.group_id}) " 349 f"内 成员 " 350 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 351 f"({self.user_id}) " 352 f"被取消管理员" 353 ) 354 355 356@register_event("notice", notice_type="group_decrease") 357class GroupDecreaseEvent(NoticeEvent): 358 """ 359 群成员减少事件 360 """ 361 362 def __init__(self, event_data): 363 super().__init__(event_data) 364 self.group_id: int = int(self["group_id"]) 365 self.user_id: int = int(self["user_id"]) 366 self.operator_id = int(self["operator_id"]) 367 self.sub_type: str = self["sub_type"] 368 369 370@register_event("notice", notice_type="group_decrease", sub_type="leave") 371class GroupDecreaseLeaveEvent(GroupDecreaseEvent): 372 """ 373 群成员离开事件 374 """ 375 376 def logger(self): 377 logger.info( 378 f"群 " 379 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 380 f"({self.group_id}) " 381 f"内成员 " 382 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 383 f"({self.user_id}) " 384 f"退出了群聊" 385 ) 386 387 388@register_event("notice", notice_type="group_decrease", sub_type="kick") 389class GroupDecreaseKickEvent(GroupDecreaseEvent): 390 """ 391 群成员被踢事件 392 """ 393 394 def logger(self): 395 logger.info( 396 f"群 " 397 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 398 f"({self.group_id}) " 399 f"内成员 " 400 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 401 f"({self.user_id}) " 402 f"被管理员 " 403 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 404 f"({self.operator_id}) " 405 f"踢出了群聊" 406 ) 407 408 409@register_event("notice", notice_type="group_decrease", sub_type="kick_me") 410class GroupDecreaseKickMeEvent(GroupDecreaseEvent): 411 """ 412 机器人自己被移出事件 413 """ 414 415 def logger(self): 416 logger.info( 417 f"群 " 418 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 419 f"({self.group_id}) " 420 f"内 " 421 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 422 f"({self.operator_id}) " 423 f"将机器人踢出了群聊" 424 ) 425 426 427@register_event("notice", notice_type="group_increase") 428class GroupIncreaseEvent(NoticeEvent): 429 """ 430 群成员增加事件 431 """ 432 433 def __init__(self, event_data): 434 super().__init__(event_data) 435 self.group_id: int = int(self["group_id"]) 436 self.user_id: int = int(self["user_id"]) 437 self.operator_id: int = int(self["operator_id"]) 438 self.sub_type: str = self["sub_type"] 439 440 441@register_event("notice", notice_type="group_increase", sub_type="approve") 442class GroupIncreaseApproveEvent(GroupIncreaseEvent): 443 """ 444 群成员同意入群事件 445 """ 446 447 def logger(self): 448 logger.info( 449 f"群 " 450 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 451 f"({self.group_id}) " 452 f"内管理员 " 453 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 454 f"({self.operator_id}) " 455 f"将 " 456 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 457 f"({self.user_id}) " 458 f"批准入群" 459 ) 460 461 462@register_event("notice", notice_type="group_increase", sub_type="invite") 463class GroupIncreaseInviteEvent(GroupIncreaseEvent): 464 """ 465 群成员被邀请入群事件 466 """ 467 468 def logger(self): 469 logger.info( 470 f"群 " 471 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 472 f"({self.group_id}) " 473 f"内成员 " 474 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 475 f"({self.user_id}) " 476 f"将 " 477 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 478 f"({self.operator_id}) " 479 f"邀请入群" 480 ) 481 482 483@register_event("notice", notice_type="group_ban") 484class GroupBanEvent(NoticeEvent): 485 """ 486 群禁言事件 487 """ 488 489 def __init__(self, event_data): 490 super().__init__(event_data) 491 self.group_id: int = int(self["group_id"]) 492 self.user_id: int = int(self["user_id"]) 493 self.operator_id: int = int(self["operator_id"]) 494 self.sub_type: str = self["sub_type"] 495 self.duration: int = int(self["duration"]) 496 497 498@register_event("notice", notice_type="group_ban", sub_type="ban") 499class GroupBanSetEvent(GroupBanEvent): 500 """ 501 群禁言被设置事件 502 """ 503 504 def logger(self): 505 logger.info( 506 f"群 " 507 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 508 f"({self.group_id}) " 509 f"内成员 " 510 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 511 f"({self.user_id}) " 512 f"被管理员 " 513 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 514 f"({self.operator_id}) " 515 f"禁言了: " 516 f"{self.duration}s" 517 ) 518 519 520@register_event("notice", notice_type="group_ban", sub_type="lift_ban") 521class GroupBanLiftEvent(GroupBanEvent): 522 """ 523 群禁言被解除事件 524 """ 525 526 def logger(self): 527 logger.info( 528 f"群 " 529 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 530 f"({self.group_id}) " 531 f"内成员 " 532 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 533 f"({self.user_id}) " 534 f"被管理员 " 535 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 536 f"({self.operator_id}) " 537 f"解除了禁言" 538 ) 539 540 541@register_event("notice", notice_type="friend_add") 542class FriendAddEvent(NoticeEvent): 543 """ 544 好友添加事件 545 """ 546 547 def __init__(self, event_data): 548 super().__init__(event_data) 549 self.user_id: int = int(self["user_id"]) 550 551 def logger(self): 552 logger.info( 553 f"好友 " 554 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 555 f"({self.user_id}) " 556 f"添加了机器人的好友" 557 ) 558 559 560@register_event("notice", notice_type="group_recall") 561class GroupRecallEvent(NoticeEvent): 562 """ 563 群消息撤回事件 564 """ 565 566 def __init__(self, event_data): 567 super().__init__(event_data) 568 self.group_id: int = int(self["group_id"]) 569 self.user_id: int = int(self["user_id"]) 570 self.operator_id: int = int(self["operator_id"]) 571 self.message_id: int = int(self["message_id"]) 572 573 def logger(self): 574 if self.user_id == self.operator_id: 575 logger.info( 576 f"群 " 577 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 578 f"({self.group_id}) " 579 f"内成员 " 580 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 581 f"({self.user_id}) " 582 f"撤回了消息: " 583 f"{self.message_id}" 584 ) 585 else: 586 logger.info( 587 f"群 " 588 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 589 f"({self.group_id}) " 590 f"内成员 " 591 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 592 f"({self.user_id}) " 593 f"被管理员 " 594 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 595 f"({self.operator_id}) " 596 f"撤回了消息: " 597 f"{self.message_id}" 598 ) 599 600 601@register_event("notice", notice_type="friend_recall") 602class FriendRecallEvent(NoticeEvent): 603 """ 604 好友消息撤回事件 605 """ 606 607 def __init__(self, event_data): 608 super().__init__(event_data) 609 self.user_id: int = int(self["user_id"]) 610 self.message_id: int = int(self["message_id"]) 611 612 def logger(self): 613 logger.info( 614 f"好友 " 615 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 616 f"({self.user_id}) " 617 f"撤回了消息: " 618 f"{self.message_id}" 619 ) 620 621 622@register_event("notice", notice_type="notify", sub_type="poke") 623class GroupPokeEvent(NoticeEvent): 624 """ 625 群戳一戳事件 626 """ 627 628 def __init__(self, event_data): 629 super().__init__(event_data) 630 self.group_id: int = int(self["group_id"]) 631 self.user_id: int = int(self["user_id"]) 632 self.target_id: int = int(self["target_id"]) 633 634 def logger(self): 635 logger.info( 636 f"群 " 637 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 638 f"({self.group_id}) " 639 f"内 " 640 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is the poker 641 f"({self.user_id}) " 642 f"戳了戳 " 643 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is pokered 644 f"({self.target_id})" 645 ) 646 647 648@register_event("notice", notice_type="notify", sub_type="lucky_king") 649class GroupLuckyKingEvent(NoticeEvent): 650 """ 651 群红包运气王事件 652 """ 653 654 def __init__(self, event_data): 655 super().__init__(event_data) 656 self.group_id: int = int(self["group_id"]) 657 self.user_id: int = int(self["user_id"]) 658 self.target_id: int = int(self["target_id"]) 659 660 def logger(self): 661 logger.info( 662 f"群 " 663 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 664 f"({self.group_id}) " 665 f"内 " 666 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is lucky king 667 f"({self.user_id}) " 668 f"成为了 " 669 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is sender 670 f"({self.target_id}) " 671 f"发送的红包的运气王" 672 ) 673 674 675@register_event("notice", notice_type="notify", sub_type="honor") 676class GroupHonorEvent(NoticeEvent): 677 """ 678 群荣誉变更事件 679 """ 680 681 def __init__(self, event_data): 682 super().__init__(event_data) 683 self.group_id: int = int(self["group_id"]) 684 self.user_id: int = int(self["user_id"]) 685 self.honor_type: str = self["honor_type"] 686 687 def logger(self): 688 if self.honor_type not in ["talkative", "performer", "emotion"]: 689 logger.info( 690 f"群 " 691 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 692 f"({self.group_id}) " 693 f"内 " 694 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 695 f"({self.user_id}) " 696 f"获得了未知荣誉: " 697 f"{self.honor_type}" 698 ) 699 else: 700 super().logger() 701 702 703@register_event("notice", notice_type="notify", sub_type="honor", honor_type="talkative") 704class GroupTalkativeHonorEvent(GroupHonorEvent): 705 """ 706 群龙王变更事件 707 """ 708 709 def logger(self): 710 logger.info( 711 f"群 " 712 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 713 f"({self.group_id}) " 714 f"内 " 715 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 716 f"({self.user_id}) " 717 f"获得了群龙王称号" 718 ) 719 720 721@register_event("notice", notice_type="notify", sub_type="honor", honor_type="performer") 722class GroupPerformerHonorEvent(GroupHonorEvent): 723 """ 724 群群聊之火变更事件 725 """ 726 727 def logger(self): 728 logger.info( 729 f"群 " 730 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 731 f"({self.group_id}) " 732 f"内 " 733 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 734 f"({self.user_id}) " 735 f"获得了群聊炽焰称号" 736 ) 737 738 739@register_event("notice", notice_type="notify", sub_type="honor", honor_type="emotion") 740class GroupEmotionHonorEvent(GroupHonorEvent): 741 """ 742 群表快乐源泉变更事件 743 """ 744 745 def logger(self): 746 logger.info( 747 f"群 " 748 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 749 f"({self.group_id}) " 750 f"内 " 751 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 752 f"({self.user_id}) " 753 f"获得了快乐源泉称号" 754 ) 755 756 757@register_event("request") 758class RequestEvent(Event): 759 """ 760 请求事件 761 """ 762 763 def __init__(self, event_data): 764 super().__init__(event_data) 765 self.request_type: str = self["request_type"] 766 self.comment: str = self["comment"] 767 self.flag: str = self["flag"] 768 769 770@register_event("request", request_type="friend") 771class FriendRequestEvent(RequestEvent): 772 """ 773 加好友请求事件 774 """ 775 776 def __init__(self, event_data): 777 super().__init__(event_data) 778 self.user_id: int = int(self["user_id"]) 779 780 def logger(self): 781 logger.info( 782 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 783 f"({self.user_id})" 784 f"请求添加机器人为好友\n" 785 f"验证信息: {self.comment}\n" 786 f"flag: {self.flag}" 787 ) 788 789 790@register_event("request", request_type="group") 791class GroupRequestEvent(RequestEvent): 792 """ 793 加群请求事件 794 """ 795 796 def __init__(self, event_data): 797 super().__init__(event_data) 798 self.sub_type: str = self["sub_type"] 799 self.group_id: int = int(self["group_id"]) 800 self.user_id: int = int(self["user_id"]) 801 802 803@register_event("request", request_type="group", sub_type="add") 804class GroupAddRequestEvent(GroupRequestEvent): 805 """ 806 加群请求事件 - 添加 807 """ 808 809 def logger(self): 810 logger.info( 811 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 812 f"({self.user_id})" 813 f"请求加入群 " 814 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 815 f"({self.group_id})\n" 816 f"验证信息: {self.comment}\n" 817 f"flag: {self.flag}" 818 ) 819 820 821@register_event("request", request_type="group", sub_type="invite") 822class GroupInviteRequestEvent(GroupRequestEvent): 823 """ 824 加群请求事件 - 邀请 825 """ 826 827 def logger(self): 828 logger.info( 829 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 830 f"({self.user_id})" 831 f"邀请机器人加入群 " 832 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 833 ) 834 835 836@register_event("meta_event") 837class MetaEvent(Event): 838 """ 839 元事件 840 """ 841 842 def __init__(self, event_data): 843 super().__init__(event_data) 844 self.meta_event_type: str = self["meta_event_type"] 845 846 847@register_event("meta_event", meta_event_type="lifecycle") 848class LifecycleMetaEvent(MetaEvent): 849 """ 850 元事件 - 生命周期 851 """ 852 853 def __init__(self, event_data): 854 super().__init__(event_data) 855 self.sub_type: str = self["sub_type"] 856 857 def logger(self): 858 logger.info( 859 f"收到元事件: " + { 860 "enable": "OneBot 启用", 861 "disable": "OneBot 禁用", 862 "connect": "OneBot 连接成功" 863 }[self.sub_type] 864 ) 865 866 867@register_event("meta_event", meta_event_type="lifecycle", sub_type="enable") 868class EnableMetaEvent(LifecycleMetaEvent): 869 """ 870 元事件 - 生命周期 - OneBot 启用 871 """ 872 873 def logger(self): 874 logger.info("收到元事件: OneBot 启用") 875 876 877@register_event("meta_event", meta_event_type="lifecycle", sub_type="disable") 878class DisableMetaEvent(LifecycleMetaEvent): 879 """ 880 元事件 - 生命周期 - OneBot 禁用 881 """ 882 883 def logger(self): 884 logger.info("收到元事件: OneBot 禁用") 885 886 887@register_event("meta_event", meta_event_type="lifecycle", sub_type="connect") 888class ConnectMetaEvent(LifecycleMetaEvent): 889 """ 890 元事件 - 生命周期 - OneBot 连接成功 891 """ 892 893 def logger(self): 894 logger.info("收到元事件: OneBot 连接成功") 895 896 897@register_event("meta_event", meta_event_type="heartbeat") 898class HeartbeatMetaEvent(MetaEvent): 899 """ 900 元事件 - 心跳 901 """ 902 903 def __init__(self, event_data): 904 super().__init__(event_data) 905 self.status: dict = self["status"] 906 self.interval: int = int(self["interval"]) 907 908 def logger(self): 909 logger.debug(f"收到心跳包") 910 911 912@EventManager.event_listener(ListenerServer.EscalationEvent) 913def on_escalation(event_data): 914 """ 915 事件分发器 916 Args: 917 event_data: 事件数据 918 Returns: 919 None 920 """ 921 event_data = event_data.event_data 922 event = Event(event_data) 923 event_call_list = [event] 924 matched_event = False 925 for event_cls_data in events: 926 if ( 927 event_data["post_type"] == event_cls_data['post_type'] and 928 all(k in event_data and event_data[k] == v for k, v in event_cls_data['rules'].items()) 929 ): 930 event = event_cls_data['cls'](event_data) 931 if not matched_event: 932 if event.logger() is not False: 933 matched_event = True 934 event_call_list.append(event) 935 936 if not matched_event: 937 logger.warning(f"未知的上报事件: {event_data}") 938 939 # 广播事件 940 for event in event_call_list: 941 event.call()
logger =
<RootLogger root (INFO)>
14class Event(EventManager.Event): 15 """ 16 事件类 17 """ 18 19 def __init__(self, event_data): 20 self.event_data: dict = event_data 21 self.time: int = self["time"] 22 self.self_id: int = self["self_id"] 23 self.post_type: str = self["post_type"] 24 25 def __getitem__(self, item): 26 if item not in self.event_data: 27 raise KeyError(f"{item} not in {self.event_data}") 28 return self.event_data.get(item) 29 30 def get(self, key, default=None): 31 """ 32 获取事件数据 33 Args: 34 key: 键 35 default: 默认值 36 Returns: 37 None 38 """ 39 return self.event_data.get(key, default) 40 41 def __contains__(self, other): 42 return other in self.event_data 43 44 def __repr__(self): 45 return str(self.event_data) 46 47 def logger(self): 48 """ 49 发送事件日志 50 """ 51 return False
事件类
def
get(self, key, default=None):
30 def get(self, key, default=None): 31 """ 32 获取事件数据 33 Args: 34 key: 键 35 default: 默认值 36 Returns: 37 None 38 """ 39 return self.event_data.get(key, default)
获取事件数据
Arguments:
- key: 键
- default: 默认值
Returns:
None
Inherited Members
class
EventData(typing.TypedDict):
事件数据
cls: Event
events: list[EventData] =
[{'cls': <class 'MessageEvent'>, 'post_type': 'message', 'rules': {}}, {'cls': <class 'PrivateMessageEvent'>, 'post_type': 'message', 'rules': {'message_type': 'private'}}, {'cls': <class 'GroupMessageEvent'>, 'post_type': 'message', 'rules': {'message_type': 'group'}}, {'cls': <class 'NoticeEvent'>, 'post_type': 'notice', 'rules': {}}, {'cls': <class 'GroupUploadEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_upload'}}, {'cls': <class 'GroupAdminEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_admin'}}, {'cls': <class 'GroupSetAdminEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_admin', 'sub_type': 'set'}}, {'cls': <class 'GroupUnsetAdminEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_admin', 'sub_type': 'unset'}}, {'cls': <class 'GroupDecreaseEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_decrease'}}, {'cls': <class 'GroupDecreaseLeaveEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_decrease', 'sub_type': 'leave'}}, {'cls': <class 'GroupDecreaseKickEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_decrease', 'sub_type': 'kick'}}, {'cls': <class 'GroupDecreaseKickMeEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_decrease', 'sub_type': 'kick_me'}}, {'cls': <class 'GroupIncreaseEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_increase'}}, {'cls': <class 'GroupIncreaseApproveEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_increase', 'sub_type': 'approve'}}, {'cls': <class 'GroupIncreaseInviteEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_increase', 'sub_type': 'invite'}}, {'cls': <class 'GroupBanEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_ban'}}, {'cls': <class 'GroupBanSetEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_ban', 'sub_type': 'ban'}}, {'cls': <class 'GroupBanLiftEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_ban', 'sub_type': 'lift_ban'}}, {'cls': <class 'FriendAddEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'friend_add'}}, {'cls': <class 'GroupRecallEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'group_recall'}}, {'cls': <class 'FriendRecallEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'friend_recall'}}, {'cls': <class 'GroupPokeEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'poke'}}, {'cls': <class 'GroupLuckyKingEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'lucky_king'}}, {'cls': <class 'GroupHonorEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'honor'}}, {'cls': <class 'GroupTalkativeHonorEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'honor', 'honor_type': 'talkative'}}, {'cls': <class 'GroupPerformerHonorEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'honor', 'honor_type': 'performer'}}, {'cls': <class 'GroupEmotionHonorEvent'>, 'post_type': 'notice', 'rules': {'notice_type': 'notify', 'sub_type': 'honor', 'honor_type': 'emotion'}}, {'cls': <class 'RequestEvent'>, 'post_type': 'request', 'rules': {}}, {'cls': <class 'FriendRequestEvent'>, 'post_type': 'request', 'rules': {'request_type': 'friend'}}, {'cls': <class 'GroupRequestEvent'>, 'post_type': 'request', 'rules': {'request_type': 'group'}}, {'cls': <class 'GroupAddRequestEvent'>, 'post_type': 'request', 'rules': {'request_type': 'group', 'sub_type': 'add'}}, {'cls': <class 'GroupInviteRequestEvent'>, 'post_type': 'request', 'rules': {'request_type': 'group', 'sub_type': 'invite'}}, {'cls': <class 'MetaEvent'>, 'post_type': 'meta_event', 'rules': {}}, {'cls': <class 'LifecycleMetaEvent'>, 'post_type': 'meta_event', 'rules': {'meta_event_type': 'lifecycle'}}, {'cls': <class 'EnableMetaEvent'>, 'post_type': 'meta_event', 'rules': {'meta_event_type': 'lifecycle', 'sub_type': 'enable'}}, {'cls': <class 'DisableMetaEvent'>, 'post_type': 'meta_event', 'rules': {'meta_event_type': 'lifecycle', 'sub_type': 'disable'}}, {'cls': <class 'ConnectMetaEvent'>, 'post_type': 'meta_event', 'rules': {'meta_event_type': 'lifecycle', 'sub_type': 'connect'}}, {'cls': <class 'HeartbeatMetaEvent'>, 'post_type': 'meta_event', 'rules': {'meta_event_type': 'heartbeat'}}]
def
register_event(post_type: str, **other_rules):
66def register_event(post_type: str, **other_rules): 67 """ 68 注册事件 69 Args: 70 post_type: 事件类型 71 other_rules: 其他规则 72 Returns: 73 None 74 """ 75 76 def decorator(cls): 77 """ 78 Args: 79 @param cls: 80 Returns: 81 None 82 """ 83 data: EventData = { 84 "cls": cls, 85 "post_type": post_type, 86 "rules": other_rules 87 } 88 events.append(data) 89 return cls 90 91 return decorator
注册事件
Arguments:
- post_type: 事件类型
- other_rules: 其他规则
Returns:
None
class
SenderDict(typing.TypedDict):
94class SenderDict(TypedDict, total=False): 95 """ 96 发送者数据 97 """ 98 user_id: NotRequired[int] 99 nickname: NotRequired[str] 100 sex: NotRequired[Literal["male", "female", "unknown"]] 101 age: NotRequired[int]
发送者数据
class
PrivateDict(typing.TypedDict):
104class PrivateDict(TypedDict, total=False): 105 """ 106 私聊发送者数据 107 """ 108 user_id: NotRequired[int] 109 nickname: NotRequired[str] 110 sex: NotRequired[Literal["male", "female", "unknown"]] 111 age: NotRequired[int]
私聊发送者数据
class
GroupSenderDict(typing.TypedDict):
114class GroupSenderDict(TypedDict, total=False): 115 """ 116 群聊发送者数据 117 """ 118 user_id: NotRequired[int] 119 nickname: NotRequired[str] 120 card: NotRequired[str] 121 sex: NotRequired[Literal["male", "female", "unknown"]] 122 age: NotRequired[int] 123 level: NotRequired[int] 124 role: NotRequired[Literal["owner", "admin", "member"]] 125 title: NotRequired[str]
群聊发送者数据
129@register_event("message") 130class MessageEvent(Event): 131 """ 132 消息事件 133 """ 134 135 def __init__(self, event_data): 136 super().__init__(event_data) 137 self.message_type = self["message_type"] 138 self.user_id: int = int(self["user_id"]) 139 self.sub_type: str = self["sub_type"] 140 self.message: QQRichText.QQRichText = QQRichText.QQRichText(self["message"]) 141 self.raw_message: str = self["raw_message"] 142 self.message_id: int = int(self["message_id"]) 143 self.sender: SenderDict = self["sender"]
消息事件
MessageEvent(event_data)
135 def __init__(self, event_data): 136 super().__init__(event_data) 137 self.message_type = self["message_type"] 138 self.user_id: int = int(self["user_id"]) 139 self.sub_type: str = self["sub_type"] 140 self.message: QQRichText.QQRichText = QQRichText.QQRichText(self["message"]) 141 self.raw_message: str = self["raw_message"] 142 self.message_id: int = int(self["message_id"]) 143 self.sender: SenderDict = self["sender"]
message: Lib.utils.QQRichText.QQRichText
sender: SenderDict
Inherited Members
146@register_event("message", message_type="private") 147class PrivateMessageEvent(MessageEvent): 148 """ 149 私聊消息事件 150 """ 151 152 def __init__(self, event_data): 153 super().__init__(event_data) 154 self.sender: PrivateDict = self["sender"] 155 156 def logger(self): 157 if self.sub_type == "friend": 158 logger.info( 159 f"收到来自好友 " 160 f"{QQDataCacher.get_user_info( 161 self.user_id, 162 is_friend=True, 163 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 164 ).nickname}" 165 f"({self.user_id}) " 166 f"的消息: " 167 f"{self.message.render()}" 168 f"({self.message_id})" 169 ) 170 171 elif self.sub_type == "group": 172 logger.info( 173 f"收到来自群 " 174 f"{QQDataCacher.get_group_info(self.get('group_id')).group_name}" 175 f"({self.get('group_id')})" 176 f" 内成员 " 177 f"{QQDataCacher.get_group_member_info( 178 self.get('group_id'), self.user_id, 179 **{k: v for k, v in self.sender.items() if k not in ['group_id', 'user_id']} 180 ).get_nickname()}" 181 f"({self.user_id}) " 182 f"的群临时会话消息: " 183 f"{self.message.render()}" 184 f"({self.message_id})" 185 ) 186 187 elif self.sub_type == "other": 188 logger.info( 189 f"收到来自 " 190 f"{QQDataCacher.get_user_info( 191 self.user_id, 192 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 193 ).nickname}" 194 f"({self.user_id}) " 195 f"的消息: " 196 f"{self.message.render()}" 197 f"({self.message_id})" 198 ) 199 200 else: 201 return super().logger()
私聊消息事件
sender: PrivateDict
def
logger(self):
156 def logger(self): 157 if self.sub_type == "friend": 158 logger.info( 159 f"收到来自好友 " 160 f"{QQDataCacher.get_user_info( 161 self.user_id, 162 is_friend=True, 163 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 164 ).nickname}" 165 f"({self.user_id}) " 166 f"的消息: " 167 f"{self.message.render()}" 168 f"({self.message_id})" 169 ) 170 171 elif self.sub_type == "group": 172 logger.info( 173 f"收到来自群 " 174 f"{QQDataCacher.get_group_info(self.get('group_id')).group_name}" 175 f"({self.get('group_id')})" 176 f" 内成员 " 177 f"{QQDataCacher.get_group_member_info( 178 self.get('group_id'), self.user_id, 179 **{k: v for k, v in self.sender.items() if k not in ['group_id', 'user_id']} 180 ).get_nickname()}" 181 f"({self.user_id}) " 182 f"的群临时会话消息: " 183 f"{self.message.render()}" 184 f"({self.message_id})" 185 ) 186 187 elif self.sub_type == "other": 188 logger.info( 189 f"收到来自 " 190 f"{QQDataCacher.get_user_info( 191 self.user_id, 192 **{k: v for k, v in self.sender.items() if k not in ['user_id']} 193 ).nickname}" 194 f"({self.user_id}) " 195 f"的消息: " 196 f"{self.message.render()}" 197 f"({self.message_id})" 198 ) 199 200 else: 201 return super().logger()
发送事件日志
204@register_event("message", message_type="group") 205class GroupMessageEvent(MessageEvent): 206 """ 207 群聊消息事件 208 """ 209 210 def __init__(self, event_data): 211 super().__init__(event_data) 212 self.group_id: int = int(self["group_id"]) 213 self.sender: GroupSenderDict = self["sender"] 214 215 def logger(self): 216 if self.sub_type == "normal": 217 logger.info( 218 f"收到来自群 " 219 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 220 f"({self.group_id})" 221 f" 内成员 " 222 f"{QQDataCacher.get_group_member_info( 223 self.group_id, self.user_id, 224 **{k: v for k, v in self.sender.items() 225 if k not in ['group_id', 'user_id']}).get_nickname()}" 226 f"({self.user_id}) " 227 f"的消息: " 228 f"{self.message.render(group_id=self.group_id)}" 229 f"({self.message_id})" 230 ) 231 232 elif self.sub_type == "anonymous": 233 anonymous_data = self.get('anonymous', {}) 234 anonymous_str = f"{QQDataCacher.get_user_info(anonymous_data['id']).nickname}"\ 235 if anonymous_data else "匿名用户" 236 anonymous_detail = f"({anonymous_data['id']}; flag: {anonymous_data['flag']})" if anonymous_data else "" 237 logger.info( 238 f"收到来自群 " 239 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 240 f"({self.group_id})" 241 f" 内 {anonymous_str}{anonymous_detail} " 242 f"的匿名消息: " 243 f"{self.message.render(group_id=self.group_id)}" 244 f"({self.message_id})" 245 ) 246 247 elif self.sub_type == "notice": 248 logger.info( 249 f"收到来自群 " 250 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 251 f"({self.group_id}) " 252 f"内的系统消息: " 253 f"{self.message.render(group_id=self.group_id)}" 254 f"({self.message_id})" 255 ) 256 257 else: 258 return super().logger()
群聊消息事件
sender: GroupSenderDict
def
logger(self):
215 def logger(self): 216 if self.sub_type == "normal": 217 logger.info( 218 f"收到来自群 " 219 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 220 f"({self.group_id})" 221 f" 内成员 " 222 f"{QQDataCacher.get_group_member_info( 223 self.group_id, self.user_id, 224 **{k: v for k, v in self.sender.items() 225 if k not in ['group_id', 'user_id']}).get_nickname()}" 226 f"({self.user_id}) " 227 f"的消息: " 228 f"{self.message.render(group_id=self.group_id)}" 229 f"({self.message_id})" 230 ) 231 232 elif self.sub_type == "anonymous": 233 anonymous_data = self.get('anonymous', {}) 234 anonymous_str = f"{QQDataCacher.get_user_info(anonymous_data['id']).nickname}"\ 235 if anonymous_data else "匿名用户" 236 anonymous_detail = f"({anonymous_data['id']}; flag: {anonymous_data['flag']})" if anonymous_data else "" 237 logger.info( 238 f"收到来自群 " 239 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 240 f"({self.group_id})" 241 f" 内 {anonymous_str}{anonymous_detail} " 242 f"的匿名消息: " 243 f"{self.message.render(group_id=self.group_id)}" 244 f"({self.message_id})" 245 ) 246 247 elif self.sub_type == "notice": 248 logger.info( 249 f"收到来自群 " 250 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 251 f"({self.group_id}) " 252 f"内的系统消息: " 253 f"{self.message.render(group_id=self.group_id)}" 254 f"({self.message_id})" 255 ) 256 257 else: 258 return super().logger()
发送事件日志
261@register_event("notice") 262class NoticeEvent(Event): 263 """ 264 通知事件 265 """ 266 267 def __init__(self, event_data): 268 super().__init__(event_data) 269 self.notice_type: str = self["notice_type"]
通知事件
Inherited Members
class
FileDict(typing.TypedDict):
272class FileDict(TypedDict, total=False): 273 """ 274 文件数据 275 """ 276 id: str 277 name: str 278 size: int 279 busid: int
文件数据
282@register_event("notice", notice_type="group_upload") 283class GroupUploadEvent(NoticeEvent): 284 """ 285 群文件上传事件 286 """ 287 288 def __init__(self, event_data): 289 super().__init__(event_data) 290 self.group_id: int = int(self["group_id"]) 291 self.user_id: int = int(self["user_id"]) 292 self.file: FileDict = self["file"] 293 294 def logger(self): 295 logger.info( 296 f"群 " 297 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 298 f"({self.group_id}) " 299 f"内成员 " 300 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()} " 301 f"({self.user_id}) " 302 f"上传了文件: " 303 f"{self.file['name']}" 304 f"({self.file['id']})" 305 )
群文件上传事件
file: FileDict
def
logger(self):
294 def logger(self): 295 logger.info( 296 f"群 " 297 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 298 f"({self.group_id}) " 299 f"内成员 " 300 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()} " 301 f"({self.user_id}) " 302 f"上传了文件: " 303 f"{self.file['name']}" 304 f"({self.file['id']})" 305 )
发送事件日志
Inherited Members
308@register_event("notice", notice_type="group_admin") 309class GroupAdminEvent(NoticeEvent): 310 """ 311 群管理员变动事件 312 """ 313 314 def __init__(self, event_data): 315 super().__init__(event_data) 316 self.group_id: int = int(self["group_id"]) 317 self.user_id: int = int(self["user_id"]) 318 self.sub_type: str = self["sub_type"]
群管理员变动事件
Inherited Members
@register_event('notice', notice_type='group_admin', sub_type='set')
class
GroupSetAdminEvent321@register_event("notice", notice_type="group_admin", sub_type="set") 322class GroupSetAdminEvent(GroupAdminEvent): 323 """ 324 群管理员被设置事件 325 """ 326 327 def logger(self): 328 logger.info( 329 f"群 " 330 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 331 f"({self.group_id}) " 332 f"内 成员 " 333 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 334 f"({self.user_id}) " 335 f"被设置为管理员" 336 )
群管理员被设置事件
def
logger(self):
327 def logger(self): 328 logger.info( 329 f"群 " 330 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 331 f"({self.group_id}) " 332 f"内 成员 " 333 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 334 f"({self.user_id}) " 335 f"被设置为管理员" 336 )
发送事件日志
@register_event('notice', notice_type='group_admin', sub_type='unset')
class
GroupUnsetAdminEvent339@register_event("notice", notice_type="group_admin", sub_type="unset") 340class GroupUnsetAdminEvent(GroupAdminEvent): 341 """ 342 群管理员被取消事件 343 """ 344 345 def logger(self): 346 logger.info( 347 f"群 " 348 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 349 f"({self.group_id}) " 350 f"内 成员 " 351 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 352 f"({self.user_id}) " 353 f"被取消管理员" 354 )
群管理员被取消事件
def
logger(self):
345 def logger(self): 346 logger.info( 347 f"群 " 348 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 349 f"({self.group_id}) " 350 f"内 成员 " 351 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 352 f"({self.user_id}) " 353 f"被取消管理员" 354 )
发送事件日志
357@register_event("notice", notice_type="group_decrease") 358class GroupDecreaseEvent(NoticeEvent): 359 """ 360 群成员减少事件 361 """ 362 363 def __init__(self, event_data): 364 super().__init__(event_data) 365 self.group_id: int = int(self["group_id"]) 366 self.user_id: int = int(self["user_id"]) 367 self.operator_id = int(self["operator_id"]) 368 self.sub_type: str = self["sub_type"]
群成员减少事件
Inherited Members
@register_event('notice', notice_type='group_decrease', sub_type='leave')
class
GroupDecreaseLeaveEvent371@register_event("notice", notice_type="group_decrease", sub_type="leave") 372class GroupDecreaseLeaveEvent(GroupDecreaseEvent): 373 """ 374 群成员离开事件 375 """ 376 377 def logger(self): 378 logger.info( 379 f"群 " 380 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 381 f"({self.group_id}) " 382 f"内成员 " 383 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 384 f"({self.user_id}) " 385 f"退出了群聊" 386 )
群成员离开事件
@register_event('notice', notice_type='group_decrease', sub_type='kick')
class
GroupDecreaseKickEvent389@register_event("notice", notice_type="group_decrease", sub_type="kick") 390class GroupDecreaseKickEvent(GroupDecreaseEvent): 391 """ 392 群成员被踢事件 393 """ 394 395 def logger(self): 396 logger.info( 397 f"群 " 398 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 399 f"({self.group_id}) " 400 f"内成员 " 401 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 402 f"({self.user_id}) " 403 f"被管理员 " 404 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 405 f"({self.operator_id}) " 406 f"踢出了群聊" 407 )
群成员被踢事件
def
logger(self):
395 def logger(self): 396 logger.info( 397 f"群 " 398 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 399 f"({self.group_id}) " 400 f"内成员 " 401 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 402 f"({self.user_id}) " 403 f"被管理员 " 404 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 405 f"({self.operator_id}) " 406 f"踢出了群聊" 407 )
发送事件日志
@register_event('notice', notice_type='group_decrease', sub_type='kick_me')
class
GroupDecreaseKickMeEvent410@register_event("notice", notice_type="group_decrease", sub_type="kick_me") 411class GroupDecreaseKickMeEvent(GroupDecreaseEvent): 412 """ 413 机器人自己被移出事件 414 """ 415 416 def logger(self): 417 logger.info( 418 f"群 " 419 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 420 f"({self.group_id}) " 421 f"内 " 422 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 423 f"({self.operator_id}) " 424 f"将机器人踢出了群聊" 425 )
机器人自己被移出事件
def
logger(self):
416 def logger(self): 417 logger.info( 418 f"群 " 419 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 420 f"({self.group_id}) " 421 f"内 " 422 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 423 f"({self.operator_id}) " 424 f"将机器人踢出了群聊" 425 )
发送事件日志
428@register_event("notice", notice_type="group_increase") 429class GroupIncreaseEvent(NoticeEvent): 430 """ 431 群成员增加事件 432 """ 433 434 def __init__(self, event_data): 435 super().__init__(event_data) 436 self.group_id: int = int(self["group_id"]) 437 self.user_id: int = int(self["user_id"]) 438 self.operator_id: int = int(self["operator_id"]) 439 self.sub_type: str = self["sub_type"]
群成员增加事件
Inherited Members
@register_event('notice', notice_type='group_increase', sub_type='approve')
class
GroupIncreaseApproveEvent442@register_event("notice", notice_type="group_increase", sub_type="approve") 443class GroupIncreaseApproveEvent(GroupIncreaseEvent): 444 """ 445 群成员同意入群事件 446 """ 447 448 def logger(self): 449 logger.info( 450 f"群 " 451 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 452 f"({self.group_id}) " 453 f"内管理员 " 454 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 455 f"({self.operator_id}) " 456 f"将 " 457 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 458 f"({self.user_id}) " 459 f"批准入群" 460 )
群成员同意入群事件
def
logger(self):
448 def logger(self): 449 logger.info( 450 f"群 " 451 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 452 f"({self.group_id}) " 453 f"内管理员 " 454 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 455 f"({self.operator_id}) " 456 f"将 " 457 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 458 f"({self.user_id}) " 459 f"批准入群" 460 )
发送事件日志
@register_event('notice', notice_type='group_increase', sub_type='invite')
class
GroupIncreaseInviteEvent463@register_event("notice", notice_type="group_increase", sub_type="invite") 464class GroupIncreaseInviteEvent(GroupIncreaseEvent): 465 """ 466 群成员被邀请入群事件 467 """ 468 469 def logger(self): 470 logger.info( 471 f"群 " 472 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 473 f"({self.group_id}) " 474 f"内成员 " 475 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 476 f"({self.user_id}) " 477 f"将 " 478 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 479 f"({self.operator_id}) " 480 f"邀请入群" 481 )
群成员被邀请入群事件
def
logger(self):
469 def logger(self): 470 logger.info( 471 f"群 " 472 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 473 f"({self.group_id}) " 474 f"内成员 " 475 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 476 f"({self.user_id}) " 477 f"将 " 478 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 479 f"({self.operator_id}) " 480 f"邀请入群" 481 )
发送事件日志
484@register_event("notice", notice_type="group_ban") 485class GroupBanEvent(NoticeEvent): 486 """ 487 群禁言事件 488 """ 489 490 def __init__(self, event_data): 491 super().__init__(event_data) 492 self.group_id: int = int(self["group_id"]) 493 self.user_id: int = int(self["user_id"]) 494 self.operator_id: int = int(self["operator_id"]) 495 self.sub_type: str = self["sub_type"] 496 self.duration: int = int(self["duration"])
群禁言事件
GroupBanEvent(event_data)
490 def __init__(self, event_data): 491 super().__init__(event_data) 492 self.group_id: int = int(self["group_id"]) 493 self.user_id: int = int(self["user_id"]) 494 self.operator_id: int = int(self["operator_id"]) 495 self.sub_type: str = self["sub_type"] 496 self.duration: int = int(self["duration"])
Inherited Members
@register_event('notice', notice_type='group_ban', sub_type='ban')
class
GroupBanSetEvent499@register_event("notice", notice_type="group_ban", sub_type="ban") 500class GroupBanSetEvent(GroupBanEvent): 501 """ 502 群禁言被设置事件 503 """ 504 505 def logger(self): 506 logger.info( 507 f"群 " 508 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 509 f"({self.group_id}) " 510 f"内成员 " 511 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 512 f"({self.user_id}) " 513 f"被管理员 " 514 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 515 f"({self.operator_id}) " 516 f"禁言了: " 517 f"{self.duration}s" 518 )
群禁言被设置事件
def
logger(self):
505 def logger(self): 506 logger.info( 507 f"群 " 508 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 509 f"({self.group_id}) " 510 f"内成员 " 511 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 512 f"({self.user_id}) " 513 f"被管理员 " 514 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 515 f"({self.operator_id}) " 516 f"禁言了: " 517 f"{self.duration}s" 518 )
发送事件日志
@register_event('notice', notice_type='group_ban', sub_type='lift_ban')
class
GroupBanLiftEvent521@register_event("notice", notice_type="group_ban", sub_type="lift_ban") 522class GroupBanLiftEvent(GroupBanEvent): 523 """ 524 群禁言被解除事件 525 """ 526 527 def logger(self): 528 logger.info( 529 f"群 " 530 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 531 f"({self.group_id}) " 532 f"内成员 " 533 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 534 f"({self.user_id}) " 535 f"被管理员 " 536 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 537 f"({self.operator_id}) " 538 f"解除了禁言" 539 )
群禁言被解除事件
def
logger(self):
527 def logger(self): 528 logger.info( 529 f"群 " 530 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 531 f"({self.group_id}) " 532 f"内成员 " 533 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 534 f"({self.user_id}) " 535 f"被管理员 " 536 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 537 f"({self.operator_id}) " 538 f"解除了禁言" 539 )
发送事件日志
542@register_event("notice", notice_type="friend_add") 543class FriendAddEvent(NoticeEvent): 544 """ 545 好友添加事件 546 """ 547 548 def __init__(self, event_data): 549 super().__init__(event_data) 550 self.user_id: int = int(self["user_id"]) 551 552 def logger(self): 553 logger.info( 554 f"好友 " 555 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 556 f"({self.user_id}) " 557 f"添加了机器人的好友" 558 )
好友添加事件
def
logger(self):
552 def logger(self): 553 logger.info( 554 f"好友 " 555 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 556 f"({self.user_id}) " 557 f"添加了机器人的好友" 558 )
发送事件日志
Inherited Members
561@register_event("notice", notice_type="group_recall") 562class GroupRecallEvent(NoticeEvent): 563 """ 564 群消息撤回事件 565 """ 566 567 def __init__(self, event_data): 568 super().__init__(event_data) 569 self.group_id: int = int(self["group_id"]) 570 self.user_id: int = int(self["user_id"]) 571 self.operator_id: int = int(self["operator_id"]) 572 self.message_id: int = int(self["message_id"]) 573 574 def logger(self): 575 if self.user_id == self.operator_id: 576 logger.info( 577 f"群 " 578 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 579 f"({self.group_id}) " 580 f"内成员 " 581 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 582 f"({self.user_id}) " 583 f"撤回了消息: " 584 f"{self.message_id}" 585 ) 586 else: 587 logger.info( 588 f"群 " 589 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 590 f"({self.group_id}) " 591 f"内成员 " 592 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 593 f"({self.user_id}) " 594 f"被管理员 " 595 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 596 f"({self.operator_id}) " 597 f"撤回了消息: " 598 f"{self.message_id}" 599 )
群消息撤回事件
def
logger(self):
574 def logger(self): 575 if self.user_id == self.operator_id: 576 logger.info( 577 f"群 " 578 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 579 f"({self.group_id}) " 580 f"内成员 " 581 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 582 f"({self.user_id}) " 583 f"撤回了消息: " 584 f"{self.message_id}" 585 ) 586 else: 587 logger.info( 588 f"群 " 589 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 590 f"({self.group_id}) " 591 f"内成员 " 592 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 593 f"({self.user_id}) " 594 f"被管理员 " 595 f"{QQDataCacher.get_group_member_info(self.group_id, self.operator_id).get_nickname()}" 596 f"({self.operator_id}) " 597 f"撤回了消息: " 598 f"{self.message_id}" 599 )
发送事件日志
Inherited Members
602@register_event("notice", notice_type="friend_recall") 603class FriendRecallEvent(NoticeEvent): 604 """ 605 好友消息撤回事件 606 """ 607 608 def __init__(self, event_data): 609 super().__init__(event_data) 610 self.user_id: int = int(self["user_id"]) 611 self.message_id: int = int(self["message_id"]) 612 613 def logger(self): 614 logger.info( 615 f"好友 " 616 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 617 f"({self.user_id}) " 618 f"撤回了消息: " 619 f"{self.message_id}" 620 )
好友消息撤回事件
def
logger(self):
613 def logger(self): 614 logger.info( 615 f"好友 " 616 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 617 f"({self.user_id}) " 618 f"撤回了消息: " 619 f"{self.message_id}" 620 )
发送事件日志
Inherited Members
623@register_event("notice", notice_type="notify", sub_type="poke") 624class GroupPokeEvent(NoticeEvent): 625 """ 626 群戳一戳事件 627 """ 628 629 def __init__(self, event_data): 630 super().__init__(event_data) 631 self.group_id: int = int(self["group_id"]) 632 self.user_id: int = int(self["user_id"]) 633 self.target_id: int = int(self["target_id"]) 634 635 def logger(self): 636 logger.info( 637 f"群 " 638 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 639 f"({self.group_id}) " 640 f"内 " 641 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is the poker 642 f"({self.user_id}) " 643 f"戳了戳 " 644 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is pokered 645 f"({self.target_id})" 646 )
群戳一戳事件
def
logger(self):
635 def logger(self): 636 logger.info( 637 f"群 " 638 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 639 f"({self.group_id}) " 640 f"内 " 641 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is the poker 642 f"({self.user_id}) " 643 f"戳了戳 " 644 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is pokered 645 f"({self.target_id})" 646 )
发送事件日志
Inherited Members
@register_event('notice', notice_type='notify', sub_type='lucky_king')
class
GroupLuckyKingEvent649@register_event("notice", notice_type="notify", sub_type="lucky_king") 650class GroupLuckyKingEvent(NoticeEvent): 651 """ 652 群红包运气王事件 653 """ 654 655 def __init__(self, event_data): 656 super().__init__(event_data) 657 self.group_id: int = int(self["group_id"]) 658 self.user_id: int = int(self["user_id"]) 659 self.target_id: int = int(self["target_id"]) 660 661 def logger(self): 662 logger.info( 663 f"群 " 664 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 665 f"({self.group_id}) " 666 f"内 " 667 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is lucky king 668 f"({self.user_id}) " 669 f"成为了 " 670 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is sender 671 f"({self.target_id}) " 672 f"发送的红包的运气王" 673 )
群红包运气王事件
def
logger(self):
661 def logger(self): 662 logger.info( 663 f"群 " 664 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 665 f"({self.group_id}) " 666 f"内 " 667 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" # user_id is lucky king 668 f"({self.user_id}) " 669 f"成为了 " 670 f"{QQDataCacher.get_group_member_info(self.group_id, self.target_id).get_nickname()}" # target_id is sender 671 f"({self.target_id}) " 672 f"发送的红包的运气王" 673 )
发送事件日志
Inherited Members
@register_event('notice', notice_type='notify', sub_type='honor')
class
GroupHonorEvent676@register_event("notice", notice_type="notify", sub_type="honor") 677class GroupHonorEvent(NoticeEvent): 678 """ 679 群荣誉变更事件 680 """ 681 682 def __init__(self, event_data): 683 super().__init__(event_data) 684 self.group_id: int = int(self["group_id"]) 685 self.user_id: int = int(self["user_id"]) 686 self.honor_type: str = self["honor_type"] 687 688 def logger(self): 689 if self.honor_type not in ["talkative", "performer", "emotion"]: 690 logger.info( 691 f"群 " 692 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 693 f"({self.group_id}) " 694 f"内 " 695 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 696 f"({self.user_id}) " 697 f"获得了未知荣誉: " 698 f"{self.honor_type}" 699 ) 700 else: 701 super().logger()
群荣誉变更事件
def
logger(self):
688 def logger(self): 689 if self.honor_type not in ["talkative", "performer", "emotion"]: 690 logger.info( 691 f"群 " 692 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 693 f"({self.group_id}) " 694 f"内 " 695 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 696 f"({self.user_id}) " 697 f"获得了未知荣誉: " 698 f"{self.honor_type}" 699 ) 700 else: 701 super().logger()
发送事件日志
Inherited Members
@register_event('notice', notice_type='notify', sub_type='honor', honor_type='talkative')
class
GroupTalkativeHonorEvent704@register_event("notice", notice_type="notify", sub_type="honor", honor_type="talkative") 705class GroupTalkativeHonorEvent(GroupHonorEvent): 706 """ 707 群龙王变更事件 708 """ 709 710 def logger(self): 711 logger.info( 712 f"群 " 713 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 714 f"({self.group_id}) " 715 f"内 " 716 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 717 f"({self.user_id}) " 718 f"获得了群龙王称号" 719 )
群龙王变更事件
def
logger(self):
710 def logger(self): 711 logger.info( 712 f"群 " 713 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 714 f"({self.group_id}) " 715 f"内 " 716 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 717 f"({self.user_id}) " 718 f"获得了群龙王称号" 719 )
发送事件日志
@register_event('notice', notice_type='notify', sub_type='honor', honor_type='performer')
class
GroupPerformerHonorEvent722@register_event("notice", notice_type="notify", sub_type="honor", honor_type="performer") 723class GroupPerformerHonorEvent(GroupHonorEvent): 724 """ 725 群群聊之火变更事件 726 """ 727 728 def logger(self): 729 logger.info( 730 f"群 " 731 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 732 f"({self.group_id}) " 733 f"内 " 734 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 735 f"({self.user_id}) " 736 f"获得了群聊炽焰称号" 737 )
群群聊之火变更事件
def
logger(self):
728 def logger(self): 729 logger.info( 730 f"群 " 731 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 732 f"({self.group_id}) " 733 f"内 " 734 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 735 f"({self.user_id}) " 736 f"获得了群聊炽焰称号" 737 )
发送事件日志
@register_event('notice', notice_type='notify', sub_type='honor', honor_type='emotion')
class
GroupEmotionHonorEvent740@register_event("notice", notice_type="notify", sub_type="honor", honor_type="emotion") 741class GroupEmotionHonorEvent(GroupHonorEvent): 742 """ 743 群表快乐源泉变更事件 744 """ 745 746 def logger(self): 747 logger.info( 748 f"群 " 749 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 750 f"({self.group_id}) " 751 f"内 " 752 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 753 f"({self.user_id}) " 754 f"获得了快乐源泉称号" 755 )
群表快乐源泉变更事件
def
logger(self):
746 def logger(self): 747 logger.info( 748 f"群 " 749 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 750 f"({self.group_id}) " 751 f"内 " 752 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 753 f"({self.user_id}) " 754 f"获得了快乐源泉称号" 755 )
发送事件日志
758@register_event("request") 759class RequestEvent(Event): 760 """ 761 请求事件 762 """ 763 764 def __init__(self, event_data): 765 super().__init__(event_data) 766 self.request_type: str = self["request_type"] 767 self.comment: str = self["comment"] 768 self.flag: str = self["flag"]
请求事件
Inherited Members
771@register_event("request", request_type="friend") 772class FriendRequestEvent(RequestEvent): 773 """ 774 加好友请求事件 775 """ 776 777 def __init__(self, event_data): 778 super().__init__(event_data) 779 self.user_id: int = int(self["user_id"]) 780 781 def logger(self): 782 logger.info( 783 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 784 f"({self.user_id})" 785 f"请求添加机器人为好友\n" 786 f"验证信息: {self.comment}\n" 787 f"flag: {self.flag}" 788 )
加好友请求事件
def
logger(self):
781 def logger(self): 782 logger.info( 783 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 784 f"({self.user_id})" 785 f"请求添加机器人为好友\n" 786 f"验证信息: {self.comment}\n" 787 f"flag: {self.flag}" 788 )
发送事件日志
Inherited Members
791@register_event("request", request_type="group") 792class GroupRequestEvent(RequestEvent): 793 """ 794 加群请求事件 795 """ 796 797 def __init__(self, event_data): 798 super().__init__(event_data) 799 self.sub_type: str = self["sub_type"] 800 self.group_id: int = int(self["group_id"]) 801 self.user_id: int = int(self["user_id"])
加群请求事件
Inherited Members
@register_event('request', request_type='group', sub_type='add')
class
GroupAddRequestEvent804@register_event("request", request_type="group", sub_type="add") 805class GroupAddRequestEvent(GroupRequestEvent): 806 """ 807 加群请求事件 - 添加 808 """ 809 810 def logger(self): 811 logger.info( 812 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 813 f"({self.user_id})" 814 f"请求加入群 " 815 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 816 f"({self.group_id})\n" 817 f"验证信息: {self.comment}\n" 818 f"flag: {self.flag}" 819 )
加群请求事件 - 添加
def
logger(self):
810 def logger(self): 811 logger.info( 812 f"{QQDataCacher.get_user_info(self.user_id).get_nickname()}" 813 f"({self.user_id})" 814 f"请求加入群 " 815 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 816 f"({self.group_id})\n" 817 f"验证信息: {self.comment}\n" 818 f"flag: {self.flag}" 819 )
发送事件日志
@register_event('request', request_type='group', sub_type='invite')
class
GroupInviteRequestEvent822@register_event("request", request_type="group", sub_type="invite") 823class GroupInviteRequestEvent(GroupRequestEvent): 824 """ 825 加群请求事件 - 邀请 826 """ 827 828 def logger(self): 829 logger.info( 830 f"{QQDataCacher.get_group_member_info(self.group_id, self.user_id).get_nickname()}" 831 f"({self.user_id})" 832 f"邀请机器人加入群 " 833 f"{QQDataCacher.get_group_info(self.group_id).group_name}" 834 )
加群请求事件 - 邀请
837@register_event("meta_event") 838class MetaEvent(Event): 839 """ 840 元事件 841 """ 842 843 def __init__(self, event_data): 844 super().__init__(event_data) 845 self.meta_event_type: str = self["meta_event_type"]
元事件
Inherited Members
848@register_event("meta_event", meta_event_type="lifecycle") 849class LifecycleMetaEvent(MetaEvent): 850 """ 851 元事件 - 生命周期 852 """ 853 854 def __init__(self, event_data): 855 super().__init__(event_data) 856 self.sub_type: str = self["sub_type"] 857 858 def logger(self): 859 logger.info( 860 f"收到元事件: " + { 861 "enable": "OneBot 启用", 862 "disable": "OneBot 禁用", 863 "connect": "OneBot 连接成功" 864 }[self.sub_type] 865 )
元事件 - 生命周期
def
logger(self):
858 def logger(self): 859 logger.info( 860 f"收到元事件: " + { 861 "enable": "OneBot 启用", 862 "disable": "OneBot 禁用", 863 "connect": "OneBot 连接成功" 864 }[self.sub_type] 865 )
发送事件日志
Inherited Members
@register_event('meta_event', meta_event_type='lifecycle', sub_type='enable')
class
EnableMetaEvent868@register_event("meta_event", meta_event_type="lifecycle", sub_type="enable") 869class EnableMetaEvent(LifecycleMetaEvent): 870 """ 871 元事件 - 生命周期 - OneBot 启用 872 """ 873 874 def logger(self): 875 logger.info("收到元事件: OneBot 启用")
元事件 - 生命周期 - OneBot 启用
@register_event('meta_event', meta_event_type='lifecycle', sub_type='disable')
class
DisableMetaEvent878@register_event("meta_event", meta_event_type="lifecycle", sub_type="disable") 879class DisableMetaEvent(LifecycleMetaEvent): 880 """ 881 元事件 - 生命周期 - OneBot 禁用 882 """ 883 884 def logger(self): 885 logger.info("收到元事件: OneBot 禁用")
元事件 - 生命周期 - OneBot 禁用
@register_event('meta_event', meta_event_type='lifecycle', sub_type='connect')
class
ConnectMetaEvent888@register_event("meta_event", meta_event_type="lifecycle", sub_type="connect") 889class ConnectMetaEvent(LifecycleMetaEvent): 890 """ 891 元事件 - 生命周期 - OneBot 连接成功 892 """ 893 894 def logger(self): 895 logger.info("收到元事件: OneBot 连接成功")
元事件 - 生命周期 - OneBot 连接成功
898@register_event("meta_event", meta_event_type="heartbeat") 899class HeartbeatMetaEvent(MetaEvent): 900 """ 901 元事件 - 心跳 902 """ 903 904 def __init__(self, event_data): 905 super().__init__(event_data) 906 self.status: dict = self["status"] 907 self.interval: int = int(self["interval"]) 908 909 def logger(self): 910 logger.debug(f"收到心跳包")
元事件 - 心跳
Inherited Members
@EventManager.event_listener(ListenerServer.EscalationEvent)
def
on_escalation(event_data):
913@EventManager.event_listener(ListenerServer.EscalationEvent) 914def on_escalation(event_data): 915 """ 916 事件分发器 917 Args: 918 event_data: 事件数据 919 Returns: 920 None 921 """ 922 event_data = event_data.event_data 923 event = Event(event_data) 924 event_call_list = [event] 925 matched_event = False 926 for event_cls_data in events: 927 if ( 928 event_data["post_type"] == event_cls_data['post_type'] and 929 all(k in event_data and event_data[k] == v for k, v in event_cls_data['rules'].items()) 930 ): 931 event = event_cls_data['cls'](event_data) 932 if not matched_event: 933 if event.logger() is not False: 934 matched_event = True 935 event_call_list.append(event) 936 937 if not matched_event: 938 logger.warning(f"未知的上报事件: {event_data}") 939 940 # 广播事件 941 for event in event_call_list: 942 event.call()
事件分发器
Arguments:
- event_data: 事件数据
Returns:
None