mirror of
				https://github.com/LiteyukiStudio/LiteyukiBot.git
				synced 2025-10-31 20:46:24 +00:00 
			
		
		
		
	feat: 配置项目的热修改
This commit is contained in:
		| @@ -1,17 +1,23 @@ | ||||
| import json | ||||
| from typing import Any | ||||
|  | ||||
| import aiofiles | ||||
| import yaml | ||||
| from nonebot import require | ||||
| from nonebot.permission import SUPERUSER | ||||
| from git import Repo | ||||
|  | ||||
| from liteyuki.utils.config import config | ||||
| from liteyuki.utils.config import config, load_from_yaml | ||||
| from liteyuki.utils.ly_typing import T_Bot, T_MessageEvent | ||||
|  | ||||
| from liteyuki.utils.language import get_user_lang | ||||
| from liteyuki.utils.message import Markdown as md, send_markdown | ||||
|  | ||||
| from .reloader import Reloader | ||||
| from liteyuki.utils.data_manager import StoredConfig, common_db | ||||
|  | ||||
| require("nonebot_plugin_alconna") | ||||
| from nonebot_plugin_alconna import on_alconna, Alconna | ||||
| from nonebot_plugin_alconna import on_alconna, Alconna, Args, Subcommand, Arparma | ||||
|  | ||||
| cmd_liteyuki = on_alconna( | ||||
|     Alconna( | ||||
| @@ -34,6 +40,24 @@ reload_liteyuki = on_alconna( | ||||
|     permission=SUPERUSER | ||||
| ) | ||||
|  | ||||
| cmd_config = on_alconna( | ||||
|     Alconna( | ||||
|         ["config", "配置"], | ||||
|         Subcommand( | ||||
|             "set", | ||||
|             Args["key", str]["value", Any], | ||||
|             alias=["设置"], | ||||
|  | ||||
|         ), | ||||
|         Subcommand( | ||||
|             "get", | ||||
|             Args["key", str, None], | ||||
|             alias=["查询"] | ||||
|         ) | ||||
|     ), | ||||
|     permission=SUPERUSER | ||||
| ) | ||||
|  | ||||
|  | ||||
| @cmd_liteyuki.handle() | ||||
| async def _(bot: T_Bot): | ||||
| @@ -64,3 +88,36 @@ async def _(bot: T_Bot, event: T_MessageEvent): | ||||
| async def _(): | ||||
|     await reload_liteyuki.send("Liteyuki reloading") | ||||
|     Reloader.reload(3) | ||||
|  | ||||
|  | ||||
| @cmd_config.handle() | ||||
| async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot): | ||||
|     ulang = get_user_lang(str(event.user_id)) | ||||
|     stored_config: StoredConfig = common_db.first(StoredConfig(), default=StoredConfig()) | ||||
|     if result.subcommands.get("set"): | ||||
|         key, value = result.subcommands.get("set").args.get("key"), result.subcommands.get("set").args.get("value") | ||||
|         try: | ||||
|             value = eval(value) | ||||
|         except: | ||||
|             pass | ||||
|         stored_config.config[key] = value | ||||
|         common_db.upsert(stored_config) | ||||
|         await cmd_config.finish(f"{ulang.get('liteyuki.config_set_success', KEY=key, VAL=value)}") | ||||
|     elif result.subcommands.get("get"): | ||||
|         key = result.subcommands.get("get").args.get("key") | ||||
|         file_config = load_from_yaml("config.yml") | ||||
|         reply = f"{ulang.get('liteyuki.current_config')}" | ||||
|         if key: | ||||
|             reply += f"```dotenv\n{key}={file_config.get(key, stored_config.config.get(key))}\n```" | ||||
|         else: | ||||
|             reply = f"{ulang.get('liteyuki.current_config')}" | ||||
|             reply += f"\n{ulang.get('liteyuki.static_config')}\n```dotenv" | ||||
|             for k, v in file_config.items(): | ||||
|                 reply += f"\n{k}={v}" | ||||
|             reply += "\n```" | ||||
|             if len(stored_config.config) > 0: | ||||
|                 reply += f"\n{ulang.get('liteyuki.stored_config')}\n```dotenv" | ||||
|                 for k, v in stored_config.config.items(): | ||||
|                     reply += f"\n{k}={v}" | ||||
|                 reply += "\n```" | ||||
|         await send_markdown(reply, bot, event=event) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user