diff --git a/zhenxun/builtin_plugins/check/data_source.py b/zhenxun/builtin_plugins/check/data_source.py index 325e413a..498c7aca 100644 --- a/zhenxun/builtin_plugins/check/data_source.py +++ b/zhenxun/builtin_plugins/check/data_source.py @@ -1,16 +1,15 @@ import platform -from dataclasses import dataclass from pathlib import Path +from dataclasses import dataclass +import psutil import cpuinfo import nonebot -import psutil -from httpx import ConnectTimeout, NetworkError -from nonebot.utils import run_sync from pydantic import BaseModel +from nonebot.utils import run_sync -from zhenxun.configs.config import BotConfig from zhenxun.services.log import logger +from zhenxun.configs.config import BotConfig from zhenxun.utils.http_utils import AsyncHttpx BAIDU_URL = "https://www.baidu.com/" diff --git a/zhenxun/configs/config.py b/zhenxun/configs/config.py index 56f0fdb9..86583f19 100644 --- a/zhenxun/configs/config.py +++ b/zhenxun/configs/config.py @@ -32,6 +32,14 @@ class BotSetting(BaseModel): return random.choice(platform_superuser) return "" + def get_sql_type(self) -> str: + """获取数据库类型 + + 返回: + str: 数据库类型, postgres, aiomysql, sqlite + """ + return self.db_url.split(":", 1)[0] if self.db_url else "" + Config = ConfigsManager(Path() / "data" / "configs" / "plugins2config.yaml") diff --git a/zhenxun/utils/common_utils.py b/zhenxun/utils/common_utils.py index f3375c8f..06722aa9 100644 --- a/zhenxun/utils/common_utils.py +++ b/zhenxun/utils/common_utils.py @@ -1,3 +1,5 @@ +from zhenxun.services.log import logger +from zhenxun.configs.config import BotConfig from zhenxun.models.task_info import TaskInfo from zhenxun.models.ban_console import BanConsole from zhenxun.models.group_console import GroupConsole @@ -34,3 +36,19 @@ class CommonUtils: """群组是否被ban""" return True return False + + +class SqlUtils: + + @classmethod + def random(cls, query, limit: int = 1) -> str: + db_class_name = BotConfig.get_sql_type() + if "postgres" in db_class_name or "sqlite" in db_class_name: + query = f"{query.sql()} ORDER BY RANDOM() LIMIT {limit};" + elif "mysql" in db_class_name: + query = f"{query.sql()} ORDER BY RAND() LIMIT {limit};" + else: + logger.warning( + f"Unsupported database type: {db_class_name}", query.__module__ + ) + return query