69 lines
1.5 KiB
Python
69 lines
1.5 KiB
Python
"""
|
|
基础事件模型模块
|
|
|
|
定义了所有 OneBot 11 事件的基类和事件类型枚举。
|
|
"""
|
|
from dataclasses import dataclass, field
|
|
from typing import TYPE_CHECKING, Optional
|
|
from abc import ABC, abstractmethod
|
|
|
|
if TYPE_CHECKING:
|
|
from core.bot import Bot
|
|
|
|
|
|
class EventType:
|
|
"""
|
|
事件类型枚举
|
|
"""
|
|
META = 'meta_event' # 元事件
|
|
REQUEST = 'request' # 请求事件
|
|
NOTICE = 'notice' # 通知事件
|
|
MESSAGE = 'message' # 消息事件
|
|
MESSAGE_SENT = 'message_sent' # 消息发送事件
|
|
|
|
|
|
@dataclass
|
|
class OneBotEvent(ABC):
|
|
"""
|
|
OneBot 事件基类
|
|
所有具体的事件类型都应该继承自此类
|
|
"""
|
|
|
|
time: int
|
|
"""事件发生的时间戳"""
|
|
|
|
self_id: int
|
|
"""收到事件的机器人 QQ 号"""
|
|
|
|
_bot: Optional["Bot"] = field(default=None, init=False)
|
|
"""Bot 实例引用,用于快捷调用 API"""
|
|
|
|
@property
|
|
@abstractmethod
|
|
def post_type(self) -> str:
|
|
"""
|
|
上报类型
|
|
"""
|
|
pass
|
|
|
|
@property
|
|
def bot(self) -> "Bot":
|
|
"""
|
|
获取 Bot 实例
|
|
|
|
:return: Bot 实例
|
|
:raises ValueError: 如果 Bot 实例未设置
|
|
"""
|
|
if self._bot is None:
|
|
raise ValueError("Bot instance not set for this event")
|
|
return self._bot
|
|
|
|
@bot.setter
|
|
def bot(self, value: "Bot"):
|
|
"""
|
|
设置 Bot 实例
|
|
|
|
:param value: Bot 实例
|
|
"""
|
|
self._bot = value
|