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