import asyncio from datetime import datetime from nonebot import on_command from nonebot.typing import T_State from nonebot.matcher import Matcher from nonebot.rule import Rule, to_me from nonebot.permission import SUPERUSER from nonebot_plugin_saa import TargetQQGroup from nonebot.params import ArgStr, ArgPlainText from nonebot.adapters import Bot, MessageTemplate from nonebot.adapters.onebot.v11.event import PrivateMessageEvent from .add_sub import do_add_sub from .del_sub import do_del_sub from .query_sub import do_query_sub from .add_cookie import do_add_cookie from .del_cookie import do_del_cookie from .add_cookie_target import do_add_cookie_target from .del_cookie_target import do_del_cookie_target from .utils import common_platform, admin_permission, gen_handle_cancel, configurable_to_me, set_target_user_info add_sub_matcher = on_command( "添加订阅", rule=configurable_to_me, permission=admin_permission(), priority=5, block=True, ) add_sub_matcher.handle()(set_target_user_info) do_add_sub(add_sub_matcher) query_sub_matcher = on_command("查询订阅", rule=configurable_to_me, priority=5, block=True) query_sub_matcher.handle()(set_target_user_info) do_query_sub(query_sub_matcher) del_sub_matcher = on_command( "删除订阅", rule=configurable_to_me, permission=admin_permission(), priority=5, block=True, ) del_sub_matcher.handle()(set_target_user_info) do_del_sub(del_sub_matcher) add_cookie_matcher = on_command( "添加cookie", aliases={"添加Cookie"}, rule=to_me(), permission=SUPERUSER, priority=5, block=True, ) do_add_cookie(add_cookie_matcher) add_cookie_target_matcher = on_command( "关联cookie", aliases={"关联Cookie"}, rule=to_me(), permission=SUPERUSER, priority=5, block=True, ) do_add_cookie_target(add_cookie_target_matcher) del_cookie_target_matcher = on_command( "取消关联cookie", aliases={"取消关联Cookie"}, rule=to_me(), permission=SUPERUSER, priority=5, block=True, ) do_del_cookie_target(del_cookie_target_matcher) del_cookie_matcher = on_command( "删除cookie", aliases={"删除Cookie"}, rule=to_me(), permission=SUPERUSER, priority=5, block=True, ) do_del_cookie(del_cookie_matcher) group_manage_matcher = on_command("群管理", rule=to_me(), permission=SUPERUSER, priority=4, block=True) group_handle_cancel = gen_handle_cancel(group_manage_matcher, "已取消") @group_manage_matcher.handle() async def send_group_list(bot: Bot, event: PrivateMessageEvent, state: T_State): groups = await bot.call_api("get_group_list") res_text = "请选择需要管理的群:\n" group_number_idx = {} for idx, group in enumerate(groups, 1): group_number_idx[idx] = group["group_id"] res_text += f'{idx}. {group["group_id"]} - {group["group_name"]}\n' res_text += "请输入左侧序号\n中止操作请输入'取消'" # await group_manage_matcher.send(res_text) state["_prompt"] = res_text state["group_number_idx"] = group_number_idx @group_manage_matcher.got("group_idx", MessageTemplate("{_prompt}"), [group_handle_cancel]) async def do_choose_group_number(state: T_State, event: PrivateMessageEvent, group_idx: str = ArgPlainText()): group_number_idx: dict[int, int] = state["group_number_idx"] assert group_number_idx idx = int(group_idx) if idx not in group_number_idx.keys(): await group_manage_matcher.reject("请输入正确序号") group_id = group_number_idx[idx] state["target_user_info"] = TargetQQGroup(group_id=group_id) @group_manage_matcher.got("command", "请输入需要使用的命令:添加订阅,查询订阅,删除订阅,取消", [group_handle_cancel]) async def do_dispatch_command( bot: Bot, event: PrivateMessageEvent, state: T_State, matcher: Matcher, command: str = ArgStr(), ): if command not in {"添加订阅", "查询订阅", "删除订阅", "取消"}: await group_manage_matcher.reject("请输入正确的命令") permission = await matcher.update_permission(bot, event) new_matcher = Matcher.new( "message", Rule(), permission, handlers=None, temp=True, priority=0, block=True, plugin=matcher.plugin, module=matcher.module, expire_time=datetime.now(), default_state=matcher.state, default_type_updater=matcher.__class__._default_type_updater, default_permission_updater=matcher.__class__._default_permission_updater, ) if command == "查询订阅": do_query_sub(new_matcher) elif command == "添加订阅": do_add_sub(new_matcher) else: do_del_sub(new_matcher) new_matcher_ins = new_matcher() asyncio.create_task(new_matcher_ins.run(bot, event, state)) no_permission_matcher = on_command( "添加订阅", rule=configurable_to_me, aliases={"删除订阅", "群管理", "管理后台", "添加cookie", "删除cookie", "关联cookie", "取消关联cookie"}, priority=8, block=True, ) @no_permission_matcher.handle() async def send_no_permission(): await no_permission_matcher.finish("您没有权限进行此操作,请联系 Bot 管理员") __all__ = [ "common_platform", "add_sub_matcher", "query_sub_matcher", "del_sub_matcher", "group_manage_matcher", "no_permission_matcher", "add_cookie_matcher", "add_cookie_target_matcher", "del_cookie_target_matcher", "del_cookie_matcher", ]