diff options
| author | 2023-12-18 01:13:19 +0800 | |
|---|---|---|
| committer | 2023-12-18 01:13:19 +0800 | |
| commit | 31b0e745ab9688c3c760130ded3e0ea645902b15 (patch) | |
| tree | 074a58a5233d918773460d305e3f5a0220f49551 | |
| parent | bf95e7c63aceb7b64d718dc16f007fc78c37d2a7 (diff) | |
| download | infini-31b0e745ab9688c3c760130ded3e0ea645902b15.tar.gz infini-31b0e745ab9688c3c760130ded3e0ea645902b15.zip | |
:bug: 允许Handler实例化
| -rw-r--r-- | src/infini/handler.py | 5 | ||||
| -rw-r--r-- | src/infini/matcher.py | 21 | ||||
| -rw-r--r-- | src/infini/typing.py | 1 |
3 files changed, 15 insertions, 12 deletions
diff --git a/src/infini/handler.py b/src/infini/handler.py index 32ab7465..7c0ee73d 100644 --- a/src/infini/handler.py +++ b/src/infini/handler.py @@ -4,12 +4,15 @@ from .event import MatcherEvent, InfiniEvent __all__ = ["Handler"] -class Handler(metaclass=ABCMeta): +class Handler: """规则包业务基类""" name: str priority: int = 0 + def __init__(self) -> None: + pass + @abstractmethod def process(self, event: MatcherEvent) -> InfiniEvent: raise NotImplementedError diff --git a/src/infini/matcher.py b/src/infini/matcher.py index 94bb6645..364bc5ea 100644 --- a/src/infini/matcher.py +++ b/src/infini/matcher.py @@ -1,4 +1,4 @@ -from .register import Events, Handlers, events, handlers +from .register import Register, register from .event import MatcherEvent from .handler import Handler from .exceptions import UnknownMatcherEvent @@ -7,24 +7,23 @@ from .exceptions import UnknownMatcherEvent class Matcher: """事件处理单元""" - events: Events - handlers: Handlers + register: Register - def __init__( - self, _events: Events | None = None, _handlers: Handlers | None = None - ) -> None: - self.events = _events if _events else events - self.handlers = _handlers if _handlers else handlers + def __init__(self, _register: Register | None = None) -> None: + self.register = _register if _register else register def match(self, name: str) -> Handler: - if handler := self.handlers.match(name): - return handler + if handler := self.register.handlers.match(name): + if isinstance(handler, Handler): + return handler + else: + return handler() else: raise UnknownMatcherEvent(f"未知的规则包: {name}") def run(self, event: MatcherEvent) -> str: callback_event = self.match(event.name).process(event) - return self.events.process( + return self.register.events.process( callback_event.name, **callback_event.kwargs if callback_event.kwargs else callback_event.kwargs, ) diff --git a/src/infini/typing.py b/src/infini/typing.py index 0055d816..9af61569 100644 --- a/src/infini/typing.py +++ b/src/infini/typing.py @@ -1,6 +1,7 @@ from typing import ( Dict as Dict, Any as Any, + Type as Type, TYPE_CHECKING as TYPE_CHECKING, TypeVar as TypeVar, Callable as Callable, |
