diff options
| author | 2023-12-10 23:36:45 +0800 | |
|---|---|---|
| committer | 2023-12-10 23:36:45 +0800 | |
| commit | 627b435ea364c538463f220b4e48daa40ad64b19 (patch) | |
| tree | 1380fc90d9835f031ba52445a60ea41d429fe51b /src/hydrorollcore | |
| parent | d4378483f04635633d0106e0744e17c2221d73c5 (diff) | |
| download | infini-627b435ea364c538463f220b4e48daa40ad64b19.tar.gz infini-627b435ea364c538463f220b4e48daa40ad64b19.zip | |
:sparkles: 实现消息事件
Diffstat (limited to 'src/hydrorollcore')
| -rw-r--r-- | src/hydrorollcore/__init__.py | 4 | ||||
| -rw-r--r-- | src/hydrorollcore/cli.py | 5 | ||||
| -rw-r--r-- | src/hydrorollcore/event.py | 43 | ||||
| -rw-r--r-- | src/hydrorollcore/typing.py | 1 |
4 files changed, 47 insertions, 6 deletions
diff --git a/src/hydrorollcore/__init__.py b/src/hydrorollcore/__init__.py index 7a2bba77..12d44f21 100644 --- a/src/hydrorollcore/__init__.py +++ b/src/hydrorollcore/__init__.py @@ -2,5 +2,7 @@ from HydroRollCore.cli import Cli from HydroRollCore.config import Config from HydroRollCore.rule import Rule, Result, Dice from HydroRollCore.core import Core +from HydroRollCore.typing import Config as ConfigTyping +from HydroRollCore.event import Event -__all__ = ["Core", "Rule", "Config", "Cli", "Result", "Dice"] +__all__ = ["Core", "Rule", "Config", "Cli", "Result", "Dice", "Event", "ConfigTyping"] diff --git a/src/hydrorollcore/cli.py b/src/hydrorollcore/cli.py index 41743ce8..0b906f25 100644 --- a/src/hydrorollcore/cli.py +++ b/src/hydrorollcore/cli.py @@ -5,6 +5,7 @@ from .log import logger import argparse import os import sys +import importlib class Cli: @@ -42,3 +43,7 @@ class Cli: (path / "dice.py").write_text(templates.DICE, encoding="utf-8") logger.success("HydroRoll 规则包模板已创建!") + + if args.run: + sys.path.append(str(path)) + importlib.import_module("event") 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() diff --git a/src/hydrorollcore/typing.py b/src/hydrorollcore/typing.py index d22e3e18..333a763b 100644 --- a/src/hydrorollcore/typing.py +++ b/src/hydrorollcore/typing.py @@ -1,5 +1,6 @@ from pydantic import BaseModel from typing import ( + Dict as Dict, TYPE_CHECKING as TYPE_CHECKING, TypeVar as TypeVar, Callable as Callable, |
