diff --git a/liteyuki/bot/iobus.py b/liteyuki/bot/iobus.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/liteyuki/comm/channel.py b/liteyuki/comm/channel.py
index 2ca9449c..a1105d0d 100644
--- a/liteyuki/comm/channel.py
+++ b/liteyuki/comm/channel.py
@@ -75,11 +75,6 @@ class Channel(Generic[T]):
if name in _channel:
raise ValueError(f"Channel {name} already exists")
_channel[name] = self
- logger.debug(f"Channel {name} initialized in main process")
- else:
- logger.debug(
- f"Channel {name} initialized in sub process, should manually set in main process"
- )
def _get_generic_type(self) -> Optional[type]:
"""
diff --git a/liteyuki/config.py b/liteyuki/config.py
index b55298f6..39c09dea 100644
--- a/liteyuki/config.py
+++ b/liteyuki/config.py
@@ -118,6 +118,8 @@ def load_config_in_default(no_waring: bool = False) -> dict[str, Any]:
从一个标准的轻雪项目加载配置文件
项目目录下的config.*和config目录下的所有配置文件
项目目录下的配置文件优先
+ Args:
+ no_waring: 是否关闭警告
"""
config = load_configs_from_dirs("config", no_waring=no_waring)
config.update(
diff --git a/liteyuki/log.py b/liteyuki/log.py
index e6ca5230..b0d2d776 100644
--- a/liteyuki/log.py
+++ b/liteyuki/log.py
@@ -12,26 +12,34 @@ import sys
import loguru
-logger = loguru.logger
+logger = loguru.logger.bind()
-# DEBUG日志格式
debug_format: str = (
- "{time:YYYY-MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}.{module}.{function}:{line}> "
- "{message}"
+ "{time:YYYY-MM-DD HH:mm:ss} "
+ "[{level.icon}{level}] "
+ "<{name}.{module}.{function}:{line}> "
+ "{message}"
)
# 默认日志格式
default_format: str = (
- "{time:MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}> "
- "{message}"
+ "{time:MM-DD HH:mm:ss} "
+ "[{level.icon}{level}] "
+ "<{name}> "
+ "{message}"
)
-
def get_format(level: str) -> str:
+ """
+ 获取日志格式
+ Args:
+ level: 日志等级
+
+ Returns: 日志格式
+
+ """
+ # DEBUG日志格式
+
if level == "DEBUG":
return debug_format
else:
@@ -41,23 +49,28 @@ def get_format(level: str) -> str:
def init_log(config: dict):
"""
在语言加载完成后执行
- Returns:
-
+ Args:
+ config: 配置
"""
-
+ global logger
+ level = config.get("log_level", "DEBUG")
+ print("初始化日志系统", level)
logger.remove()
logger.add(
sys.stdout,
- level=0,
+ level=level,
diagnose=False,
- format=get_format(config.get("log_level", "INFO")),
+ format=get_format(level),
)
show_icon = config.get("log_icon", True)
- logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}DEBUG")
- logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}INFO")
- logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}SUCCESS")
- logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}WARNING")
- logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}ERROR")
+ logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}")
+ logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}")
+ logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}")
+ logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}")
+ logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}")
+ logger.level("CRITICAL", color="", icon=f"{'❌' if show_icon else ''}")
+ logger.level("TRACE", color="", icon=f"{'🔍' if show_icon else ''}")
+ logger.bind()
-init_log(config={})
+init_log(config={"log_level": "DEBUG", "log_icon": True})
\ No newline at end of file
diff --git a/liteyuki/session/__init__.py b/liteyuki/session/__init__.py
index 64879d5c..75568f42 100644
--- a/liteyuki/session/__init__.py
+++ b/liteyuki/session/__init__.py
@@ -7,6 +7,8 @@ from typing import Iterable
from magicoca import Chan, select
+from liteyuki.log import logger
+
def message_handler_thread(i_chans: Iterable[Chan[Any]]):
"""
@@ -15,4 +17,5 @@ def message_handler_thread(i_chans: Iterable[Chan[Any]]):
Returns:
"""
for msg in select(*i_chans):
- print("Recv from anybot", msg)
\ No newline at end of file
+ logger.debug(f"Recv from anybot {msg}")
+ logger.info(f"Recv from anybot {msg}")
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 67a91834..5dcfd31c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,9 +7,10 @@ httpx>=0.27.0
nonebot-plugin-htmlrender>=0.1.0
nonebot2[fastapi,httpx,websockets]>=2.3.3
nonebot-adapter-onebot>=2.4.3
-nonebot-plugin-alconna>=0.46.3
+nonebot-plugin-alconna>=0.53.0
nonebot_plugin_apscheduler>=0.4.0
nonebot-adapter-satori>=0.11.5
+mysql-connector-python>=9.1.0
pyppeteer>=2.0.0
markdown>=3.3.6
zhDateTime>=1.0.3
@@ -34,4 +35,5 @@ fastapi~=0.115.0
# liteyuki dependencies
croterline>=1.0.7
-magicoca>=1.0.5
\ No newline at end of file
+magicoca>=1.0.5
+mysql-connector-python~=9.1.0
\ No newline at end of file
diff --git a/src/liteyuki_plugins/nonebot/__init__.py b/src/liteyuki_plugins/nonebot/__init__.py
index fcab9bd8..68bcad03 100644
--- a/src/liteyuki_plugins/nonebot/__init__.py
+++ b/src/liteyuki_plugins/nonebot/__init__.py
@@ -1,7 +1,7 @@
import os.path
from pathlib import Path
-import nonebot
+
from croterline.utils import IsMainProcess
from liteyuki.core import sub_process_manager
@@ -14,9 +14,12 @@ __plugin_meta__ = PluginMetadata(
def nb_run(*args, **kwargs):
+ import nonebot
+
nonebot.init(**kwargs)
from .nb_utils import driver_manager, adapter_manager
+
driver_manager.init(config=kwargs)
adapter_manager.init(kwargs)
adapter_manager.register()
@@ -26,6 +29,7 @@ def nb_run(*args, **kwargs):
if IsMainProcess:
from .dev_reloader import *
+
bot = get_bot()
sub_process_manager.add(
diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py
index fdc6b956..46d5f0e3 100644
--- a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py
+++ b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py
@@ -50,7 +50,7 @@ async def start_push_thread():
)
if MESSAGE in plugin_config.gotify_includes:
- @on_message().handle()
+ @on_message(block=False, priority=100).handle()
async def _(event: Event):
ctx = Context(
user_id=event.get_user_id(),
diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/to_liteyuki.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/to_liteyuki.py
index fc31a169..cf6e34ed 100644
--- a/src/liteyuki_plugins/nonebot/nonebot_plugins/to_liteyuki.py
+++ b/src/liteyuki_plugins/nonebot/nonebot_plugins/to_liteyuki.py
@@ -12,6 +12,7 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
from croterline.process import get_ctx
from nonebot.adapters.onebot.v11 import MessageEvent
from nonebot.plugin import PluginMetadata
+from nonebot.log import logger
from nonebot import on_message
__plugin_meta__ = PluginMetadata(
@@ -20,11 +21,13 @@ __plugin_meta__ = PluginMetadata(
usage="用户无需使用",
)
+
+
ctx = get_ctx()
-@on_message().handle()
+@on_message(block=False, priority=100).handle()
async def _(event: MessageEvent):
- print("Push message to Liteyuki")
-
+ logger.debug("Pushing message to Liteyuki")
ctx.sub_chan << event.raw_message
+ logger.debug("Pushed message to Liteyuki")
diff --git a/src/liteyuki_plugins/nonebot/np_main/core.py b/src/liteyuki_plugins/nonebot/np_main/core.py
index a576e339..08330426 100644
--- a/src/liteyuki_plugins/nonebot/np_main/core.py
+++ b/src/liteyuki_plugins/nonebot/np_main/core.py
@@ -1,9 +1,6 @@
import time
from typing import AnyStr
-import time
-from typing import AnyStr
-
import nonebot
import pip
from nonebot import get_driver, require
@@ -14,15 +11,15 @@ from nonebot.permission import SUPERUSER
# from src.liteyuki.core import Reloader
from src.utils import event as event_utils, satori_utils
+from src.utils.base import reload # type: ignore
from src.utils.base.config import get_config
from src.utils.base.data_manager import TempConfig, common_db
from src.utils.base.language import get_user_lang
+from src.utils.base.ly_function import get_function # type: ignore
from src.utils.base.ly_typing import T_Bot, T_MessageEvent
+from src.utils.message.html_tool import md_to_pic
from src.utils.message.message import MarkdownMessage as md, broadcast_to_superusers
from .api import update_liteyuki # type: ignore
-from src.utils.base import reload # type: ignore
-from src.utils.base.ly_function import get_function # type: ignore
-from src.utils.message.html_tool import md_to_pic
require("nonebot_plugin_alconna")
require("nonebot_plugin_apscheduler")
diff --git a/src/liteyuki_plugins/nonebot/np_main/loader.py b/src/liteyuki_plugins/nonebot/np_main/loader.py
index 498f89b0..d77c4dd3 100644
--- a/src/liteyuki_plugins/nonebot/np_main/loader.py
+++ b/src/liteyuki_plugins/nonebot/np_main/loader.py
@@ -4,14 +4,12 @@ from pathlib import Path
import nonebot.plugin
from nonebot import get_driver
-from src.utils import init_log
from src.utils.base.config import get_config
from src.utils.base.data_manager import InstalledPlugin, plugin_db
from src.utils.base.resource import load_resources
from src.utils.message.tools import check_for_package
load_resources()
-init_log()
driver = get_driver()
diff --git a/src/utils/__init__.py b/src/utils/__init__.py
index 5f0237f5..d04ed75e 100644
--- a/src/utils/__init__.py
+++ b/src/utils/__init__.py
@@ -6,7 +6,6 @@ __NAME__ = "LiteyukiBot"
__VERSION__ = "6.3.2" # 60201
from src.utils.base.config import load_from_yaml, config
-from src.utils.base.log import init_log
from git import Repo
major, minor, patch = map(int, __VERSION__.split("."))
@@ -20,7 +19,6 @@ def init():
"""
# 检测python版本是否高于3.10
- init_log()
if sys.version_info < (3, 10):
nonebot.logger.error("Requires Python3.10+ to run, please upgrade your Python Environment.")
exit(1)
diff --git a/src/utils/base/log.py b/src/utils/base/log.py
index 3e2b09ab..2364122d 100644
--- a/src/utils/base/log.py
+++ b/src/utils/base/log.py
@@ -1,79 +1,79 @@
-import sys
-import loguru
-from typing import TYPE_CHECKING
-from .config import load_from_yaml
-from .language import Language, get_default_lang_code
-
-logger = loguru.logger
-if TYPE_CHECKING:
- # avoid sphinx autodoc resolve annotation failed
- # because loguru module do not have `Logger` class actually
- from loguru import Record
-
-
-def default_filter(record: "Record"):
- """默认的日志过滤器,根据 `config.log_level` 配置改变日志等级。"""
- log_level = record["extra"].get("nonebot_log_level", "INFO")
- levelno = logger.level(log_level).no if isinstance(log_level, str) else log_level
- return record["level"].no >= levelno
-
-
-# DEBUG日志格式
-debug_format: str = (
- "{time:YYYY-MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}.{module}.{function}:{line}> "
- "{message}"
-)
-
-# 默认日志格式
-default_format: str = (
- "{time:MM-DD HH:mm:ss} "
- "[{level.icon}] "
- "<{name}> "
- "{message}"
-)
-
-
-def get_format(level: str) -> str:
- if level == "DEBUG":
- return debug_format
- else:
- return default_format
-
-
-logger = loguru.logger.bind()
-
-
-def init_log():
- """
- 在语言加载完成后执行
- Returns:
-
- """
- global logger
-
- config = load_from_yaml("config.yml")
-
- logger.remove()
- logger.add(
- sys.stdout,
- level=0,
- diagnose=False,
- filter=default_filter,
- format=get_format(config.get("log_level", "INFO")),
- )
- show_icon = config.get("log_icon", True)
- lang = Language(get_default_lang_code())
-
- debug = lang.get("log.debug", default="==DEBUG")
- info = lang.get("log.info", default="===INFO")
- success = lang.get("log.success", default="SUCCESS")
- warning = lang.get("log.warning", default="WARNING")
- error = lang.get("log.error", default="==ERROR")
-
- logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}{debug}")
- logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}{info}")
- logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}{success}")
- logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}{warning}")
- logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}{error}")
+# import sys
+# import loguru
+# from typing import TYPE_CHECKING
+# from .config import load_from_yaml
+# from .language import Language, get_default_lang_code
+#
+# logger = loguru.logger
+# if TYPE_CHECKING:
+# # avoid sphinx autodoc resolve annotation failed
+# # because loguru module do not have `Logger` class actually
+# from loguru import Record
+#
+#
+# def default_filter(record: "Record"):
+# """默认的日志过滤器,根据 `config.log_level` 配置改变日志等级。"""
+# log_level = record["extra"].get("nonebot_log_level", "INFO")
+# levelno = logger.level(log_level).no if isinstance(log_level, str) else log_level
+# return record["level"].no >= levelno
+#
+#
+# # DEBUG日志格式
+# debug_format: str = (
+# "{time:YYYY-MM-DD HH:mm:ss} "
+# "[{level.icon}] "
+# "<{name}.{module}.{function}:{line}> "
+# "{message}"
+# )
+#
+# # 默认日志格式
+# default_format: str = (
+# "{time:MM-DD HH:mm:ss} "
+# "[{level.icon}] "
+# "<{name}> "
+# "{message}"
+# )
+#
+#
+# def get_format(level: str) -> str:
+# if level == "DEBUG":
+# return debug_format
+# else:
+# return default_format
+#
+#
+# logger = loguru.logger.bind()
+#
+#
+# def init_log():
+# """
+# 在语言加载完成后执行
+# Returns:
+#
+# """
+# global logger
+#
+# config = load_from_yaml("config.yml")
+#
+# logger.remove()
+# logger.add(
+# sys.stdout,
+# level=0,
+# diagnose=False,
+# filter=default_filter,
+# format=get_format(config.get("log_level", "INFO")),
+# )
+# show_icon = config.get("log_icon", True)
+# lang = Language(get_default_lang_code())
+#
+# debug = lang.get("log.debug", default="==DEBUG")
+# info = lang.get("log.info", default="===INFO")
+# success = lang.get("log.success", default="SUCCESS")
+# warning = lang.get("log.warning", default="WARNING")
+# error = lang.get("log.error", default="==ERROR")
+#
+# logger.level("DEBUG", color="", icon=f"{'🐛' if show_icon else ''}{debug}")
+# logger.level("INFO", color="", icon=f"{'ℹ️' if show_icon else ''}{info}")
+# logger.level("SUCCESS", color="", icon=f"{'✅' if show_icon else ''}{success}")
+# logger.level("WARNING", color="", icon=f"{'⚠️' if show_icon else ''}{warning}")
+# logger.level("ERROR", color="", icon=f"{'⭕' if show_icon else ''}{error}")
diff --git a/tests/test_logger.py b/tests/test_logger.py
new file mode 100644
index 00000000..d3322709
--- /dev/null
+++ b/tests/test_logger.py
@@ -0,0 +1,9 @@
+from liteyuki import logger
+
+def test_logger():
+ logger.info('Hello, World!')
+ logger.debug('Hello, World!')
+ logger.warning('Hello, World!')
+ logger.error('Hello, World!')
+ logger.critical('Hello, World!')
+ logger.success("Hello, World!")