feat(mc-server-status): 服务器列表 Web 管理页 / 数据层抽离 / mcstatus 13 适配
- services/servers.py:校验 + 读写 + 增删改收敛成一份数据层(顶层不 import nonebot, 可脱离运行时单测),群命令与 Web API 都只经它改数据,校验不再各写一套 - web_hub.py + /hub/mc_server_status 页面:按群列出服务器,抽屉新增/编辑(改名)/ 测试连接,行内删除(删空一台连带删群);每条路由自带 require_admin - handlers/server.py 改为薄封装,只在需要命令特有提示时自己判断 - services/mc.py 的图标属性名兼容 mcstatus ≥13 的 icon(旧版叫 favicon, 读错会把整条查询打成"查询失败") - tests/test_mc_servers.py:数据层归一/改名/删群/坏文件兜底 + 图标解码两版属性名 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
from json import dump, load
|
||||
from os import makedirs
|
||||
from pathlib import Path
|
||||
from typing import List, Optional
|
||||
@@ -7,6 +6,8 @@ from nonebot import get_bot, get_bots, get_driver, get_plugin_config
|
||||
from nonebot.adapters import Bot
|
||||
from pydantic import BaseModel
|
||||
|
||||
from .services import servers as store
|
||||
|
||||
# 数据目录:项目 hexi/data/ 下(与其它插件数据统一)
|
||||
DATA_DIR = Path(__file__).resolve().parents[2] / "data"
|
||||
|
||||
@@ -40,18 +41,16 @@ async def on_startup():
|
||||
save_file()
|
||||
else:
|
||||
load_file()
|
||||
# 群命令与 Web 管理台都改 var.group_list,保存时整表落盘(见 services/servers.py)
|
||||
|
||||
|
||||
def load_file():
|
||||
with open(DATA_DIR / pc.mc_status_data_filename, "r", encoding="utf-8") as r:
|
||||
tmp_data = load(r)
|
||||
for i in tmp_data:
|
||||
var.group_list[int(i)] = tmp_data[i]
|
||||
"""数据读写都在 services/servers.py(群命令与 Web 管理台共用同一份校验)。"""
|
||||
var.group_list.update(store.load_servers(pc.mc_status_data_filename))
|
||||
|
||||
|
||||
def save_file():
|
||||
with open(DATA_DIR / pc.mc_status_data_filename, "w", encoding="utf-8") as w:
|
||||
dump(var.group_list, w, indent=4, ensure_ascii=False)
|
||||
store.save_servers(pc.mc_status_data_filename, var.group_list)
|
||||
|
||||
|
||||
# qq机器人连接时执行
|
||||
|
||||
Reference in New Issue
Block a user