aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hrc/core.py41
-rw-r--r--hrc/rule/__init__.py19
-rw-r--r--src/lib.rs8
3 files changed, 42 insertions, 26 deletions
diff --git a/hrc/core.py b/hrc/core.py
index 3d19b46..35f613d 100644
--- a/hrc/core.py
+++ b/hrc/core.py
@@ -158,31 +158,34 @@ class Core:
await core_run_hook_func(self)
try:
- for _rule in self.rules:
- for rule_enable_hook_func in self._rule_enable_hooks:
- await rule_enable_hook_func(_rule)
- try:
- await _rule.enable()
- except Exception as e:
- self.error_or_exception(
- f"Enable rule {_rule!r} failed:", e)
-
- for _rule in self.rules:
- for rule_run_hook_func in self._rule_run_hooks:
- await rule_run_hook_func(_rule)
- _rule_task = asyncio.create_task(_rule.safe_run())
- self._rule_tasks.add(_rule_task)
- _rule_task.add_done_callback(self._rule_tasks.discard)
+ ##########################################################
+ # @TODO: builtin hook function in every rules packages.
+ ##########################################################
+ # for _rule in self.rules:
+ # for rule_enable_hook_func in self._rule_enable_hooks:
+ # await rule_enable_hook_func(_rule)
+ # try:
+ # await _rule.enable()
+ # except Exception as e:
+ # self.error_or_exception(
+ # f"Enable rule {_rule!r} failed:", e)
+
+ # for _rule in self.rules:
+ # for rule_run_hook_func in self._rule_run_hooks:
+ # await rule_run_hook_func(_rule)
+ # _rule_task = asyncio.create_task(_rule.safe_run())
+ # self._rule_tasks.add(_rule_task)
+ # _rule_task.add_done_callback(self._rule_tasks.discard)
await self.should_exit.wait()
if hot_reload_task is not None: # pragma: no cover
await hot_reload_task
finally:
- for _rule in self.rules:
- for rule_disable_hook_func in self._rule_disable_hooks:
- await rule_disable_hook_func(_rule)
- await _rule.disable()
+ # for _rule in self.rules:
+ # for rule_disable_hook_func in self._rule_disable_hooks:
+ # await rule_disable_hook_func(_rule)
+ # await _rule.disable()
while self._rule_tasks:
await asyncio.sleep(0)
diff --git a/hrc/rule/__init__.py b/hrc/rule/__init__.py
index 467f74a..e144091 100644
--- a/hrc/rule/__init__.py
+++ b/hrc/rule/__init__.py
@@ -140,12 +140,10 @@ class Rule(ABC, Generic[EventT, StateT, ConfigT]):
@final
def state(self, value: StateT) -> None:
self.core.rule_state[self.name] = value
-
- @staticmethod
- async def enable(): ...
-
- @staticmethod
- async def disable(): ...
+
+ async def enable(self): ...
+
+ async def disable(self): ...
@staticmethod
def aliases(names, ignore_case=False):
@@ -155,3 +153,12 @@ class Rule(ABC, Generic[EventT, StateT, ConfigT]):
return func
return decorator
+
+ @final
+ async def safe_run(self) -> None:
+ try:
+ await self.enable()
+ except Exception as e:
+ self.bot.error_or_exception(
+ f"Enable rule {self.__class__.__name__} failed:", e
+ )
diff --git a/src/lib.rs b/src/lib.rs
index 6f069e2..0a33d17 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,15 +1,21 @@
+use clap::builder::FalseyValueParser;
+use pyo3::exceptions;
use pyo3::prelude::*;
use pyo3::wrap_pyfunction;
#[pyfunction]
fn process_rule_pack(rule_pack: &str) -> PyResult<String> {
- // 处理规则包的逻辑
Ok(format!("Processed rule pack: {}", rule_pack))
}
#[pymodule]
#[pyo3(name = "LibCore")]
fn libcore(_py: Python, m: &PyModule) -> PyResult<()> {
+ let py_log = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/hrc/log.py"));
+ let py_event = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/hrc/event.py"));
+ let py_core = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/hrc/core.py"));
+ let py_const = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/hrc/const.py"));
+
m.add_function(wrap_pyfunction!(process_rule_pack, m)?)?;
Ok(())
}