aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/hydrorollcore/event.py
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2023-12-10 23:36:45 +0800
committer苏向夜 <fu050409@163.com>2023-12-10 23:36:45 +0800
commit627b435ea364c538463f220b4e48daa40ad64b19 (patch)
tree1380fc90d9835f031ba52445a60ea41d429fe51b /src/hydrorollcore/event.py
parentd4378483f04635633d0106e0744e17c2221d73c5 (diff)
downloadinfini-627b435ea364c538463f220b4e48daa40ad64b19.tar.gz
infini-627b435ea364c538463f220b4e48daa40ad64b19.zip
:sparkles: 实现消息事件
Diffstat (limited to 'src/hydrorollcore/event.py')
-rw-r--r--src/hydrorollcore/event.py43
1 files changed, 38 insertions, 5 deletions
diff --git a/src/hydrorollcore/event.py b/src/hydrorollcore/event.py
index e8edeb98..bec0399e 100644
--- a/src/hydrorollcore/event.py
+++ b/src/hydrorollcore/event.py
@@ -1,12 +1,45 @@
-from abc import ABCMeta
+from .typing import Dict
+from .log import logger
+import re
-class Event(metaclass=ABCMeta):
+__all__ = ["Event", "events"]
+
+
+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:
+ string = self._events.get(name.lower())
+ if not string:
+ logger.warning(f"事件[{name.lower()}]不存在,将返回空字符串!")
+ return ""
+ else:
+ return self._format(string, **kwargs)
+
+ 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
+
+
+class Event:
"""事件基类"""
name: str
output: str
- def __init__(self, name: str, output: str) -> None:
- self.name = name
- self.output = output
+ def __init_subclass__(cls) -> None:
+ events.regist(cls.name, cls.output)
+
+
+events = Events()