diff options
| author | 2023-12-11 01:12:41 +0800 | |
|---|---|---|
| committer | 2023-12-11 01:12:41 +0800 | |
| commit | 60df69ff0e36ffa3f966d663ad6de3028141e064 (patch) | |
| tree | 569115937c58d0ba955932446f598500c9650939 /src/hydrorollcore/event.py | |
| parent | 5781a072250a147d5e636b269fd0a8b7a0b045da (diff) | |
| parent | 0a688b5105daf563baffedcfb21e16332fe4494e (diff) | |
| download | infini-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.py | 41 |
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() |
