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)>
class Event(Lib.core.EventManager.Event):
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

事件类

Event(event_data)
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"]
event_data: dict
time: int
self_id: int
post_type: str
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

def logger(self):
47    def logger(self):
48        """
49        发送事件日志
50        """
51        return False

发送事件日志

class EventData(typing.TypedDict):
54class EventData(TypedDict):
55    """
56    事件数据
57    """
58    cls: Event
59    post_type: str
60    rules: dict

事件数据

cls: Event
post_type: str
rules: dict
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]

发送者数据

user_id: NotRequired[int]
nickname: NotRequired[str]
sex: NotRequired[Literal['male', 'female', 'unknown']]
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]

私聊发送者数据

user_id: NotRequired[int]
nickname: NotRequired[str]
sex: NotRequired[Literal['male', 'female', 'unknown']]
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]

群聊发送者数据

user_id: NotRequired[int]
nickname: NotRequired[str]
card: NotRequired[str]
sex: NotRequired[Literal['male', 'female', 'unknown']]
age: NotRequired[int]
level: NotRequired[int]
role: NotRequired[Literal['owner', 'admin', 'member']]
title: NotRequired[str]
@register_event('message')
class MessageEvent(Event):
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_type
user_id: int
sub_type: str
raw_message: str
message_id: int
sender: SenderDict
@register_event('message', message_type='private')
class PrivateMessageEvent(MessageEvent):
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()

私聊消息事件

PrivateMessageEvent(event_data)
152    def __init__(self, event_data):
153        super().__init__(event_data)
154        self.sender: PrivateDict = self["sender"]
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()

发送事件日志

@register_event('message', message_type='group')
class GroupMessageEvent(MessageEvent):
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()

群聊消息事件

GroupMessageEvent(event_data)
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"]
group_id: int
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()

发送事件日志

@register_event('notice')
class NoticeEvent(Event):
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"]

通知事件

NoticeEvent(event_data)
267    def __init__(self, event_data):
268        super().__init__(event_data)
269        self.notice_type: str = self["notice_type"]
notice_type: str
class FileDict(typing.TypedDict):
272class FileDict(TypedDict, total=False):
273    """
274    文件数据
275    """
276    id: str
277    name: str
278    size: int
279    busid: int

文件数据

id: str
name: str
size: int
busid: int
@register_event('notice', notice_type='group_upload')
class GroupUploadEvent(NoticeEvent):
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        )

群文件上传事件

GroupUploadEvent(event_data)
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"]
group_id: int
user_id: int
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        )

发送事件日志

@register_event('notice', notice_type='group_admin')
class GroupAdminEvent(NoticeEvent):
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"]

群管理员变动事件

GroupAdminEvent(event_data)
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"]
group_id: int
user_id: int
sub_type: str
@register_event('notice', notice_type='group_admin', sub_type='set')
class GroupSetAdminEvent(GroupAdminEvent):
321@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 GroupUnsetAdminEvent(GroupAdminEvent):
339@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        )

发送事件日志

@register_event('notice', notice_type='group_decrease')
class GroupDecreaseEvent(NoticeEvent):
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"]

群成员减少事件

GroupDecreaseEvent(event_data)
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"]
group_id: int
user_id: int
operator_id
sub_type: str
@register_event('notice', notice_type='group_decrease', sub_type='leave')
class GroupDecreaseLeaveEvent(GroupDecreaseEvent):
371@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        )

群成员离开事件

def logger(self):
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 GroupDecreaseKickEvent(GroupDecreaseEvent):
389@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 GroupDecreaseKickMeEvent(GroupDecreaseEvent):
410@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        )

发送事件日志

@register_event('notice', notice_type='group_increase')
class GroupIncreaseEvent(NoticeEvent):
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"]

群成员增加事件

GroupIncreaseEvent(event_data)
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"]
group_id: int
user_id: int
operator_id: int
sub_type: str
@register_event('notice', notice_type='group_increase', sub_type='approve')
class GroupIncreaseApproveEvent(GroupIncreaseEvent):
442@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 GroupIncreaseInviteEvent(GroupIncreaseEvent):
463@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        )

发送事件日志

@register_event('notice', notice_type='group_ban')
class GroupBanEvent(NoticeEvent):
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"])
group_id: int
user_id: int
operator_id: int
sub_type: str
duration: int
@register_event('notice', notice_type='group_ban', sub_type='ban')
class GroupBanSetEvent(GroupBanEvent):
499@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 GroupBanLiftEvent(GroupBanEvent):
521@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        )

发送事件日志

@register_event('notice', notice_type='friend_add')
class FriendAddEvent(NoticeEvent):
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        )

好友添加事件

FriendAddEvent(event_data)
548    def __init__(self, event_data):
549        super().__init__(event_data)
550        self.user_id: int = int(self["user_id"])
user_id: int
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        )

发送事件日志

@register_event('notice', notice_type='group_recall')
class GroupRecallEvent(NoticeEvent):
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            )

群消息撤回事件

GroupRecallEvent(event_data)
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"])
group_id: int
user_id: int
operator_id: int
message_id: int
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            )

发送事件日志

@register_event('notice', notice_type='friend_recall')
class FriendRecallEvent(NoticeEvent):
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        )

好友消息撤回事件

FriendRecallEvent(event_data)
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"])
user_id: int
message_id: int
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        )

发送事件日志

@register_event('notice', notice_type='notify', sub_type='poke')
class GroupPokeEvent(NoticeEvent):
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        )

群戳一戳事件

GroupPokeEvent(event_data)
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"])
group_id: int
user_id: int
target_id: int
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        )

发送事件日志

@register_event('notice', notice_type='notify', sub_type='lucky_king')
class GroupLuckyKingEvent(NoticeEvent):
649@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        )

群红包运气王事件

GroupLuckyKingEvent(event_data)
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"])
group_id: int
user_id: int
target_id: int
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        )

发送事件日志

@register_event('notice', notice_type='notify', sub_type='honor')
class GroupHonorEvent(NoticeEvent):
676@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()

群荣誉变更事件

GroupHonorEvent(event_data)
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"]
group_id: int
user_id: int
honor_type: str
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()

发送事件日志

@register_event('notice', notice_type='notify', sub_type='honor', honor_type='talkative')
class GroupTalkativeHonorEvent(GroupHonorEvent):
704@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 GroupPerformerHonorEvent(GroupHonorEvent):
722@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 GroupEmotionHonorEvent(GroupHonorEvent):
740@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        )

发送事件日志

@register_event('request')
class RequestEvent(Event):
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"]

请求事件

RequestEvent(event_data)
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"]
request_type: str
comment: str
flag: str
@register_event('request', request_type='friend')
class FriendRequestEvent(RequestEvent):
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        )

加好友请求事件

FriendRequestEvent(event_data)
777    def __init__(self, event_data):
778        super().__init__(event_data)
779        self.user_id: int = int(self["user_id"])
user_id: int
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        )

发送事件日志

@register_event('request', request_type='group')
class GroupRequestEvent(RequestEvent):
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"])

加群请求事件

GroupRequestEvent(event_data)
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"])
sub_type: str
group_id: int
user_id: int
@register_event('request', request_type='group', sub_type='add')
class GroupAddRequestEvent(GroupRequestEvent):
804@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 GroupInviteRequestEvent(GroupRequestEvent):
822@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        )

加群请求事件 - 邀请

def logger(self):
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        )

发送事件日志

@register_event('meta_event')
class MetaEvent(Event):
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"]

元事件

MetaEvent(event_data)
843    def __init__(self, event_data):
844        super().__init__(event_data)
845        self.meta_event_type: str = self["meta_event_type"]
meta_event_type: str
@register_event('meta_event', meta_event_type='lifecycle')
class LifecycleMetaEvent(MetaEvent):
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        )

元事件 - 生命周期

LifecycleMetaEvent(event_data)
854    def __init__(self, event_data):
855        super().__init__(event_data)
856        self.sub_type: str = self["sub_type"]
sub_type: str
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        )

发送事件日志

@register_event('meta_event', meta_event_type='lifecycle', sub_type='enable')
class EnableMetaEvent(LifecycleMetaEvent):
868@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 启用

def logger(self):
874    def logger(self):
875        logger.info("收到元事件: OneBot 启用")

发送事件日志

@register_event('meta_event', meta_event_type='lifecycle', sub_type='disable')
class DisableMetaEvent(LifecycleMetaEvent):
878@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 禁用

def logger(self):
884    def logger(self):
885        logger.info("收到元事件: OneBot 禁用")

发送事件日志

@register_event('meta_event', meta_event_type='lifecycle', sub_type='connect')
class ConnectMetaEvent(LifecycleMetaEvent):
888@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 连接成功

def logger(self):
894    def logger(self):
895        logger.info("收到元事件: OneBot 连接成功")

发送事件日志

@register_event('meta_event', meta_event_type='heartbeat')
class HeartbeatMetaEvent(MetaEvent):
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"收到心跳包")

元事件 - 心跳

HeartbeatMetaEvent(event_data)
904    def __init__(self, event_data):
905        super().__init__(event_data)
906        self.status: dict = self["status"]
907        self.interval: int = int(self["interval"])
status: dict
interval: int
def logger(self):
909    def logger(self):
910        logger.debug(f"收到心跳包")

发送事件日志

@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