diff --git a/.env.dev b/.env.dev index 127b4891..44f19fe2 100644 --- a/.env.dev +++ b/.env.dev @@ -1,5 +1,3 @@ - - SUPERUSERS=[""] COMMAND_START=[""] @@ -13,6 +11,16 @@ SESSION_EXPIRE_TIMEOUT=30 # 全局图片统一使用bytes发送,当真寻与协议端不在同一服务器上时为True IMAGE_TO_BYTES = False +# 回复消息时自称 +SELF_NICKNAME="小真寻" + +# 数据库配置 +# 示例: "postgres://user:password@127.0.0.1:5432/database" +DB_URL = "" + +# 系统代理 +# SYSTEM_PROXY = "http://127.0.0.1:7890" + PLATFORM_SUPERUSERS = ' { "qq": [""], @@ -22,6 +30,12 @@ PLATFORM_SUPERUSERS = ' DRIVER=~fastapi+~httpx+~websockets + +# LOG_LEVEL=DEBUG +# 服务器和端口 +HOST = 127.0.0.1 +PORT = 8080 + # kook adapter toekn # kaiheila_bots =[{"token": ""}] @@ -51,11 +65,4 @@ DRIVER=~fastapi+~httpx+~websockets # ' # application_commands的{"*": ["*"]}代表将全部应用命令注册为全局应用命令 -# {"admin": ["123", "456"]}则代表将admin命令注册为id是123、456服务器的局部命令,其余命令不注册 - -# LOG_LEVEL=DEBUG -# 服务器和端口 -HOST = 127.0.0.1 -PORT = 8080 - - \ No newline at end of file +# {"admin": ["123", "456"]}则代表将admin命令注册为id是123、456服务器的局部命令,其余命令不注册 \ No newline at end of file diff --git a/bot.py b/bot.py index b3009b5c..915b7778 100644 --- a/bot.py +++ b/bot.py @@ -5,9 +5,10 @@ from nonebot.adapters.dodo import Adapter as DoDoAdapter from nonebot.adapters.kaiheila import Adapter as KaiheilaAdapter from nonebot.adapters.onebot.v11 import Adapter as OneBotV11Adapter +nonebot.init() + from zhenxun.services.db_context import disconnect, init -nonebot.init() driver = nonebot.get_driver() driver.register_adapter(OneBotV11Adapter) driver.register_adapter(KaiheilaAdapter) @@ -18,7 +19,7 @@ driver.register_adapter(DoDoAdapter) driver.on_startup(init) driver.on_shutdown(disconnect) -nonebot.load_builtin_plugins("echo") # 内置插件 +# nonebot.load_builtin_plugins("echo") nonebot.load_plugins("zhenxun/builtin_plugins") nonebot.load_plugins("zhenxun/plugins") diff --git a/resources/template/sign/main.css b/resources/template/sign/main.css index 799f5d2b..2667c87d 100644 --- a/resources/template/sign/main.css +++ b/resources/template/sign/main.css @@ -78,6 +78,10 @@ body { margin-top: 43px; margin-left: 30px; font-size: 47px; + height: 57px; + align-items: center; + justify-content: center; + display: flex } .uid { diff --git a/resources/template/sign/main.html b/resources/template/sign/main.html index 74d24fd0..10c3d40e 100644 --- a/resources/template/sign/main.html +++ b/resources/template/sign/main.html @@ -18,7 +18,7 @@
-

{{data.name}}

+

{{data.name}}

UID:{{data.uid}}

@@ -30,7 +30,7 @@

累计签到{{data.sign_count}}天

-

真寻说: {{data.message}}

+

{{data.message}}

@@ -58,7 +58,7 @@

好感度等级: {{data.level}}

-

小真寻对你的态度: {{data.attitude}}

+

{{data.attitude}}

距离升级还差{{data.interpolation}}好感度

diff --git a/zhenxun/builtin_plugins/admin/group_member_update/__init__.py b/zhenxun/builtin_plugins/admin/group_member_update/__init__.py index 437b3aa9..2c9fbd21 100644 --- a/zhenxun/builtin_plugins/admin/group_member_update/__init__.py +++ b/zhenxun/builtin_plugins/admin/group_member_update/__init__.py @@ -7,7 +7,7 @@ from nonebot_plugin_alconna import Alconna, Arparma, on_alconna from nonebot_plugin_apscheduler import scheduler from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType @@ -62,7 +62,7 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent): if str(event.user_id) == bot.self_id: await MemberUpdateManage.update(bot, str(event.group_id)) logger.info( - f"{NICKNAME}加入群聊更新群组信息", + f"{BotConfig.self_nickname}加入群聊更新群组信息", "更新群组成员列表", session=event.user_id, group_id=event.group_id, diff --git a/zhenxun/builtin_plugins/auto_update/_data_source.py b/zhenxun/builtin_plugins/auto_update/_data_source.py index 351ae76e..6d93255c 100644 --- a/zhenxun/builtin_plugins/auto_update/_data_source.py +++ b/zhenxun/builtin_plugins/auto_update/_data_source.py @@ -1,8 +1,8 @@ import os import shutil +import subprocess import tarfile import zipfile -import subprocess from pathlib import Path from nonebot.adapters import Bot @@ -21,24 +21,34 @@ from .config import ( MAIN_URL, PYPROJECT_FILE, PYPROJECT_LOCK_FILE, - REQ_TXT_FILE, RELEASE_URL, REPLACE_FOLDERS, + REQ_TXT_FILE, TMP_PATH, VERSION_FILE, ) + def install_requirement(): requirement_path = (Path() / "requirements.txt").absolute() - + if not requirement_path.exists(): - logger.debug(f"没有找到zhenxun的requirement.txt,目标路径为{requirement_path}", "插件管理") + logger.debug( + f"没有找到zhenxun的requirement.txt,目标路径为{requirement_path}", "插件管理" + ) return try: - result = subprocess.run(["pip", "install", "-r", str(requirement_path)], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + result = subprocess.run( + ["pip", "install", "-r", str(requirement_path)], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) logger.debug(f"成功安装真寻依赖,日志:\n{result.stdout}", "插件管理") except subprocess.CalledProcessError as e: - logger.error(f"安装真寻依赖失败,错误:\n{e.stderr}") + logger.error(f"安装真寻依赖失败,错误:\n{e.stderr}", "插件管理", e=e) + @run_sync def _file_handle(latest_version: str | None): @@ -120,6 +130,7 @@ def _file_handle(latest_version: str | None): f.write(f"__version__: {latest_version}") install_requirement() + class UpdateManage: @classmethod diff --git a/zhenxun/builtin_plugins/auto_update/config.py b/zhenxun/builtin_plugins/auto_update/config.py index be106593..db6c880c 100644 --- a/zhenxun/builtin_plugins/auto_update/config.py +++ b/zhenxun/builtin_plugins/auto_update/config.py @@ -22,4 +22,11 @@ BACKUP_PATH = Path() / "backup" DOWNLOAD_GZ_FILE = TMP_PATH / "download_latest_file.tar.gz" DOWNLOAD_ZIP_FILE = TMP_PATH / "download_latest_file.zip" -REPLACE_FOLDERS = ["builtin_plugins", "plugins", "services", "utils", "models"] +REPLACE_FOLDERS = [ + "builtin_plugins", + "plugins", + "services", + "utils", + "models", + "configs", +] diff --git a/zhenxun/builtin_plugins/nickname.py b/zhenxun/builtin_plugins/nickname.py index f5cce1fb..60779e8b 100644 --- a/zhenxun/builtin_plugins/nickname.py +++ b/zhenxun/builtin_plugins/nickname.py @@ -10,7 +10,7 @@ from nonebot_plugin_alconna import Alconna, Option, on_alconna, store_true from nonebot_plugin_session import EventSession from nonebot_plugin_userinfo import EventUserInfo, UserInfo -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.models.ban_console import BanConsole from zhenxun.models.friend_user import FriendUser @@ -24,11 +24,11 @@ __plugin_meta__ = PluginMetadata( name="昵称系统", description="区区昵称,才不想叫呢!", usage=f""" - 个人昵称,将替换{NICKNAME}称呼你的名称,群聊 与 私聊 昵称相互独立,全局昵称设置将更改您目前所有群聊中及私聊的昵称 + 个人昵称,将替换{BotConfig.self_nickname}称呼你的名称,群聊 与 私聊 昵称相互独立,全局昵称设置将更改您目前所有群聊中及私聊的昵称 指令: 以后叫我 [昵称]: 设置当前群聊/私聊的昵称 全局昵称设置 [昵称]: 设置当前所有群聊和私聊的昵称 - {NICKNAME}我是谁 + {BotConfig.self_nickname}我是谁 """.strip(), extra=PluginExtraData( author="HibiKier", @@ -86,25 +86,25 @@ _matcher.shortcut( CALL_NAME = [ "好啦好啦,我知道啦,{},以后就这么叫你吧", - f"嗯嗯,{NICKNAME}" + "记住你的昵称了哦,{}", + f"嗯嗯,{BotConfig.self_nickname}" + "记住你的昵称了哦,{}", "好突然,突然要叫你昵称什么的...{}..", - f"{NICKNAME}" + "会好好记住{}的,放心吧", + f"{BotConfig.self_nickname}" + "会好好记住{}的,放心吧", "好..好.,那窝以后就叫你{}了.", ] REMIND = [ "我肯定记得你啊,你是{}啊", "我不会忘记你的,你也不要忘记我!{}", - f"哼哼,{NICKNAME}" + "记忆力可是很好的,{}", + f"哼哼,{BotConfig.self_nickname}" + "记忆力可是很好的,{}", "嗯?你是失忆了嘛...{}..", - f"不要小看{NICKNAME}" + "的记忆力啊!笨蛋{}!QAQ", + f"不要小看{BotConfig.self_nickname}" + "的记忆力啊!笨蛋{}!QAQ", "哎?{}..怎么了吗..突然这样问..", ] CANCEL = [ - f"呜..{NICKNAME}" + "睡一觉就会忘记的..和梦一样..{}", + f"呜..{BotConfig.self_nickname}" + "睡一觉就会忘记的..和梦一样..{}", "窝知道了..{}..", - f"是{NICKNAME}" + "哪里做的不好嘛..好吧..晚安{}", + f"是{BotConfig.self_nickname}" + "哪里做的不好嘛..好吧..晚安{}", "呃,{},下次我绝对绝对绝对不会再忘记你!", "可..可恶!{}!太可恶了!呜", ] @@ -152,9 +152,9 @@ def CheckNickname(): logger.debug( "昵称设置禁止字符: [{word}]", "昵称设置", session=session ) - await MessageUtils.build_message(f"字符 [{x}] 为禁止字符!").finish( - at_sender=True - ) + await MessageUtils.build_message( + f"字符 [{word}] 为禁止字符!" + ).finish(at_sender=True) return Depends(dependency) diff --git a/zhenxun/builtin_plugins/platform/qq/group_handle.py b/zhenxun/builtin_plugins/platform/qq/group_handle.py index 8fab7ded..d2f851e2 100644 --- a/zhenxun/builtin_plugins/platform/qq/group_handle.py +++ b/zhenxun/builtin_plugins/platform/qq/group_handle.py @@ -18,7 +18,7 @@ from nonebot.adapters.onebot.v12 import ( from nonebot.plugin import PluginMetadata from nonebot_plugin_alconna import At -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task from zhenxun.models.fg_request import FgRequest @@ -44,7 +44,7 @@ __plugin_meta__ = PluginMetadata( RegisterConfig( module="invite_manager", key="message", - value=f"请不要未经同意就拉{NICKNAME}入群!告辞!", + value=f"请不要未经同意就拉{BotConfig.self_nickname}入群!告辞!", help="强制拉群后进群回复的内容", ), RegisterConfig( @@ -88,8 +88,6 @@ __plugin_meta__ = PluginMetadata( ) -superuser = nonebot.get_driver().config.platform_superusers["qq"][0] - base_config = Config.get("invite_manager") @@ -108,6 +106,7 @@ add_group = on_request(priority=1, block=False) @group_increase_handle.handle() async def _(bot: Bot, event: GroupIncreaseNoticeEvent | GroupMemberIncreaseEvent): + superuser = BotConfig.get_superuser("qq") user_id = str(event.user_id) group_id = str(event.group_id) if user_id == bot.self_id: diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index 5555bdb5..d8372008 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -1,6 +1,7 @@ +import os import shutil -from pathlib import Path import subprocess +from pathlib import Path import nonebot import ujson as json @@ -89,15 +90,27 @@ def install_requirement(plugin_path: Path): requirement_path = plugin_path / "requirement.txt" if not requirement_path.exists(): - logger.debug(f"No requirement.txt found for plugin: {plugin_path.name}", "插件管理") + logger.debug( + f"No requirement.txt found for plugin: {plugin_path.name}", "插件管理" + ) return try: - result = subprocess.run(["pip", "install", "-r", str(requirement_path)], - check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) - logger.debug(f"Successfully installed dependencies for plugin: {plugin_path.name}. Output:\n{result.stdout}", "插件管理") + result = subprocess.run( + ["pip", "install", "-r", str(requirement_path)], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + logger.debug( + f"Successfully installed dependencies for plugin: {plugin_path.name}. Output:\n{result.stdout}", + "插件管理", + ) except subprocess.CalledProcessError as e: - logger.error(f"Failed to install dependencies for plugin: {plugin_path.name}. Error:\n{e.stderr}") + logger.error( + f"Failed to install dependencies for plugin: {plugin_path.name}. Error:\n{e.stderr}" + ) class ShopManage: diff --git a/zhenxun/builtin_plugins/record_request.py b/zhenxun/builtin_plugins/record_request.py index e894d61e..8a837e7a 100644 --- a/zhenxun/builtin_plugins/record_request.py +++ b/zhenxun/builtin_plugins/record_request.py @@ -11,7 +11,7 @@ from nonebot.plugin import PluginMetadata from nonebot_plugin_apscheduler import scheduler from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.models.fg_request import FgRequest from zhenxun.models.friend_user import FriendUser @@ -69,7 +69,7 @@ _t = on_message(priority=999, block=False, rule=lambda: False) @friend_req.handle() async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSession): - superuser = nonebot.get_driver().config.platform_superusers["qq"][0] + superuser = BotConfig.get_superuser("qq") if event.user_id and Timer.check(event.user_id): logger.debug(f"收录好友请求...", "好友请求", target=event.user_id) user = await bot.get_stranger_info(user_id=event.user_id) @@ -78,7 +78,6 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi # age = str(user["age"]) comment = event.comment if superuser: - superuser = int(superuser) await MessageUtils.build_message( f"*****一份好友申请*****\n" f"昵称:{nickname}({event.user_id})\n" @@ -118,7 +117,7 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi @group_req.handle() async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSession): - superuser = nonebot.get_driver().config.platform_superusers["qq"][0] + superuser = BotConfig.get_superuser("qq") # 邀请 if event.sub_type == "invite": if str(event.user_id) in bot.config.superusers: @@ -165,15 +164,14 @@ async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSessio target=event.group_id, ) nickname = await FriendUser.get_user_name(str(event.user_id)) - await Text( - f"*****一份入群申请*****\n" - f"申请人:{nickname}({event.user_id})\n" - f"群聊:{event.group_id}\n" - f"邀请日期:{datetime.now().replace(microsecond=0)}" - ).send_to(target=TargetQQPrivate(user_id=superuser), bot=bot) + await PlatformUtils.send_superuser( + bot, + f"*****一份入群申请*****\n申请人:{nickname}({event.user_id})\n群聊:{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}", + superuser, + ) await bot.send_private_msg( user_id=event.user_id, - message=f"想要邀请我偷偷入群嘛~已经提醒{NICKNAME}的管理员大人了\n" + message=f"想要邀请我偷偷入群嘛~已经提醒{BotConfig.self_nickname}的管理员大人了\n" "请确保已经群主或群管理沟通过!\n" "等待管理员处理吧!", ) diff --git a/zhenxun/builtin_plugins/restart/__init__.py b/zhenxun/builtin_plugins/restart/__init__.py index eed6fa17..3c16091f 100644 --- a/zhenxun/builtin_plugins/restart/__init__.py +++ b/zhenxun/builtin_plugins/restart/__init__.py @@ -11,7 +11,7 @@ from nonebot.plugin import PluginMetadata from nonebot.rule import to_me from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType @@ -48,11 +48,13 @@ RESTART_FILE = Path() / "restart.sh" @_matcher.got( "flag", - prompt=f"确定是否重启{NICKNAME}?确定请回复[是|好|确定](重启失败咱们将失去联系,请谨慎!)", + prompt=f"确定是否重启{BotConfig.self_nickname}?确定请回复[是|好|确定](重启失败咱们将失去联系,请谨慎!)", ) async def _(bot: Bot, session: EventSession, flag: str = ArgStr("flag")): if flag.lower() in ["true", "是", "好", "确定", "确定是"]: - await MessageUtils.build_message(f"开始重启{NICKNAME}..请稍等...").send() + await MessageUtils.build_message( + f"开始重启{BotConfig.self_nickname}..请稍等..." + ).send() with open(RESTART_MARK, "w", encoding="utf8") as f: f.write(f"{bot.self_id} {session.id1}") logger.info("开始重启真寻...", "重启", session=session) @@ -90,7 +92,7 @@ async def _(bot: Bot): bot_id, session_id = f.read().split() if bot := nonebot.get_bot(bot_id): if target := PlatformUtils.get_target(bot, session_id): - await MessageUtils.build_message(f"{NICKNAME}已成功重启!").send( - target, bot=bot - ) + await MessageUtils.build_message( + f"{BotConfig.self_nickname}已成功重启!" + ).send(target, bot=bot) RESTART_MARK.unlink() diff --git a/zhenxun/builtin_plugins/scheduler/morning.py b/zhenxun/builtin_plugins/scheduler/morning.py index 3608d318..dbb3536a 100644 --- a/zhenxun/builtin_plugins/scheduler/morning.py +++ b/zhenxun/builtin_plugins/scheduler/morning.py @@ -2,7 +2,7 @@ import nonebot from nonebot.plugin import PluginMetadata from nonebot_plugin_apscheduler import scheduler -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.path_config import IMAGE_PATH from zhenxun.configs.utils import PluginExtraData, Task from zhenxun.models.task_info import TaskInfo @@ -60,7 +60,10 @@ async def _(): ) async def _(): message = MessageUtils.build_message( - [f"{NICKNAME}要睡觉了,你们也要早点睡呀", IMAGE_PATH / "zhenxun" / "sleep.jpg"] + [ + f"{BotConfig.self_nickname}要睡觉了,你们也要早点睡呀", + IMAGE_PATH / "zhenxun" / "sleep.jpg", + ] ) await broadcast_group( message, diff --git a/zhenxun/builtin_plugins/sign_in/utils.py b/zhenxun/builtin_plugins/sign_in/utils.py index 76b4418f..b08a09d5 100644 --- a/zhenxun/builtin_plugins/sign_in/utils.py +++ b/zhenxun/builtin_plugins/sign_in/utils.py @@ -9,7 +9,7 @@ import pytz from nonebot.drivers import Driver from nonebot_plugin_htmlrender import template_to_pic -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import IMAGE_PATH, TEMPLATE_PATH from zhenxun.models.sign_log import SignLog from zhenxun.models.sign_user import SignUser @@ -150,7 +150,9 @@ async def _generate_card( level = "8" interpolation = 0 await info_img.text((0, 0), f"· 好感度等级:{level} [{lik2relation[level]}]") - await info_img.text((0, 20), f"· {NICKNAME}对你的态度:{level2attitude[level]}") + await info_img.text( + (0, 20), f"· {BotConfig.self_nickname}对你的态度:{level2attitude[level]}" + ) await info_img.text((0, 40), f"· 距离升级还差 {interpolation:.2f} 好感度") bar_bk = BuildImage(220, 20, background=SIGN_RESOURCE_PATH / "bar_white.png") @@ -214,7 +216,9 @@ async def _generate_card( f"好感度:{user.impression:.2f}", size=30 ) watermark = await BuildImage.build_text_image( - f"{NICKNAME}@{datetime.now().year}", size=15, font_color=(155, 155, 155) + f"{BotConfig.self_nickname}@{datetime.now().year}", + size=15, + font_color=(155, 155, 155), ) today_data = BuildImage(300, 300, color=(255, 255, 255, 0), font_size=20) if is_card_view: @@ -390,13 +394,13 @@ async def _generate_html_card( else: uid = "XXXX XXXX XXXX" level, next_impression, previous_impression = get_level_and_next_impression( - impression + float(user.impression) ) interpolation = next_impression - impression if level == "9": level = "8" interpolation = 0 - message = f"{NICKNAME}希望你天天开心!" + message = f"{BotConfig.self_nickname}希望你开心!" hour = datetime.now().hour if hour > 6 and hour < 10: message = random.choice(MORNING_MESSAGE) @@ -416,19 +420,22 @@ async def _generate_html_card( "name": nickname, "uid": uid, "sign_count": f"{user.sign_count}", - "message": message, + "message": f"{BotConfig.self_nickname}说: {message}", "cur_impression": f"{user.impression:.2f}", "impression": f"好感度+{_impression}", "gold": f"金币+{gold}", "gift": gift, "level": f"{level} [{lik2relation[level]}]", - "attitude": level2attitude[level], + "attitude": f"{BotConfig.self_nickname}对你的态度: {level2attitude[level]}", "interpolation": f"{interpolation:.2f}", "heart2": [1 for _ in range(int(level))], "heart1": [1 for _ in range(9 - int(level))], - "process": process, + "process": process * 100, "date": str(now.replace(microsecond=0)), + "font_size": 45, } + if len(nickname) > 6: + data["font_size"] = 27 _type = "sign" if is_card_view: _type = "view" diff --git a/zhenxun/builtin_plugins/superuser/group_manage.py b/zhenxun/builtin_plugins/superuser/group_manage.py index 41044f94..f8e282dd 100644 --- a/zhenxun/builtin_plugins/superuser/group_manage.py +++ b/zhenxun/builtin_plugins/superuser/group_manage.py @@ -16,7 +16,7 @@ from nonebot_plugin_alconna import ( ) from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.models.group_console import GroupConsole from zhenxun.services.log import logger @@ -191,11 +191,16 @@ async def _(bot: Bot, session: EventSession, arparma: Arparma, group_id: int): group_list = [g["group_id"] for g in await bot.get_group_list()] if group_id not in group_list: logger.debug("群组不存在", "退群", session=session, target=group_id) - await MessageUtils.build_message(f"{NICKNAME}未在该群组中...").finish() + await MessageUtils.build_message( + f"{BotConfig.self_nickname}未在该群组中..." + ).finish() try: await bot.set_group_leave(group_id=group_id) logger.info( - f"{NICKNAME}退出群组成功", "退群", session=session, target=group_id + f"{BotConfig.self_nickname}退出群组成功", + "退群", + session=session, + target=group_id, ) await MessageUtils.build_message(f"退出群组 {group_id} 成功!").send() await GroupConsole.filter(group_id=group_id).delete() diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py b/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py index 2f502762..902b189b 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py @@ -3,7 +3,7 @@ from fastapi import APIRouter from nonebot.adapters.onebot.v11 import ActionFailed from tortoise.functions import Count -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.models.ban_console import BanConsole from zhenxun.models.chat_history import ChatHistory from zhenxun.models.fg_request import FgRequest @@ -133,7 +133,7 @@ async def _() -> Result: "friend_count": f_count, "group_count": g_count, } - return Result.ok(data, f"{NICKNAME}带来了最新的数据!") + return Result.ok(data, f"{BotConfig.self_nickname}带来了最新的数据!") @router.get( @@ -177,7 +177,7 @@ async def _() -> Result: except Exception as e: logger.error("调用API错误", "/get_request", e=e) return Result.fail(f"{type(e)}: {e}") - return Result.ok(req_result, f"{NICKNAME}带来了最新的数据!") + return Result.ok(req_result, f"{BotConfig.self_nickname}带来了最新的数据!") @router.post( @@ -234,9 +234,7 @@ async def _(parma: HandleRequest) -> Result: else: await GroupConsole.update_or_create( group_id=req.group_id, - defaults={ - "group_flag": 1, - }, + defaults={"group_flag": 1}, ) else: return Result.warning_("未找到此Id请求...") diff --git a/zhenxun/builtin_plugins/web_ui/public/__init__.py b/zhenxun/builtin_plugins/web_ui/public/__init__.py index 144dcda8..b194ffe7 100644 --- a/zhenxun/builtin_plugins/web_ui/public/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/public/__init__.py @@ -1,6 +1,6 @@ +from fastapi import APIRouter, FastAPI from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles -from fastapi import APIRouter, FastAPI from zhenxun.services.log import logger @@ -32,4 +32,4 @@ async def init_public(app: FastAPI): name=f"public_{pathname}", ) except Exception as e: - logger.error(f"初始化 web ui assets 失败 e: {e}", "Web UI assets") \ No newline at end of file + logger.error(f"初始化 web ui assets 失败", "Web UI assets", e=e) diff --git a/zhenxun/builtin_plugins/web_ui/public/data_source.py b/zhenxun/builtin_plugins/web_ui/public/data_source.py index 65fe5d3c..eb04d297 100644 --- a/zhenxun/builtin_plugins/web_ui/public/data_source.py +++ b/zhenxun/builtin_plugins/web_ui/public/data_source.py @@ -1,19 +1,14 @@ import os import shutil import zipfile - from pathlib import Path + from nonebot.utils import run_sync + from zhenxun.services.log import logger from zhenxun.utils.http_utils import AsyncHttpx -from .config import ( - WEBUI_ASSETS_DOWNLOAD_URL, - WEBUI_DATA_PATH, - TMP_PATH, - COMMAND_NAME, - PUBLIC_PATH, -) +from .config import COMMAND_NAME, PUBLIC_PATH, TMP_PATH, WEBUI_ASSETS_DOWNLOAD_URL async def update_webui_assets(): @@ -22,13 +17,8 @@ async def update_webui_assets(): WEBUI_ASSETS_DOWNLOAD_URL, webui_assets_path, follow_redirects=True ): logger.info("下载 webui_assets 成功...", COMMAND_NAME) - else: - logger.error("下载 webui_assets 失败...", COMMAND_NAME) - - await _file_handle(webui_assets_path) - - logger.info("更新 webui_assets 成功...", COMMAND_NAME) - return True + return await _file_handle(webui_assets_path) + raise Exception("下载 webui_assets 失败", COMMAND_NAME) @run_sync @@ -39,8 +29,7 @@ def _file_handle(webui_assets_path: Path): tf.extractall(TMP_PATH) logger.debug("解压 webui_assets 成功...", COMMAND_NAME) else: - logger.error("解压 webui_assets 失败...", COMMAND_NAME) - return + raise Exception("解压 webui_assets 失败,文件不存在...", COMMAND_NAME) download_file_path = ( TMP_PATH / [x for x in os.listdir(TMP_PATH) if (TMP_PATH / x).is_dir()][0] ) diff --git a/zhenxun/configs/config.py b/zhenxun/configs/config.py index 0206c131..56f0fdb9 100644 --- a/zhenxun/configs/config.py +++ b/zhenxun/configs/config.py @@ -1,35 +1,38 @@ -import platform +import random from pathlib import Path +import nonebot +from pydantic import BaseModel + from .utils import ConfigsManager -if platform.system() == "Linux": - import os - hostip = ( - os.popen("cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'") - .read() - .replace("\n", "") - ) +class BotSetting(BaseModel): + self_nickname: str = "" + """回复时NICKNAME""" + system_proxy: str | None = None + """系统代理""" + db_url: str = "" + """数据库链接""" + platform_superusers: dict[str, list[str]] = {} + """平台超级用户""" -# 回复消息名称 -NICKNAME: str = "小真寻" + def get_superuser(self, platform: str) -> str: + """获取超级用户 -# 数据库(必要) -# 如果填写了bind就不需要再填写后面的字段了#) -# 示例:"bind": "postgres://user:password@127.0.0.1:5432/database" -bind: str = "" -sql_name: str = "postgres" -user: str = "" # 数据用户名 -password: str = "" # 数据库密码 -address: str = "" # 数据库地址 -port: str = "" # 数据库端口 -database: str = "" # 数据库名称 + 参数: + platform: 对应平台 -# 代理,例如 "http://127.0.0.1:7890" -# 如果是WLS 可以 f"http://{hostip}:7890" 使用寄主机的代理 -SYSTEM_PROXY: str | None = "http://127.0.0.1:7890" # 全局代理 + 返回: + str | None: 超级用户id + """ + if self.platform_superusers: + if platform_superuser := self.platform_superusers.get(platform): + return random.choice(platform_superuser) + return "" Config = ConfigsManager(Path() / "data" / "configs" / "plugins2config.yaml") + +BotConfig = nonebot.get_plugin_config(BotSetting) diff --git a/zhenxun/plugins/ai/__init__.py b/zhenxun/plugins/ai/__init__.py index 28e15354..bc5fd540 100644 --- a/zhenxun/plugins/ai/__init__.py +++ b/zhenxun/plugins/ai/__init__.py @@ -6,7 +6,7 @@ from nonebot.rule import to_me from nonebot_plugin_alconna import UniMsg from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.models.friend_user import FriendUser from zhenxun.models.group_member_info import GroupInfoUser @@ -20,7 +20,7 @@ __plugin_meta__ = PluginMetadata( name="AI", description="屑Ai", usage=f""" - 与{NICKNAME}普普通通的对话吧! + 与{BotConfig.self_nickname}普普通通的对话吧! """.strip(), extra=PluginExtraData( author="HibiKier", diff --git a/zhenxun/plugins/ai/data_source.py b/zhenxun/plugins/ai/data_source.py index 555f3885..8c813c7d 100644 --- a/zhenxun/plugins/ai/data_source.py +++ b/zhenxun/plugins/ai/data_source.py @@ -5,7 +5,7 @@ import re import ujson as json from nonebot_plugin_alconna import UniMessage, UniMsg -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH from zhenxun.services.log import logger from zhenxun.utils.http_utils import AsyncHttpx @@ -154,9 +154,9 @@ async def xie_ai(text: str) -> str: if data["result"] == 0: content = data["content"] if "菲菲" in content: - content = content.replace("菲菲", NICKNAME) + content = content.replace("菲菲", BotConfig.self_nickname) if "艳儿" in content: - content = content.replace("艳儿", NICKNAME) + content = content.replace("艳儿", BotConfig.self_nickname) if "公众号" in content: content = "" if "{br}" in content: @@ -188,7 +188,7 @@ def hello() -> UniMessage: ( "哦豁?!", "你好!Ov<", - f"库库库,呼唤{NICKNAME}做什么呢", + f"库库库,呼唤{BotConfig.self_nickname}做什么呢", "我在呢!", "呼呼,叫俺干嘛", ) @@ -206,7 +206,7 @@ def no_result() -> UniMessage: random.choice( [ "你在说啥子?", - f"纯洁的{NICKNAME}没听懂", + f"纯洁的{BotConfig.self_nickname}没听懂", "下次再告诉你(下次一定)", "你觉得我听懂了吗?嗯?", "我!不!知!道!", diff --git a/zhenxun/plugins/ai/utils.py b/zhenxun/plugins/ai/utils.py index 946bc234..e22d1fde 100644 --- a/zhenxun/plugins/ai/utils.py +++ b/zhenxun/plugins/ai/utils.py @@ -1,7 +1,7 @@ import random import time -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.models.ban_console import BanConsole @@ -15,14 +15,14 @@ class AiMessageManager: "你是只会说这一句话吗?", "[*],你发我也发!", "[uname],[*]", - f"救命!有笨蛋一直给{NICKNAME}发一样的话!", + f"救命!有笨蛋一直给{BotConfig.self_nickname}发一样的话!", "这句话你已经给我发了{}次了,再发就生气!", ] self._repeat_message = [ - f"请不要学{NICKNAME}说话", - f"为什么要一直学{NICKNAME}说话?", + f"请不要学{BotConfig.self_nickname}说话", + f"为什么要一直学{BotConfig.self_nickname}说话?", "你再学!你再学我就生气了!", - f"呜呜,你是想欺负{NICKNAME}嘛..", + f"呜呜,你是想欺负{BotConfig.self_nickname}嘛..", "[uname]不要再学我说话了!", "再学我说话,我就把你拉进黑名单(生气", "你再学![uname]是个笨蛋!", diff --git a/zhenxun/plugins/black_word/black_word.py b/zhenxun/plugins/black_word/black_word.py index 8b819c6a..8164851f 100644 --- a/zhenxun/plugins/black_word/black_word.py +++ b/zhenxun/plugins/black_word/black_word.py @@ -7,7 +7,7 @@ from nonebot.plugin import PluginMetadata from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType @@ -79,7 +79,7 @@ __plugin_meta__ = PluginMetadata( ), RegisterConfig( key="WARNING_RESULT", - value=f"请注意对{NICKNAME}的发言内容", + value=f"请注意对{BotConfig.self_nickname}的发言内容", help="口头警告内容", default_value=None, ), @@ -202,7 +202,7 @@ async def _(): 关于敏感词: - 记住不要骂{NICKNAME}就对了! + 记住不要骂{BotConfig.self_nickname}就对了! """.strip() max_width = 0 for m in text.split("\n"): diff --git a/zhenxun/plugins/dialogue/__init__.py b/zhenxun/plugins/dialogue/__init__.py index 5524cf9a..a99bc055 100644 --- a/zhenxun/plugins/dialogue/__init__.py +++ b/zhenxun/plugins/dialogue/__init__.py @@ -8,6 +8,7 @@ from nonebot_plugin_alconna import Target, Text, UniMsg from nonebot_plugin_session import EventSession from nonebot_plugin_userinfo import EventUserInfo, UserInfo +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.models.group_console import GroupConsole from zhenxun.services.log import logger @@ -58,14 +59,10 @@ async def _( if session.id1: message[0] = Text(str(message[0]).replace("滴滴滴-", "", 1)) platform = PlatformUtils.get_platform(bot) + superuser_id = None try: - superuser_id = config.platform_superusers["qq"][0] - if platform == "dodo": - superuser_id = config.platform_superusers["dodo"][0] - if platform == "kaiheila": - superuser_id = config.platform_superusers["kaiheila"][0] - if platform == "discord": - superuser_id = config.platform_superusers["discord"][0] + if platform: + superuser_id = BotConfig.get_superuser(platform) except IndexError: await MessageUtils.build_message("管理员失联啦...").finish() if not superuser_id: diff --git a/zhenxun/plugins/epic/data_source.py b/zhenxun/plugins/epic/data_source.py index 87bc5a63..583221fe 100644 --- a/zhenxun/plugins/epic/data_source.py +++ b/zhenxun/plugins/epic/data_source.py @@ -5,9 +5,7 @@ from nonebot.adapters.onebot.v11 import Bot as v11Bot from nonebot.adapters.onebot.v12 import Bot as v12Bot from nonebot_plugin_alconna import Image, UniMessage -from zhenxun.configs.config import NICKNAME from zhenxun.services.log import logger -from zhenxun.utils._build_image import BuildImage from zhenxun.utils.http_utils import AsyncHttpx from zhenxun.utils.message import MessageUtils diff --git a/zhenxun/plugins/fudu.py b/zhenxun/plugins/fudu.py index b81a0747..bf4555f4 100644 --- a/zhenxun/plugins/fudu.py +++ b/zhenxun/plugins/fudu.py @@ -7,7 +7,7 @@ from nonebot_plugin_alconna import Image as alcImg from nonebot_plugin_alconna import UniMsg from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import TEMP_PATH from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task from zhenxun.models.task_info import TaskInfo @@ -112,7 +112,7 @@ async def _(message: UniMsg, event: Event, session: EventSession): image_list.append(m.url) if not plain_text and not image_list: return - if plain_text and plain_text.startswith(f"@可爱的{NICKNAME}"): + if plain_text and plain_text.startswith(f"@可爱的{BotConfig.self_nickname}"): await MessageUtils.build_message("复制粘贴的虚空艾特?").send(reply_to=True) if image_list: img_hash = await get_download_image_hash(image_list[0], group_id) diff --git a/zhenxun/plugins/gold_redbag/__init__.py b/zhenxun/plugins/gold_redbag/__init__.py index f46c6639..7e6a1c28 100644 --- a/zhenxun/plugins/gold_redbag/__init__.py +++ b/zhenxun/plugins/gold_redbag/__init__.py @@ -12,7 +12,7 @@ from nonebot_plugin_alconna import Alconna, Args, Arparma, At, Match, Option, on from nonebot_plugin_apscheduler import scheduler from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig from zhenxun.services.log import logger from zhenxun.utils.depends import GetConfig, UserName @@ -298,7 +298,7 @@ async def _( try: await MessageUtils.build_message( [ - f"{NICKNAME}的节日红包过时了,一共开启了 " + f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 " f"{len(festive_red_bag.open_user)}" f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n", rank_image, @@ -314,10 +314,10 @@ async def _( except JobLookupError: pass await group_red_bag.add_red_bag( - f"{NICKNAME}的红包", + f"{BotConfig.self_nickname}的红包", amount, num, - NICKNAME, + BotConfig.self_nickname, FESTIVE_KEY, _uuid, platform=session.platform, @@ -335,7 +335,7 @@ async def _( ) await MessageUtils.build_message( [ - f"{NICKNAME}发起了节日金币红包\n金额: {amount}\n数量: {num}\n", + f"{BotConfig.self_nickname}发起了节日金币红包\n金额: {amount}\n数量: {num}\n", image_result, ] ).send(target=target, bot=bot) diff --git a/zhenxun/plugins/gold_redbag/data_source.py b/zhenxun/plugins/gold_redbag/data_source.py index ec903100..ecc7dd38 100644 --- a/zhenxun/plugins/gold_redbag/data_source.py +++ b/zhenxun/plugins/gold_redbag/data_source.py @@ -8,7 +8,7 @@ from nonebot.adapters import Bot from nonebot.exception import ActionFailed from nonebot_plugin_alconna import UniMessage -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import IMAGE_PATH from zhenxun.models.user_console import UserConsole from zhenxun.utils.image_utils import BuildImage @@ -58,7 +58,7 @@ class RedBagManager: try: await MessageUtils.build_message( [ - f"{NICKNAME}的节日红包过时了,一共开启了 " + f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 " f"{len(red_bag.open_user)}" f" 个红包,共 {sum(red_bag.open_user.values())} 金币\n", rank_image, @@ -92,7 +92,7 @@ class RedBagManager: rank_image = await festive_red_bag.build_amount_rank(rank_num, platform) return MessageUtils.build_message( [ - f"{NICKNAME}的节日红包过时了,一共开启了 " + f"{BotConfig.self_nickname}的节日红包过时了,一共开启了 " f"{len(festive_red_bag.open_user)}" f" 个红包,共 {sum(festive_red_bag.open_user.values())} 金币\n", rank_image, diff --git a/zhenxun/plugins/mute/mute_message.py b/zhenxun/plugins/mute/mute_message.py index ec655ccf..19e9326a 100644 --- a/zhenxun/plugins/mute/mute_message.py +++ b/zhenxun/plugins/mute/mute_message.py @@ -5,7 +5,7 @@ from nonebot_plugin_alconna import Image as alcImage from nonebot_plugin_alconna import UniMsg from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.models.ban_console import BanConsole from zhenxun.services.log import logger @@ -48,7 +48,7 @@ async def _(bot: Bot, session: EventSession, message: UniMsg): try: await PlatformUtils.ban_user(bot, session.id1, group_id, duration) await MessageUtils.build_message( - f"检测到恶意刷屏,{NICKNAME}要把你关进小黑屋!" + f"检测到恶意刷屏,{BotConfig.self_nickname}要把你关进小黑屋!" ).send(at_sender=True) mute_manage.reset(session.id1, group_id) logger.info(f"检测刷屏 被禁言 {duration} 分钟", "禁言检查", session=session) diff --git a/zhenxun/plugins/mute/mute_setting.py b/zhenxun/plugins/mute/mute_setting.py index f723f075..b7947ed6 100644 --- a/zhenxun/plugins/mute/mute_setting.py +++ b/zhenxun/plugins/mute/mute_setting.py @@ -2,7 +2,7 @@ from nonebot.plugin import PluginMetadata from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, Option, on_alconna from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType @@ -15,7 +15,7 @@ __plugin_meta__ = PluginMetadata( name="刷屏禁言", description="刷屏禁言相关操作", usage=""" - 刷屏禁言相关操作,需要 {NICKNAME} 有群管理员权限 + 刷屏禁言相关操作,需要 {BotConfig.self_nickname} 有群管理员权限 指令: 设置刷屏: 查看当前设置 -c [count]: 检测最大次数 diff --git a/zhenxun/plugins/roll.py b/zhenxun/plugins/roll.py index 7c953496..1c21421b 100644 --- a/zhenxun/plugins/roll.py +++ b/zhenxun/plugins/roll.py @@ -6,7 +6,7 @@ from nonebot.plugin import PluginMetadata from nonebot_plugin_alconna import UniMsg from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginExtraData from zhenxun.services.log import logger from zhenxun.utils.depends import UserName @@ -56,7 +56,7 @@ async def _( await MessageUtils.build_message( random.choice( [ - f"让{NICKNAME}看看是什么结果!答案是:‘{random_text}’", + f"让{BotConfig.self_nickname}看看是什么结果!答案是:‘{random_text}’", f"根据命运的指引,接下来{user_name} ‘{random_text}’ 会比较好", f"祈愿被回应了!是 ‘{random_text}’!", f"结束了,{user_name},命运之轮停在了 ‘{random_text}’!", diff --git a/zhenxun/plugins/russian/data_source.py b/zhenxun/plugins/russian/data_source.py index eb8381cb..73cdb078 100644 --- a/zhenxun/plugins/russian/data_source.py +++ b/zhenxun/plugins/russian/data_source.py @@ -8,7 +8,7 @@ from nonebot_plugin_alconna import At, UniMessage from nonebot_plugin_apscheduler import scheduler from pydantic import BaseModel -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.models.group_member_info import GroupInfoUser from zhenxun.models.user_console import UserConsole from zhenxun.utils.enum import GoldHandle @@ -278,7 +278,7 @@ class RussianManage: random.choice( [ f"不要打扰 {russian.player1[1]} 和 {russian.player2[1]} 的决斗啊!", - f"给我好好做好一个观众!不然{NICKNAME}就要生气了", + f"给我好好做好一个观众!不然{BotConfig.self_nickname}就要生气了", f"不要捣乱啊baka{uname}!", ] ) @@ -429,7 +429,7 @@ class RussianManage: f"\t累计败场:{loser.fail_count}\n" f"\t累计输掉金币:{loser.lose_money}\n" f"-------------------\n" - f"哼哼,{NICKNAME}从中收取了 {float(rand)}%({fee}金币) 作为手续费!\n" + f"哼哼,{BotConfig.self_nickname}从中收取了 {float(rand)}%({fee}金币) 作为手续费!\n" f"子弹排列:{russian.bullet_arr}", padding=10, color="#f9f6f2", diff --git a/zhenxun/plugins/search_buff_skin_price/__init__.py b/zhenxun/plugins/search_buff_skin_price/__init__.py index da224aaf..ca2a320f 100644 --- a/zhenxun/plugins/search_buff_skin_price/__init__.py +++ b/zhenxun/plugins/search_buff_skin_price/__init__.py @@ -4,7 +4,7 @@ from nonebot.rule import to_me from nonebot_plugin_alconna import Alconna, Args, Arparma, Match, on_alconna from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import BaseBlock, PluginExtraData, RegisterConfig from zhenxun.services.log import logger from zhenxun.utils.message import MessageUtils @@ -83,7 +83,7 @@ async def arg_handle( result, status_code = await get_price(name) except FileNotFoundError: await MessageUtils.build_message( - f'请先对{NICKNAME}说"设置cookie"来设置cookie!' + f'请先对{BotConfig.self_nickname}说"设置cookie"来设置cookie!' ).send(at_sender=True) if status_code in [996, 997, 998]: await MessageUtils.build_message(result).finish() diff --git a/zhenxun/plugins/send_setu_/send_setu/__init__.py b/zhenxun/plugins/send_setu_/send_setu/__init__.py index 3dab91f6..fea1ad41 100644 --- a/zhenxun/plugins/send_setu_/send_setu/__init__.py +++ b/zhenxun/plugins/send_setu_/send_setu/__init__.py @@ -16,7 +16,7 @@ from nonebot_plugin_alconna import ( ) from nonebot_plugin_session import EventSession -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.configs.utils import PluginCdBlock, PluginExtraData, RegisterConfig from zhenxun.models.sign_user import SignUser from zhenxun.models.user_console import UserConsole @@ -173,7 +173,7 @@ async def _( local_id: Match[int], ): _tags = tags.result.split("#") if tags.available else None - if _tags and NICKNAME in _tags: + if _tags and BotConfig.self_nickname in _tags: await MessageUtils.build_message( "咳咳咳,虽然我很可爱,但是我木有自己的色图~~~有的话记得发我一份呀" ).finish() diff --git a/zhenxun/plugins/send_setu_/send_setu/_data_source.py b/zhenxun/plugins/send_setu_/send_setu/_data_source.py index 6bac3d22..f7a15d32 100644 --- a/zhenxun/plugins/send_setu_/send_setu/_data_source.py +++ b/zhenxun/plugins/send_setu_/send_setu/_data_source.py @@ -5,7 +5,7 @@ from pathlib import Path from asyncpg import UniqueViolationError from nonebot_plugin_alconna import UniMessage -from zhenxun.configs.config import NICKNAME, Config +from zhenxun.configs.config import BotConfig, Config from zhenxun.configs.path_config import IMAGE_PATH, TEMP_PATH from zhenxun.services.log import logger from zhenxun.utils.http_utils import AsyncHttpx @@ -186,7 +186,7 @@ class SetuManage: IMAGE_PATH / "luoxiang" / random.choice(os.listdir(IMAGE_PATH / "luoxiang")), - f"\n(快向{NICKNAME}签到提升好感度吧!)", + f"\n(快向{BotConfig.self_nickname}签到提升好感度吧!)", ] ) return None diff --git a/zhenxun/services/db_context.py b/zhenxun/services/db_context.py index de8bfdcb..a39e7175 100644 --- a/zhenxun/services/db_context.py +++ b/zhenxun/services/db_context.py @@ -1,18 +1,9 @@ -import ujson as json from nonebot.utils import is_coroutine_callable from tortoise import Tortoise from tortoise.connection import connections from tortoise.models import Model as Model_ -from zhenxun.configs.config import ( - address, - bind, - database, - password, - port, - sql_name, - user, -) +from zhenxun.configs.config import BotConfig from zhenxun.configs.path_config import DATA_PATH from .log import logger @@ -27,7 +18,7 @@ class Model(Model_): 自动添加模块 Args: - Model_ (_type_): Model + Model_: Model """ def __init_subclass__(cls, **kwargs): @@ -38,38 +29,13 @@ class Model(Model_): async def init(): - 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数据库配置未填写...") - if not i_bind: - i_bind = f"{_sql_name}://{_user}:{_password}@{_address}:{_port}/{_database}" + if not BotConfig.db_url: + raise Exception(f"数据库配置为空,请在.env.dev中配置DB_URL...") try: await Tortoise.init( - db_url=i_bind, modules={"models": MODELS}, timezone="Asia/Shanghai" + db_url=BotConfig.db_url, + modules={"models": MODELS}, + timezone="Asia/Shanghai", ) if SCRIPT_METHOD: db = Tortoise.get_connection("default") diff --git a/zhenxun/utils/_image_template.py b/zhenxun/utils/_image_template.py index 399c054c..e989accc 100644 --- a/zhenxun/utils/_image_template.py +++ b/zhenxun/utils/_image_template.py @@ -182,15 +182,20 @@ class ImageTemplate: _temp["width"] = w build_data_list.append(_temp) column_image_list = [] + column_name_image_list: list[BuildImage] = [] + for i, data in enumerate(build_data_list): + column_name_image = await BuildImage.build_text_image( + column_name[i], font, 12, "#C8CCCF" + ) + column_name_image_list.append(column_name_image) + max_h = max([c.height for c in column_name_image_list]) for i, data in enumerate(build_data_list): width = data["width"] + padding * 2 height = (base_h + row_space) * (len(data["data"]) + 1) + padding * 2 background = BuildImage(width, height, (255, 255, 255)) - column_name_image = await BuildImage.build_text_image( - column_name[i], font, 12, "#C8CCCF" - ) + column_name_image = column_name_image_list[i] await background.paste(column_name_image, (0, 20), center_type="width") - cur_h = column_name_image.height + row_space + 20 + cur_h = max_h + row_space + 20 for item in data["data"]: style = RowStyle(font=font) if text_style: @@ -198,13 +203,15 @@ class ImageTemplate: if isinstance(item, tuple): """图片""" data, width, height = item + image_ = None if isinstance(data, Path): image_ = BuildImage(width, height, background=data) elif isinstance(data, bytes): image_ = BuildImage(width, height, background=BytesIO(data)) elif isinstance(data, BuildImage): image_ = data - await background.paste(image_, (padding, cur_h)) + if image_: + await background.paste(image_, (padding, cur_h)) else: await background.text( (padding, cur_h), diff --git a/zhenxun/utils/browser.py b/zhenxun/utils/browser.py index fccfa55e..ca2e7755 100644 --- a/zhenxun/utils/browser.py +++ b/zhenxun/utils/browser.py @@ -5,7 +5,7 @@ from nonebot import get_driver from playwright.__main__ import main from playwright.async_api import Browser, Playwright, async_playwright -from zhenxun.configs.config import SYSTEM_PROXY +from zhenxun.configs.config import BotConfig from zhenxun.services.log import logger driver = get_driver() @@ -45,12 +45,12 @@ def install(): os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = ( "https://npmmirror.com/mirrors/playwright/" ) - if SYSTEM_PROXY: - os.environ["HTTPS_PROXY"] = SYSTEM_PROXY + if BotConfig.system_proxy: + os.environ["HTTPS_PROXY"] = BotConfig.system_proxy def restore_env_variables(): os.environ.pop("PLAYWRIGHT_DOWNLOAD_HOST", None) - if SYSTEM_PROXY: + if BotConfig.system_proxy: os.environ.pop("HTTPS_PROXY", None) if original_proxy is not None: os.environ["HTTPS_PROXY"] = original_proxy diff --git a/zhenxun/utils/http_utils.py b/zhenxun/utils/http_utils.py index 1740ddd6..b4708b39 100644 --- a/zhenxun/utils/http_utils.py +++ b/zhenxun/utils/http_utils.py @@ -13,7 +13,7 @@ from nonebot_plugin_htmlrender import get_browser from playwright.async_api import Page from retrying import retry -from zhenxun.configs.config import SYSTEM_PROXY +from zhenxun.configs.config import BotConfig from zhenxun.services.log import logger from zhenxun.utils.message import MessageUtils from zhenxun.utils.user_agent import get_user_agent @@ -23,7 +23,7 @@ from zhenxun.utils.user_agent import get_user_agent class AsyncHttpx: - proxy = {"http://": SYSTEM_PROXY, "https://": SYSTEM_PROXY} + proxy = {"http://": BotConfig.system_proxy, "https://": BotConfig.system_proxy} @classmethod @retry(stop_max_attempt_number=3) diff --git a/zhenxun/utils/message.py b/zhenxun/utils/message.py index 54e7f908..eb6549f2 100644 --- a/zhenxun/utils/message.py +++ b/zhenxun/utils/message.py @@ -5,7 +5,7 @@ import nonebot from nonebot.adapters.onebot.v11 import Message, MessageSegment from nonebot_plugin_alconna import At, Image, Text, UniMessage -from zhenxun.configs.config import NICKNAME +from zhenxun.configs.config import BotConfig from zhenxun.services.log import logger from zhenxun.utils._build_image import BuildImage @@ -81,7 +81,7 @@ class MessageUtils: cls, msg_list: list[str | Message], uin: str, - name: str = f"这里是{NICKNAME}", + name: str = f"这里是{BotConfig.self_nickname}", ) -> list[dict]: """生成自定义合并消息