feat: 配置项目的热修改

This commit is contained in:
2024-03-29 14:58:24 +08:00
parent f23567194c
commit aed63c34c9
10 changed files with 148 additions and 89 deletions

View File

@ -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)