"""后台管理:提供 Web 管理界面和 REST API,动态修改命令监听配置。""" from aiohttp import web from ..config import command, get_settings_flat, reload_settings, update_settings_from_api from ..response import error, ok # ── API ────────────────────────────────────────────────────── async def api_get_settings(request: web.Request) -> web.Response: """GET /api/settings — 返回全部动态配置。""" return ok(data=get_settings_flat()) async def api_update_settings(request: web.Request) -> web.Response: """PUT /api/settings — 批量更新配置并立即生效。""" try: data = await request.json() except Exception: return error("invalid json") if not isinstance(data, dict): return error("request body must be a json object") filtered = update_settings_from_api(data) if not filtered: return error("no valid settings to update") return ok(data=filtered, msg="配置已更新并生效") async def api_reload_settings(request: web.Request) -> web.Response: """POST /api/settings/reload — 从 settings.yaml 重新加载配置。""" reload_settings() return ok(msg="配置已从 settings.yaml 重新加载") # ── 管理页面 ───────────────────────────────────────────────── ADMIN_HTML = r""" NcatBot Webhook 管理
命令监听配置 ● 未保存
运行中

基本设置

修改后自动保存,无需手动操作。
回复时 @发送者(仅群聊)

命令匹配测试

输入消息后自动检测
""" async def admin_page_handler(request: web.Request) -> web.Response: """GET /admin/ — 返回管理页面 HTML。""" return web.Response(text=ADMIN_HTML, content_type="text/html")