mirror of https://github.com/Mai-with-u/MaiBot.git
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from typing import TYPE_CHECKING, List, Type
|
|
|
|
from src.common.logger import get_logger
|
|
from src.plugin_system.base.component_types import EventType, MaiMessages
|
|
|
|
if TYPE_CHECKING:
|
|
from .base_events_handler import BaseEventHandler
|
|
|
|
logger = get_logger("base_event")
|
|
|
|
class BaseEvent:
|
|
def __init__(self, event_type: EventType | str) -> None:
|
|
self.event_type = event_type
|
|
self.subscribers: List["BaseEventHandler"] = []
|
|
|
|
def register_handler_to_event(self, handler: "BaseEventHandler") -> bool:
|
|
if handler not in self.subscribers:
|
|
self.subscribers.append(handler)
|
|
return True
|
|
logger.warning(f"Handler {handler.handler_name} 已经注册,不可多次注册")
|
|
return False
|
|
|
|
def remove_handler_from_event(self, handler_class: Type["BaseEventHandler"]) -> bool:
|
|
for handler in self.subscribers:
|
|
if isinstance(handler, handler_class):
|
|
self.subscribers.remove(handler)
|
|
return True
|
|
logger.warning(f"Handler {handler_class.__name__} 未注册,无法移除")
|
|
return False
|
|
|
|
def trigger_event(self, message: MaiMessages):
|
|
copied_message = message.deepcopy()
|
|
for handler in self.subscribers:
|
|
result = handler.execute(copied_message)
|
|
|
|
# TODO: Unfinished Events Handler
|
|
|
|
|