aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/hydrorollcore/event.py
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2023-12-11 01:12:41 +0800
committerGitHub <noreply@github.com>2023-12-11 01:12:41 +0800
commit60df69ff0e36ffa3f966d663ad6de3028141e064 (patch)
tree569115937c58d0ba955932446f598500c9650939 /src/hydrorollcore/event.py
parent5781a072250a147d5e636b269fd0a8b7a0b045da (diff)
parent0a688b5105daf563baffedcfb21e16332fe4494e (diff)
downloadinfini-60df69ff0e36ffa3f966d663ad6de3028141e064.tar.gz
infini-60df69ff0e36ffa3f966d663ad6de3028141e064.zip
Merge pull request #37 from HydroRoll-Team/sourcery/pull-36
✨ 实现消息事件文本生成 实现子类注册器 (Sourcery refactored)
Diffstat (limited to 'src/hydrorollcore/event.py')
-rw-r--r--src/hydrorollcore/event.py41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/hydrorollcore/event.py b/src/hydrorollcore/event.py
index e8edeb98..9ce34bd9 100644
--- a/src/hydrorollcore/event.py
+++ b/src/hydrorollcore/event.py
@@ -1,12 +1,43 @@
-from abc import ABCMeta
+from .typing import Dict
+from .logging 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:
+ if string := self._events.get(name.lower()):
+ return self._format(string, **kwargs)
+ logger.warning(f"事件[{name.lower()}]不存在,将返回空字符串!")
+ return ""
+
+ 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()