Files
HeXi/hexi/plugins/nonebot_plugin_mc_server_status/handlers/server.py
T
sansenhoshiandClaude 9371a28e35 refactor: restructure plugins per MTSS standard, consolidate assets to res/
Per docs/plugin-audit-report.md (plugins normalized to
Trigger(handlers) → Service(services) → Model(repository/models) + utils):

- Split monolithic __init__.py into handlers/services/utils across
  dailywife, deer_pipe, dice, galgame_card, helldivers_tools,
  huoziyinshua, learning_chat, makeaquote, mc_server_status,
  ncm_saying, picfinder_take, picstatus, random_jm_code, regif,
  steam_info, video_analysis, group_tools
- Move static assets under res/: deer_pipe font/img, makeaquote font,
  helldivers img/templates, huoziyinshua HuoZiYinShua
- Add config.py + register_config_items to ncm_saying, random_jm_code,
  group_tools; learning_chat unified config bridge
- Remove deprecated: voice_trans plugin, bf_bot/test.py, dead code in
  dailywife/deer_pipe, empty dirs, debug scripts under helldivers temp
- Disable brash_general_supercredits_tools (stub comment only)
- bot.py: optional stdout/stderr redirect to log file for Web log viewer,
  force ANSI colorize on non-TTY sinks
- Move runtime data (jm_code.json) out of plugin dir into hexi/data
- Docs: plugin-audit-report.md; README reflects removed plugins

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-03 00:44:38 +08:00

138 lines
4.9 KiB
Python

"""MC 服务器状态 —— 触发器(Trigger)层。"""
from __future__ import annotations
from asyncio import gather
from nonebot import on_command, on_regex
from nonebot.adapters.onebot.v11 import (
Bot,
GroupMessageEvent,
MessageEvent,
)
from nonebot.log import logger
from nonebot.params import RegexGroup
from nonebot.plugin import PluginMetadata
from ..config import pc, save_file, var
from ..services.mc import check_mc_status
__plugin_meta__ = PluginMetadata(
name="MC服务器信息查询插件",
description="如名",
type="application",
homepage="https://github.com/nikissXI/nonebot_plugins/tree/main/nonebot_plugin_setu_customization",
supported_adapters={"~onebot.v11"},
usage="""插件命令如下:
信息 # 字面意思,需要加命令前缀,默认/
信息数据 # 查看已启用群以及服务器信息,需要加命令前缀,默认/
添加服务器 # 字面意思
删除服务器 # 字面意思
""",
)
async def group_check(event: GroupMessageEvent, bot: Bot) -> bool:
return event.group_id in var.group_list and bot == var.handle_bot
async def admin_check(event: MessageEvent, bot: Bot) -> bool:
return bot == var.handle_bot and event.user_id in pc.mc_status_admin_qqnum
xinxi = on_command("信息", rule=group_check)
list_all = on_command("信息数据", rule=admin_check)
add_server = on_regex(
r"^添加服务器\s*((\d+)\s+(\S+)\s+(\S+)\s+(\S+))?", rule=admin_check
)
del_server = on_regex(r"^删除服务器\s*((\d+)\s+(\S+))?", rule=admin_check)
test_server = on_regex(r"^测试服务器\s*((\S+)\s+(\S+))?", rule=admin_check)
@xinxi.handle()
async def _(event: GroupMessageEvent):
group = event.group_id
task_list = []
for server_name in var.group_list[group]:
server_host = var.group_list[group][server_name][0]
server_type = var.group_list[group][server_name][1]
task_list.append(check_mc_status(server_name, server_host, server_type))
result = await gather(*task_list)
count = 0
msg = ""
logger.info(f"MC 服务器状态结果: {result}")
for r in result:
count += 1
if count > 1:
msg += "\n=== 分割线 ===\n"
msg += r
await xinxi.finish(msg)
@add_server.handle()
async def _(mp=RegexGroup()):
if not mp[0]:
await add_server.finish("添加服务器 [群号] [名称] [服务器地址] [类型]\n类型写js或bds,js是Java服务器,bds是基岩服务器\n服务器地址如果知道端口号把端口加上,否则查询速度会慢一点\n添加例子:\nexp1: 添加服务器 114514 哈皮咳嗽 mc.hypixel.net js\nexp2: 添加服务器 114514 某基岩服 mc.bds.net bds\nexp3: 添加服务器 114514 某Java服 mc.java.net:25577 js")
return
group = int(mp[1])
new_server_name = mp[2]
server_host = mp[3]
server_type = mp[4].lower()
if server_type not in ["js", "bds"]:
await add_server.finish("类型请填js或bds")
if group not in var.group_list:
var.group_list[group] = {new_server_name: [server_host, server_type]}
else:
for server_name in var.group_list[group]:
if new_server_name == server_name:
await add_server.finish("有同名服务器啦!")
var.group_list[group][new_server_name] = [server_host, server_type]
save_file()
await add_server.finish("添加成功")
@del_server.handle()
async def _(mp=RegexGroup()):
if not mp[0]:
await del_server.finish(f"删除服务器 [群号] [名称]")
return
group = int(mp[1])
name = mp[2]
if group not in var.group_list:
await del_server.finish("这个群没有添加服务器")
if name in var.group_list[group]:
var.group_list[group].pop(name)
if not var.group_list[group]:
var.group_list.pop(group)
save_file()
await del_server.finish("删除成功")
else:
await del_server.finish("没找到该名称的服务器")
@list_all.handle()
async def _():
msg = ""
for group_id in var.group_list:
msg += f"群{group_id}服务器列表\n"
for server_name in var.group_list[group_id]:
server_host, server_type = var.group_list[group_id][server_name]
msg += f"{server_name} {server_host} {server_type}\n"
msg += "\n"
if not msg:
msg = "无数据"
await list_all.finish(f"mc_status数据\n{msg}")
@test_server.handle()
async def _(mp=RegexGroup()):
if not mp[0]:
await test_server.finish("测试服务器 [服务器地址] [类型]\n类型写js或bds,js是Java服务器,bds是基岩服务器")
return
server_host = mp[1]
server_type = mp[2].lower()
if server_type not in ["js", "bds"]:
await add_server.finish("类型请填js或bds")
msg = await check_mc_status("测试", server_host, server_type)
await list_all.finish(msg)