From ab05d8a1b521e2732b642b8d3cb0cfcaf357e8a5 Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Sat, 10 Aug 2024 12:10:53 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=8F=90=E4=BE=9Bdatabase.json?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builtin_plugins/hooks/_auth_checker.py | 9 ++++- zhenxun/plugins/statistics/statistics_hook.py | 25 +++++++------- zhenxun/services/db_context.py | 34 +++++++++++++++++-- zhenxun/utils/message.py | 6 +++- 4 files changed, 57 insertions(+), 17 deletions(-) diff --git a/zhenxun/builtin_plugins/hooks/_auth_checker.py b/zhenxun/builtin_plugins/hooks/_auth_checker.py index 773867c8..d480a88f 100644 --- a/zhenxun/builtin_plugins/hooks/_auth_checker.py +++ b/zhenxun/builtin_plugins/hooks/_auth_checker.py @@ -5,6 +5,7 @@ from nonebot_plugin_alconna import UniMsg from nonebot_plugin_saa import Mention, MessageFactory, Text from nonebot_plugin_session import EventSession from pydantic import BaseModel +from tortoise.exceptions import IntegrityError from zhenxun.configs.config import Config from zhenxun.models.group_console import GroupConsole @@ -203,7 +204,13 @@ class AuthChecker: group_id = channel_id channel_id = None if user_id and matcher.plugin and (module_path := matcher.plugin.module_name): - user = await UserConsole.get_user(user_id, session.platform) + try: + user = await UserConsole.get_user(user_id, session.platform) + except IntegrityError as e: + logger.debug( + "重复创建用户,已跳过全选该次权限...", "HOOK", session=session, e=e + ) + return if plugin := await PluginInfo.get_or_none(module_path=module_path): if plugin.plugin_type == PluginType.HIDDEN and plugin.name != "帮助": logger.debug("插件为HIDDEN且不是帮助功能,已跳过...") diff --git a/zhenxun/plugins/statistics/statistics_hook.py b/zhenxun/plugins/statistics/statistics_hook.py index bf8f959c..cb1f4b1f 100644 --- a/zhenxun/plugins/statistics/statistics_hook.py +++ b/zhenxun/plugins/statistics/statistics_hook.py @@ -25,15 +25,16 @@ __plugin_meta__ = PluginMetadata( async def _( matcher: Matcher, exception: Exception | None, bot: Bot, session: EventSession ): - plugin = await PluginInfo.get_or_none(module=matcher.plugin_name) - plugin_type = plugin.plugin_type if plugin else None - if plugin_type == PluginType.NORMAL and matcher.plugin_name not in [ - "update_info", - "statistics_handle", - ]: - await Statistics.create( - user_id=session.id1, - group_id=session.id3 or session.id2, - plugin_name=matcher.plugin_name, - create_time=datetime.now(), - ) + if session.id1: + plugin = await PluginInfo.get_or_none(module=matcher.plugin_name) + plugin_type = plugin.plugin_type if plugin else None + if plugin_type == PluginType.NORMAL and matcher.plugin_name not in [ + "update_info", + "statistics_handle", + ]: + await Statistics.create( + user_id=session.id1, + group_id=session.id3 or session.id2, + plugin_name=matcher.plugin_name, + create_time=datetime.now(), + ) diff --git a/zhenxun/services/db_context.py b/zhenxun/services/db_context.py index 33b612ad..9342a6ef 100644 --- a/zhenxun/services/db_context.py +++ b/zhenxun/services/db_context.py @@ -1,3 +1,4 @@ +import ujson as json from nonebot.utils import is_coroutine_callable from tortoise import Tortoise, fields from tortoise.connection import connections @@ -12,6 +13,7 @@ from zhenxun.configs.config import ( sql_name, user, ) +from zhenxun.configs.path_config import DATA_PATH from .log import logger @@ -19,6 +21,8 @@ MODELS: list[str] = [] SCRIPT_METHOD = [] +DATABASE_SETTING_FILE = DATA_PATH / "database.json" + class Model(Model_): """ @@ -46,11 +50,35 @@ class TestSQL(Model): async def init(): - if not bind and not any([user, password, address, port, database]): + if DATABASE_SETTING_FILE.exists(): + with open(DATABASE_SETTING_FILE, "r", encoding="utf-8") as f: + setting_data = json.load(f) + else: + i_bind = bind + if not i_bind and any([user, password, address, port, database]): + i_bind = f"{sql_name}://{user}:{password}@{address}:{port}/{database}" + setting_data = { + "bind": i_bind, + "sql_name": sql_name, + "user": user, + "password": password, + "address": address, + "port": port, + "database": database, + } + with open(DATABASE_SETTING_FILE, "w", encoding="utf-8") as f: + json.dump(setting_data, f, ensure_ascii=False, indent=4) + i_bind = setting_data.get("bind") + _sql_name = setting_data.get("sql_name") + _user = setting_data.get("user") + _password = setting_data.get("password") + _address = setting_data.get("address") + _port = setting_data.get("port") + _database = setting_data.get("database") + if not i_bind and not any([_user, _password, _address, _port, _database]): raise ValueError("\n数据库配置未填写...") - i_bind = bind if not i_bind: - i_bind = f"{sql_name}://{user}:{password}@{address}:{port}/{database}" + i_bind = f"{_sql_name}://{_user}:{_password}@{_address}:{_port}/{_database}" try: await Tortoise.init( db_url=i_bind, modules={"models": MODELS}, timezone="Asia/Shanghai" diff --git a/zhenxun/utils/message.py b/zhenxun/utils/message.py index 234c2a37..54e7f908 100644 --- a/zhenxun/utils/message.py +++ b/zhenxun/utils/message.py @@ -28,7 +28,11 @@ class MessageUtils: 返回: list[Text | Text]: 构造完成的消息列表 """ - is_bytes = driver.config.image_to_bytes == "True" + is_bytes = False + try: + is_bytes = driver.config.image_to_bytes in ["True", "true"] + except AttributeError: + pass message_list = [] for msg in msg_list: if isinstance(msg, (Image, Text, At)):