aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/hydro_roll/__init__.py
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2024-02-27 11:46:36 +0800
committer简律纯 <i@jyunko.cn>2024-02-27 11:46:36 +0800
commitcac060a6e8b70e4e4e1b34555d3d4fee8bc6d007 (patch)
treec3777687637c44d38690a364a363a8336424b59a /hydro_roll/__init__.py
parent255c259cbf5ea143927dd988049c4d9ed14ac4f7 (diff)
downloadHydroRoll-cac060a6e8b70e4e4e1b34555d3d4fee8bc6d007.tar.gz
HydroRoll-cac060a6e8b70e4e4e1b34555d3d4fee8bc6d007.zip
refactor!: rename HydroRoll dir as hydro_roll
Diffstat (limited to 'hydro_roll/__init__.py')
-rw-r--r--hydro_roll/__init__.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/hydro_roll/__init__.py b/hydro_roll/__init__.py
new file mode 100644
index 0000000..cfaff13
--- /dev/null
+++ b/hydro_roll/__init__.py
@@ -0,0 +1,80 @@
+"""中间件"""
+
+from ast import literal_eval
+import os
+from os.path import dirname, join, abspath
+from iamai import ConfigModel, Plugin
+from iamai.log import logger
+from .config import Directory
+from .models.utils import *
+import joblib
+
+try:
+ from .HydroRoll import sum_as_string
+except ImportError:
+ ...
+
+BASE_DIR = Directory(_path=dirname(abspath("__file__")))
+HYDRO_DIR = dirname(abspath(__file__))
+
+
+def _init_directory(_prefix: str = ""):
+ """初始化水系目录"""
+ for _ in BASE_DIR.get_dice_dir_list(_prefix):
+ if not os.path.exists(_):
+ os.makedirs(_)
+
+
+def _load_models():
+ models = {}
+ models["hola"] = joblib.load(join(HYDRO_DIR, "models", "hola.pkl"))
+ return models
+
+
+def load_model(model):
+ logger.info("loading models...")
+ return _load_models()[model]
+
+
+def init_directory(_prefix: str = "HydroRoll"):
+ _init_directory(_prefix=_prefix)
+
+
+class HydroRoll(Plugin):
+ """中间件"""
+
+ class Config(ConfigModel):
+ __config_name__ = "HydroRoll"
+
+ priority = 0
+
+ # TODO: infini should be able to handle all signals and tokens from Psi.
+ logger.info(f"Loading infini... with {sum_as_string(2,3)}")
+
+ async def handle(self) -> None:
+ """
+ @TODO: infini should be able to handle all signals and tokens from Psi.
+ @BODY: infini actives the rule-packages.
+ """
+
+ if self.event.message.get_plain_text() == ".core":
+ await self.event.reply("infini is running.")
+ elif self.event.message.startswith(".test"):
+ try:
+ result = literal_eval(self.event.message.get_plain_text()[5:])
+ await self.event.reply(result)
+ except Exception as error:
+ await self.event.reply(f"{error!r}")
+
+ async def rule(self) -> bool:
+ """
+ @TODO: Psi should be able to handle all message first.
+ @BODY: lexer module will return a list of tokens, parser module will parse the tokens into a tree, and executor module will execute the tokens with a stack with a bool return value.
+ """
+ logger.info("loading psi...")
+ if not self.bot.global_state.get("HydroRoll.dir"):
+ hola = load_model("hola")
+
+ init_directory()
+ self.bot.global_state["HydroRoll.dir"] = True
+ return self.event.adapter.name in ["cqhttp", "kook", "console", "mirai"]