aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2023-12-16 20:29:35 +0800
committer苏向夜 <fu050409@163.com>2023-12-16 20:29:35 +0800
commit8931736c9eb5fc8c5fe2eb8d6eca630b22fba5c9 (patch)
treee09c498037bd2b1b8d06f62e30dc2dfd605cd2bf
parent0680f2f8de507236966ed9ac3ae692f009f2de8f (diff)
downloadinfini-8931736c9eb5fc8c5fe2eb8d6eca630b22fba5c9.tar.gz
infini-8931736c9eb5fc8c5fe2eb8d6eca630b22fba5c9.zip
:sparkles: 更新事件方法
-rw-r--r--src/infini/event.py57
1 files changed, 29 insertions, 28 deletions
diff --git a/src/infini/event.py b/src/infini/event.py
index 659ae73e..7ff276d8 100644
--- a/src/infini/event.py
+++ b/src/infini/event.py
@@ -1,38 +1,19 @@
-from .typing import Dict
-from .exceptions import UnknownMessageEvent
+from abc import ABCMeta
+from .register import Events
-import re
+__all__ = ["InfiniEvent", "MessageEvent", "WorkflowEvent", "MatcherEvent", "events"]
-__all__ = ["MessageEvent", "events"]
-
-class InfiniEvent:
+class InfiniEvent(metaclass=ABCMeta):
"""Inifni 事件基类"""
name: str
+ def __repr__(self) -> str:
+ raise NotImplementedError
-class Events:
- """事件集合"""
-
- _events: Dict[str, str] = {}
-
- def regist(self, name: str, output: str) -> None:
- self._events[name.lower()] = output
-
- def process(self, name: str, **kwargs) -> str:
- if string := self._events.get(name.lower()):
- return self._format(string, **kwargs)
- raise UnknownMessageEvent(f"事件[{name.lower()}]不存在!")
-
- def _format(self, string: str, **kwargs):
- pattern = r"{(.*?)}"
- values = re.findall(pattern, string)
- for value in values:
- kwarg = kwargs.get(value)
- value = kwarg if kwarg else ""
- string = re.sub(pattern, value, string)
- return string
+ def get_event_name(self) -> str:
+ return self.name
class MessageEvent(InfiniEvent):
@@ -54,6 +35,13 @@ class WorkflowEvent(InfiniEvent):
def __repr__(self) -> str:
return f"<WorkflowEvent [{self.name}]>"
+ def __eq__(self, __value: object) -> bool:
+ if __value is str:
+ return self.name == __value
+ if isinstance(__value, WorkflowEvent):
+ return self.name == __value.name and self.kwargs == __value.kwargs
+ return False
+
class MatcherEvent(InfiniEvent):
"""Matcher 事件"""
@@ -63,13 +51,26 @@ class MatcherEvent(InfiniEvent):
string: str
kwargs: dict
- def __init__(self, event_name: str, string: str | None = None, **kwargs):
+ def __init__(
+ self,
+ event_name: str,
+ prefix: str | None = None,
+ string: str | None = None,
+ **kwargs,
+ ):
self.name = event_name
+ self.prefix = prefix or ""
self.string = string or ""
self.kwargs = kwargs
def __repr__(self) -> str:
return f"<MatcherEvent [{self.name}]>"
+ def get_prefix(self):
+ return self.prefix
+
+ def get_plain_text(self):
+ return self.string
+
events = Events()