mirror of
				https://github.com/nonebot/nonebot2.git
				synced 2025-10-31 06:56:39 +00:00 
			
		
		
		
	🏷️ add events
This commit is contained in:
		| @@ -1,3 +1,4 @@ | |||||||
| from .bot import Bot | from .bot import Bot | ||||||
|  | from .event import * | ||||||
| from .message import Message, MessageSegment | from .message import Message, MessageSegment | ||||||
| from .event import Event | from .event import Event | ||||||
|   | |||||||
| @@ -1,31 +1,151 @@ | |||||||
| from pydantic import BaseModel | from typing import List, Literal | ||||||
| from nonebot.adapters import Event as BaseEvent | from pydantic import BaseModel, root_validator | ||||||
|  |  | ||||||
| from .message import Message | from nonebot.adapters import Event as BaseEvent | ||||||
|  | from nonebot.typing import overrides | ||||||
|  |  | ||||||
|  | from .message import Message, MessageSegment | ||||||
|  |  | ||||||
|  |  | ||||||
| class Event(BaseEvent): | class Event(BaseEvent): | ||||||
|  |     """ | ||||||
|  |     飞书协议事件。各事件字段参考 `飞书文档`_ | ||||||
|  |  | ||||||
|  |     .. _飞书事件列表文档: | ||||||
|  |         https://open.feishu.cn/document/ukTMukTMukTM/uYDNxYjL2QTM24iN0EjN/event-list | ||||||
|  |     """ | ||||||
|  |     app_id: int | ||||||
|  |     event_type: str | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_type(self) -> str: |     def get_type(self) -> str: | ||||||
|         raise NotImplementedError |         return self.event_type | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_event_name(self) -> str: |     def get_event_name(self) -> str: | ||||||
|         raise NotImplementedError |         return self.event_type | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_event_description(self) -> str: |     def get_event_description(self) -> str: | ||||||
|         return str(self.dict()) |         return str(self.dict()) | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_message(self) -> Message: |     def get_message(self) -> Message: | ||||||
|         raise NotImplementedError |         raise ValueError("Event has no message!") | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_plaintext(self) -> str: |     def get_plaintext(self) -> str: | ||||||
|         raise NotImplementedError |         raise ValueError("Event has no plaintext!") | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_user_id(self) -> str: |     def get_user_id(self) -> str: | ||||||
|         raise NotImplementedError |         raise ValueError("Event has no user_id!") | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def get_session_id(self) -> str: |     def get_session_id(self) -> str: | ||||||
|         raise NotImplementedError |         raise ValueError("Event has no session_id!") | ||||||
|  |  | ||||||
|  |     @overrides(BaseEvent) | ||||||
|     def is_tome(self) -> bool: |     def is_tome(self) -> bool: | ||||||
|         return False |         return False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class UserId(BaseModel): | ||||||
|  |     union_id: str | ||||||
|  |     user_id: str | ||||||
|  |     open_id: str | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Sender(BaseModel): | ||||||
|  |     sender_id: UserId | ||||||
|  |     sender_type: str | ||||||
|  |     tenant_key: str | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Mention(BaseModel): | ||||||
|  |     key: str | ||||||
|  |     id: UserId | ||||||
|  |     name: str | ||||||
|  |     tenant_key: str | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MessageBody(BaseModel): | ||||||
|  |     message_id: str | ||||||
|  |     root_id: str | ||||||
|  |     parent_id: str | ||||||
|  |     create_time: str | ||||||
|  |     chat_id: str | ||||||
|  |     chat_type: str | ||||||
|  |     message_type: str | ||||||
|  |     content: Message | ||||||
|  |     mentions: List[Mention] | ||||||
|  |  | ||||||
|  |     plaintext: str | ||||||
|  |  | ||||||
|  |     @root_validator(pre=True) | ||||||
|  |     def gen_message(cls, values: dict): | ||||||
|  |         content = [] | ||||||
|  |         for piece in values["content"]: | ||||||
|  |             for segment in piece: | ||||||
|  |                 content.append( | ||||||
|  |                     MessageSegment(segment["tag"], segment.pop('name', segment))) | ||||||
|  |  | ||||||
|  |         values["content"] = Message(content) | ||||||
|  |         return values | ||||||
|  |  | ||||||
|  |     @root_validator | ||||||
|  |     def gen_plaintext(cls, values: dict): | ||||||
|  |         values["plaintext"] = str(values["content"]) | ||||||
|  |         return values | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MessageEvent(Event): | ||||||
|  |     sender: Sender | ||||||
|  |     message: MessageBody | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_type(self) -> Literal["message", "notice", "meta_event"]: | ||||||
|  |         return "message" | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_event_name(self) -> str: | ||||||
|  |         return f"{self.get_type()}.{super().get_type()}" | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_event_description(self) -> str: | ||||||
|  |         return ( | ||||||
|  |             f"Message[{super().get_type()}]" | ||||||
|  |             f" {self.message.message_id} from {self.sender.sender_id.user_id}" | ||||||
|  |             f" {self.message.content}") | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_message(self) -> Message: | ||||||
|  |         return self.message.content | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_plaintext(self) -> str: | ||||||
|  |         return self.message.plaintext | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_user_id(self) -> str: | ||||||
|  |         return self.sender.sender_id.user_id | ||||||
|  |  | ||||||
|  |     @overrides(Event) | ||||||
|  |     def get_session_id(self) -> str: | ||||||
|  |         return self.sender.sender_id.user_id | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class PrivateMessageEvent(MessageEvent): | ||||||
|  |     ... | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class GroupMessageEvent(MessageEvent): | ||||||
|  |     ... | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NoticeEvent(Event): | ||||||
|  |     ... | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class MetaEvent(Event): | ||||||
|  |     ... | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user