Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions nonebot_plugin_session/adapters/qq.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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 [
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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

Expand Down
32 changes: 30 additions & 2 deletions tests/test_qq.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
DirectMessageCreateEvent,
EventType,
GroupAtMessageCreateEvent,
GroupMessageCreateEvent,
GuildDeleteEvent,
MessageCreateEvent,
MessageDeleteEvent,
Expand Down Expand Up @@ -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(
Expand Down