aboutsummaryrefslogtreecommitdiffstatshomepage
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
parentd4378483f04635633d0106e0744e17c2221d73c5 (diff)
downloadinfini-627b435ea364c538463f220b4e48daa40ad64b19.tar.gz
infini-627b435ea364c538463f220b4e48daa40ad64b19.zip
:sparkles: 实现消息事件
-rw-r--r--src/.gitignore2
-rw-r--r--src/hydrorollcore/__init__.py4
-rw-r--r--src/hydrorollcore/cli.py5
-rw-r--r--src/hydrorollcore/event.py43
-rw-r--r--src/hydrorollcore/typing.py1
-rw-r--r--src/test.py4
6 files changed, 53 insertions, 6 deletions
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 00000000..3119f231
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,2 @@
+logs/
+test/ \ No newline at end of file
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,
diff --git a/src/test.py b/src/test.py
new file mode 100644
index 00000000..370adb41
--- /dev/null
+++ b/src/test.py
@@ -0,0 +1,4 @@
+import HydroRollCore
+
+client = HydroRollCore.Cli()
+client.parse_args()