from typing import Any from pydantic import Field from nonebot.typing import overrides from ..message import MessageChain from .base import Event, GroupChatInfo, PrivateChatInfo class MessageEvent(Event): """消息事件基类""" message_chain: MessageChain = Field(alias='messageChain') sender: Any @overrides(Event) def get_message(self) -> MessageChain: return self.message_chain @overrides(Event) def get_plaintext(self) -> str: return self.message_chain.extract_plain_text() @overrides(Event) def get_user_id(self) -> str: raise NotImplementedError @overrides(Event) def get_session_id(self) -> str: raise NotImplementedError class GroupMessage(MessageEvent): """群消息事件""" sender: GroupChatInfo @overrides(MessageEvent) def get_session_id(self) -> str: return f'group_{self.sender.group.id}_' + self.get_user_id() class FriendMessage(MessageEvent): """好友消息事件""" sender: PrivateChatInfo @overrides(MessageEvent) def get_user_id(self) -> str: return str(self.sender.id) @overrides def get_session_id(self) -> str: return 'friend_' + self.get_user_id() class TempMessage(MessageEvent): """临时会话消息事件""" sender: GroupChatInfo @overrides def get_session_id(self) -> str: return f'temp_{self.sender.group.id}_' + self.get_user_id()