From e07851aecf1e1846da8ff97a2a0fb75c44a7d1cb Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Wed, 7 Aug 2024 00:11:49 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=20=E6=9B=B4=E5=8A=A0=E7=BB=86?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E7=BE=A4=E8=A2=AB=E5=8A=A8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/plugin_switch/__init__.py | 118 +++++++++++++----- .../admin/plugin_switch/_data_source.py | 69 ++++++++-- .../admin/plugin_switch/command.py | 42 +++---- 3 files changed, 164 insertions(+), 65 deletions(-) diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py index 1c870b2b..7d383046 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py @@ -51,6 +51,19 @@ __plugin_meta__ = PluginMetadata( 私聊中: 开启/关闭所有插件全局状态 群组中: 开启/关闭当前群组所有插件状态 + 开启/关闭群被动[name] ?[-g [group_id]] + 私聊中: 开启/关闭全局指定的被动状态 + 群组中: 开启/关闭当前群组指定的被动状态 + 示例: + 关闭群被动早晚安 + 关闭群被动早晚安 -g 12355555 + + 开启/关闭所有群被动 -[g ?[group_id]] + 私聊中: 开启/关闭全局或指定群组被动状态 + 示例: + 开启所有群被动: 开启全局所有被动 + 开启所有群被动 -g 12345678: 开启群组12345678所有被动 + 私聊下: 示例: 开启签到 : 全局开启签到 @@ -106,7 +119,7 @@ async def _( name = plugin_name.result gid = session.id3 or session.id2 if gid: - """群组中使用命令""" + """修改当前群组的数据""" if task.result: if all.result: result = await PluginManage.unblock_group_all_task(gid) @@ -137,7 +150,7 @@ async def _( session=session, ) else: - result = await PluginManage.block_group_plugin(name, gid) + result = await PluginManage.unblock_group_plugin(name, gid) logger.info( f"开启功能 {name}", arparma.header_result, session=session ) @@ -146,14 +159,21 @@ async def _( """私聊""" group_id = group.result if group.available else None if all.result: - result = await PluginManage.set_all_plugin_status( - True, default_status.result, group_id - ) - logger.info( - f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", - arparma.header_result, - session=session, - ) + if task.result: + """关闭全局或指定群全部被动""" + if group_id: + result = await PluginManage.unblock_group_all_task(group_id) + else: + result = await PluginManage.unblock_global_all_task() + else: + result = await PluginManage.set_all_plugin_status( + True, default_status.result, group_id + ) + logger.info( + f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", + arparma.header_result, + session=session, + ) await Text(result).finish(reply=True) if default_status.result: result = await PluginManage.set_default_status(name, True) @@ -165,13 +185,25 @@ async def _( ) await Text(result).finish(reply=True) if task.result: - result = await PluginManage.superuser_task_handle(name, group_id, True) - logger.info( - f"超级用户开启被动技能 {name}", - arparma.header_result, - session=session, - target=group_id, - ) + split_list = name.split() + if len(split_list) > 1: + name = split_list[0] + group_id = split_list[1] + if group_id: + result = await PluginManage.superuser_task_handle(name, group_id, True) + logger.info( + f"超级用户开启被动技能 {name}", + arparma.header_result, + session=session, + target=group_id, + ) + else: + result = await PluginManage.unblock_global_task(name) + logger.info( + f"超级用户开启全局被动技能 {name}", + arparma.header_result, + session=session, + ) await Text(result).finish(reply=True) else: result = await PluginManage.superuser_block(name, None, group_id) @@ -201,6 +233,7 @@ async def _( name = plugin_name.result gid = session.id3 or session.id2 if gid: + """修改当前群组的数据""" if task.result: if all.result: result = await PluginManage.block_group_all_task(gid) @@ -231,7 +264,7 @@ async def _( session=session, ) else: - result = await PluginManage.unblock_group_plugin(name, gid) + result = await PluginManage.block_group_plugin(name, gid) logger.info( f"关闭功能 {name}", arparma.header_result, session=session ) @@ -239,14 +272,21 @@ async def _( elif session.id1 in bot.config.superusers: group_id = group.result if group.available else None if all.result: - result = await PluginManage.set_all_plugin_status( - False, default_status.result, group_id - ) - logger.info( - f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", - arparma.header_result, - session=session, - ) + if task.result: + """关闭全局或指定群全部被动""" + if group_id: + result = await PluginManage.block_group_all_task(group_id) + else: + result = await PluginManage.block_global_all_task() + else: + result = await PluginManage.set_all_plugin_status( + False, default_status.result, group_id + ) + logger.info( + f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", + arparma.header_result, + session=session, + ) await Text(result).finish(reply=True) if default_status.result: result = await PluginManage.set_default_status(name, False) @@ -258,13 +298,25 @@ async def _( ) await Text(result).finish(reply=True) if task.result: - result = await PluginManage.superuser_task_handle(name, group_id, False) - logger.info( - f"超级用户关闭被动技能 {name}", - arparma.header_result, - session=session, - target=group_id, - ) + split_list = name.split() + if len(split_list) > 1: + name = split_list[0] + group_id = split_list[1] + if group_id: + result = await PluginManage.superuser_task_handle(name, group_id, False) + logger.info( + f"超级用户关闭被动技能 {name}", + arparma.header_result, + session=session, + target=group_id, + ) + else: + result = await PluginManage.block_global_task(name) + logger.info( + f"超级用户关闭全局被动技能 {name}", + arparma.header_result, + session=session, + ) await Text(result).finish(reply=True) else: _type = BlockType.ALL diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py index 2565c463..b10a929e 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py @@ -189,8 +189,14 @@ class PluginManage: if group := await GroupConsole.get_or_none( group_id=group_id, channel_id__isnull=True ): + module_list = await PluginInfo.filter( + plugin_type=PluginType.NORMAL + ).values_list("module", flat=True) if status: - group.block_plugin = "" + for module in module_list: + group.block_plugin = group.block_plugin.replace( + f"{module},", "" + ) else: module_list = await PluginInfo.filter( plugin_type=PluginType.NORMAL @@ -271,7 +277,7 @@ class PluginManage: 返回: str: 返回信息 """ - return await cls._change_group_plugin(plugin_name, group_id, True) + return await cls._change_group_plugin(plugin_name, group_id, False) @classmethod async def unblock_group_task(cls, task_name: str, group_id: str) -> str: @@ -323,6 +329,52 @@ class PluginManage: """ return await cls._change_group_task("", group_id, True, True) + @classmethod + async def block_global_all_task(cls) -> str: + """禁用全局被动技能 + + 返回: + str: 返回信息 + """ + await TaskInfo.all().update(status=False) + return "已全局禁用所有被动状态" + + @classmethod + async def block_global_task(cls, name: str) -> str: + """禁用全局被动技能 + + 参数: + name: 被动技能名称 + + 返回: + str: 返回信息 + """ + await TaskInfo.filter(name=name).update(status=False) + return f"已全局禁用被动状态 {name}" + + @classmethod + async def unblock_global_all_task(cls) -> str: + """开启全局被动技能 + + 返回: + str: 返回信息 + """ + await TaskInfo.all().update(status=True) + return "已全局开启所有被动状态" + + @classmethod + async def unblock_global_task(cls, name: str) -> str: + """开启全局被动技能 + + 参数: + name: 被动技能名称 + + 返回: + str: 返回信息 + """ + await TaskInfo.filter(name=name).update(status=True) + return f"已全局开启被动状态 {name}" + @classmethod async def unblock_group_plugin(cls, plugin_name: str, group_id: str) -> str: """启用群组插件 @@ -334,7 +386,7 @@ class PluginManage: 返回: str: 返回信息 """ - return await cls._change_group_plugin(plugin_name, group_id, False) + return await cls._change_group_plugin(plugin_name, group_id, True) @classmethod async def _change_group_task( @@ -361,7 +413,8 @@ class PluginManage: if status: group.block_task = ",".join(modules) + "," # type: ignore else: - group.block_task = "" + for module in modules: + group.block_task = group.block_task.replace(f"{module},", "") await group.save(update_fields=["block_task"]) return f"已成功{status_str}全部被动技能!" else: @@ -372,6 +425,8 @@ class PluginManage: if status: group.block_task += f"{task.module}," else: + if f"super:{task.module}," in group.block_task: + return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" group.block_task = group.block_task.replace(f"{task.module},", "") await group.save(update_fields=["block_task"]) return f"已成功{status_str} {task_name} 被动技能!" @@ -443,10 +498,8 @@ class PluginManage: else: group.block_task += f"super:{task.module}," await group.save(update_fields=["block_task"]) - else: - task.status = status - await task.save(update_fields=["status"]) - return f"已成功将被动技能 {task_name} 全局{status_str}!" + return f"已成功将群组 {group_id} 被动技能 {task_name} {status_str}!" + return "没有找到这个群组喔..." return "没有找到这个功能喔..." @classmethod diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/command.py b/zhenxun/builtin_plugins/admin/plugin_switch/command.py index db89c596..6d33b4df 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/command.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/command.py @@ -16,24 +16,17 @@ _status_matcher = on_alconna( Option("-t|--task", action=store_true, help_text="被动技能"), Option("-df|--default", action=store_true, help_text="进群默认开关"), Option("--all", action=store_true, help_text="全部插件/被动"), + Option("-g|--group", Args["group?", str], help_text="指定群组"), Subcommand( "open", Args["plugin_name?", [str, int]], - Option( - "-g|--group", - Args["group", str], - ), ), Subcommand( "close", Args["plugin_name?", [str, int]], Option( "-t|--type", - Args["block_type", ["all", "a", "private", "p", "group", "g"]], - ), - Option( - "-g|--group", - Args["group", str], + Args["block_type?", ["all", "a", "private", "p", "group", "g"]], ), ), ), @@ -67,12 +60,20 @@ _status_matcher.shortcut( _status_matcher.shortcut( - r"开启群被动(?P.+)", + r"开启群被动\s*(?P.+)", command="switch", arguments=["open", "{name}", "--task"], prefix=True, ) +_status_matcher.shortcut( + r"关闭群被动\s*(?P.+)", + command="switch", + arguments=["close", "{name}", "--task"], + prefix=True, +) + + _status_matcher.shortcut( r"开启(所有|全部)群被动", command="switch", @@ -117,14 +118,6 @@ _status_matcher.shortcut( ) -_status_matcher.shortcut( - r"关闭群被动(?P.+)", - command="switch", - arguments=["close", "{name}", "--task"], - prefix=True, -) - - _status_matcher.shortcut( r"关闭所有(插件|功能)", command="switch", @@ -139,6 +132,13 @@ _status_matcher.shortcut( prefix=True, ) +_status_matcher.shortcut( + r"关闭(?P.+)", + command="switch", + arguments=["close", "{name}"], + prefix=True, +) + _status_matcher.shortcut( r"关闭(插件|功能)df(?P.+)", command="switch", @@ -146,12 +146,6 @@ _status_matcher.shortcut( prefix=True, ) -_status_matcher.shortcut( - r"关闭(?P.+)", - command="switch", - arguments=["close", "{name}"], - prefix=True, -) _group_status_matcher.shortcut( r"醒来",