diff --git a/nonebot_plugin_session/adapters/qq.py b/nonebot_plugin_session/adapters/qq.py index a305d06..aeeaba5 100644 --- a/nonebot_plugin_session/adapters/qq.py +++ b/nonebot_plugin_session/adapters/qq.py @@ -24,6 +24,15 @@ PublicMessageDeleteEvent, ) + # GroupMessageCreateEvent 是 adapter-qq >= 1.7.0 新增的, + # 低版本适配器不会注册该事件的提取器 + try: + from nonebot.adapters.qq import GroupMessageCreateEvent + except ImportError: + GroupMessageCreateEvent = None + + _HAS_GROUP_MESSAGE = hasattr(EventType, "GROUP_MESSAGE_CREATE") + @register_session_extractor(Bot, Event) class EventExtractor(SessionExtractor[Bot, Event]): def extract_platform(self) -> str: @@ -41,7 +50,8 @@ def extract_platform(self) -> str: EventType.GROUP_DEL_ROBOT, EventType.GROUP_MSG_REJECT, EventType.GROUP_MSG_RECEIVE, - ]: + ] or (_HAS_GROUP_MESSAGE + and self.event.__type__ == EventType.GROUP_MESSAGE_CREATE): return SupportedPlatform.qq elif self.event.__type__ in [ @@ -123,6 +133,11 @@ def extract_level(self) -> SessionLevel: elif self.event.__type__ in [ EventType.GROUP_AT_MESSAGE_CREATE, + ] or (_HAS_GROUP_MESSAGE + and self.event.__type__ == EventType.GROUP_MESSAGE_CREATE): + return SessionLevel.LEVEL2 + + elif self.event.__type__ in [ # GROUP_ROBOT_EVENT EventType.GROUP_ADD_ROBOT, EventType.GROUP_DEL_ROBOT, @@ -149,6 +164,9 @@ def extract_level(self) -> SessionLevel: # GUILD_MESSAGE_REACTIONS EventType.MESSAGE_REACTION_ADD, EventType.MESSAGE_REACTION_REMOVE, + # DIRECT_MESSAGE + EventType.DIRECT_MESSAGE_CREATE, + EventType.DIRECT_MESSAGE_DELETE, # OPEN_FORUMS_EVENT EventType.OPEN_FORUM_THREAD_CREATE, EventType.OPEN_FORUM_THREAD_UPDATE, @@ -190,10 +208,13 @@ def extract_level(self) -> SessionLevel: def extract_id2(self) -> Optional[str]: if isinstance( self.event, - ( - GroupAtMessageCreateEvent, - GroupRobotEvent, - ), + (GroupAtMessageCreateEvent, GroupRobotEvent), + ): + return self.event.group_openid + + if ( + GroupMessageCreateEvent is not None + and isinstance(self.event, GroupMessageCreateEvent) ): return self.event.group_openid diff --git a/tests/test_qq.py b/tests/test_qq.py index a55198c..0a40dce 100644 --- a/tests/test_qq.py +++ b/tests/test_qq.py @@ -9,6 +9,7 @@ DirectMessageCreateEvent, EventType, GroupAtMessageCreateEvent, + GroupMessageCreateEvent, GuildDeleteEvent, MessageCreateEvent, MessageDeleteEvent, @@ -113,11 +114,38 @@ def test_group_at_message_create_event(app: App): bot = new_bot(self_id="2233") event = GroupAtMessageCreateEvent( id="id", - __type__=EventType.C2C_MESSAGE_CREATE, + __type__=EventType.GROUP_AT_MESSAGE_CREATE, + content="test", + timestamp="2023-01-01T00:00:00", + author=GroupMemberAuthor(id="1111", bot=False, member_openid="3344"), + group_openid="6677", + group_id="group_id", + ) + session = extract_session(bot, event) + assert_session( + session, + bot_id="2233", + bot_type="QQ", + platform="qq", + level=SessionLevel.LEVEL2, + id1="3344", + id2="6677", + id3=None, + ) + + +def test_group_message_create_event(app: App): + from nonebot_plugin_session import SessionLevel, extract_session + + bot = new_bot(self_id="2233") + event = GroupMessageCreateEvent( + id="id", + __type__=EventType.GROUP_MESSAGE_CREATE, content="test", timestamp="2023-01-01T00:00:00", - author=GroupMemberAuthor(id="1111", member_openid="3344"), + author=GroupMemberAuthor(id="1111", bot=False, member_openid="3344"), group_openid="6677", + group_id="group_id", ) session = extract_session(bot, event) assert_session(