diff --git a/arclet/entari/builtins/auto_reload.py b/arclet/entari/builtins/auto_reload.py
index ea6cc48..9cdb001 100644
--- a/arclet/entari/builtins/auto_reload.py
+++ b/arclet/entari/builtins/auto_reload.py
@@ -73,26 +73,28 @@ async def watch(self):
for change in event:
if plugin := find_plugin_by_file(change[1]):
if plugin.is_static:
- logger("INFO", f"Plugin {plugin.id!r} is static, ignored.")
+ logger.opt(colors=True).info(f"Plugin {plugin.id!r} is static, ignored.")
continue
- logger("INFO", f"Detected change in {plugin.id!r}, reloading...")
+ logger.opt(colors=True).info(f"Detected change in {plugin.id!r}, reloading...")
pid = plugin.id
del plugin
unload_plugin(pid)
if plugin := load_plugin(pid):
- logger("INFO", f"Reloaded {plugin.id!r}")
+ logger.opt(colors=True).info(f"Reloaded {plugin.id!r}")
del plugin
else:
- logger("ERROR", f"Failed to reload {pid!r}")
+ logger.opt(colors=True).error(f"Failed to reload {pid!r}")
self.fail[change[1]] = pid
elif change[1] in self.fail:
- logger("INFO", f"Detected change in {change[1]!r} which failed to reload, retrying...")
+ logger.opt(colors=True).info(
+ f"Detected change in {change[1]!r} which failed to reload, retrying..."
+ )
if plugin := load_plugin(self.fail[change[1]]):
- logger("INFO", f"Reloaded {plugin.id!r}")
+ logger.opt(colors=True).info(f"Reloaded {plugin.id!r}")
del plugin
del self.fail[change[1]]
else:
- logger("ERROR", f"Failed to reload {self.fail[change[1]]!r}")
+ logger.opt(colors=True).error(f"Failed to reload {self.fail[change[1]]!r}")
async def watch_config(self):
file = EntariConfig.instance.path.resolve()
@@ -108,21 +110,20 @@ async def watch_config(self):
):
print(change)
continue
- logger("INFO", f"Detected change in {change[1]!r}, reloading config...")
+ logger.opt(colors=True).info(f"Detected change in {change[1]!r}, reloading config...")
old_basic = EntariConfig.instance.basic.copy()
old_plugin = EntariConfig.instance.plugin.copy()
EntariConfig.instance.reload()
for key in old_basic:
if key in EntariConfig.instance.basic and old_basic[key] != EntariConfig.instance.basic[key]:
- logger(
- "DEBUG",
+ logger.opt(colors=True).debug(
f"Basic config {key!r} changed from {old_basic[key]!r} "
f"to {EntariConfig.instance.basic[key]!r}",
)
await es.publish(ConfigReload("basic", key, EntariConfig.instance.basic[key], old_basic[key]))
for key in set(EntariConfig.instance.basic) - set(old_basic):
- logger("DEBUG", f"Basic config {key!r} appended")
+ logger.opt(colors=True).debug(f"Basic config {key!r} appended")
await es.publish(ConfigReload("basic", key, EntariConfig.instance.basic[key]))
for plugin_name in old_plugin:
if plugin_name.startswith("$") or plugin_name.startswith("~"):
@@ -132,11 +133,10 @@ async def watch_config(self):
if plugin := find_plugin(pid):
del plugin
unload_plugin(pid)
- logger("INFO", f"Disposed plugin {pid!r}")
+ logger.opt(colors=True).info(f"Disposed plugin {pid!r}")
continue
if old_plugin[plugin_name] != EntariConfig.instance.plugin[plugin_name]:
- logger(
- "DEBUG",
+ logger.opt(colors=True).debug(
f"Plugin {plugin_name!r} config changed from {old_plugin[plugin_name]!r} "
f"to {EntariConfig.instance.plugin[plugin_name]!r}",
)
@@ -146,25 +146,27 @@ async def watch_config(self):
allow, deny, only_filter = detect_filter_change(old_conf, new_conf)
plugin.update_filter(allow, deny)
if only_filter:
- logger("DEBUG", f"Plugin {pid!r} config only changed filter.")
+ logger.opt(colors=True).debug(f"Plugin {pid!r} config only changed filter.")
continue
res = await es.post(
ConfigReload("plugin", plugin_name, new_conf, old_conf),
)
if res and res.value:
- logger("DEBUG", f"Plugin {pid!r} config change handled by itself.")
+ logger.opt(colors=True).debug(f"Plugin {pid!r} config change handled by itself.")
continue
- logger("INFO", f"Detected config of {pid!r} changed, reloading...")
+ logger.opt(colors=True).info(
+ f"Detected config of {pid!r} changed, reloading..."
+ )
plugin_file = str(plugin.module.__file__)
unload_plugin(plugin_name)
if plugin := load_plugin(plugin_name, new_conf):
- logger("INFO", f"Reloaded {plugin.id!r}")
+ logger.opt(colors=True).info(f"Reloaded {plugin.id!r}")
del plugin
else:
- logger("ERROR", f"Failed to reload {plugin_name!r}")
+ logger.opt(colors=True).error(f"Failed to reload {plugin_name!r}")
self.fail[plugin_file] = pid
else:
- logger("INFO", f"Detected {pid!r} appended, loading...")
+ logger.opt(colors=True).info(f"Detected {pid!r} appended, loading...")
load_plugin(plugin_name, new_conf)
if new := (set(EntariConfig.instance.plugin) - set(old_plugin)):
for plugin_name in new:
diff --git a/arclet/entari/event/send.py b/arclet/entari/event/send.py
index 393e14c..52571f0 100644
--- a/arclet/entari/event/send.py
+++ b/arclet/entari/event/send.py
@@ -8,7 +8,7 @@
from ..message import MessageChain
if TYPE_CHECKING:
- from ..session import SatoriEvent, Session
+ from ..session import Session
@dataclass
@@ -16,7 +16,7 @@ class SendRequest:
account: Account
channel: str
message: MessageChain
- session: Union["Session[SatoriEvent]", None] = None
+ session: Union["Session", None] = None
async def gather(self, context: Contexts):
context["account"] = self.account
@@ -39,7 +39,7 @@ class SendResponse:
channel: str
message: MessageChain
result: list[MessageReceipt]
- session: Union["Session[SatoriEvent]", None] = None
+ session: Union["Session", None] = None
async def gather(self, context: Contexts):
context["account"] = self.account
diff --git a/arclet/entari/logger.py b/arclet/entari/logger.py
index 9a0599c..c5faa14 100644
--- a/arclet/entari/logger.py
+++ b/arclet/entari/logger.py
@@ -37,14 +37,12 @@ def message(self):
return self.loggers["[message]"]
def wrapper(self, name: str, color: str = "blue"):
- patched = logger.patch(lambda r: r.update(name="entari"))
+ patched = logger.patch(
+ lambda r: r.update(name="entari", extra={"entari_plugin_name": name, "entari_plugin_color": color})
+ )
patched = patched.bind(name=f"plugins.{name}")
self.loggers[f"plugin.{name}"] = patched
-
- def _log(level: str, message: str, exception: Exception | None = None):
- patched.opt(colors=True, exception=exception).log(level, f"| <{color}>{name}{color}> {message}")
-
- return _log
+ return patched
@staticmethod
def set_level(level: str | int):
@@ -90,6 +88,21 @@ def default_filter(record):
return record["level"].no >= levelno
+def _custom_format(record: Record):
+ if "entari_plugin_name" in record["extra"]:
+ plugin = (
+ f" <{record['extra']['entari_plugin_color']}>"
+ f"{record['extra']['entari_plugin_name']}"
+ f"{record['extra']['entari_plugin_color']}>"
+ )
+ else:
+ plugin = ""
+ return (
+ f"{{time:YYYY-MM-DD HH:mm:ss}} {{level}} | {{name}}"
+ f"{plugin} {{message}}\n"
+ )
+
+
logger.remove()
logger_id = logger.add(
sys.stdout,
@@ -98,7 +111,7 @@ def default_filter(record):
backtrace=True,
colorize=True,
filter=default_filter,
- format="{time:YYYY-MM-DD HH:mm:ss} {level:8} | {name} {message}",
+ format=_custom_format,
)
"""默认日志处理器 id"""
diff --git a/example_plugin.py b/example_plugin.py
index 9bfc76b..1fa1c09 100644
--- a/example_plugin.py
+++ b/example_plugin.py
@@ -72,7 +72,7 @@ async def show(session: Session):
await session.send_message(f"Execute `echo 123` Result: {res}")
return f"Data: {kept_data}"
-TEST = 5
+TEST = 6
print([*Plugin.current()._scope.subscribers])
print(Plugin.current().subplugins)