diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py index ddc0e910..1c870b2b 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py @@ -24,6 +24,7 @@ __plugin_meta__ = PluginMetadata( 开启/关闭[功能名称] : 开关功能 开启/关闭群被动[被动名称] : 群被动开关 开启/关闭所有插件 : 开启/关闭当前群组所有插件状态 + 开启/关闭所有群被动 : 开启/关闭当前群组所有群被动 群被动状态 : 查看被动技能开关状态 醒来 : 结束休眠 休息吧 : 群组休眠, 不会再响应命令 @@ -107,8 +108,14 @@ async def _( if gid: """群组中使用命令""" if task.result: - result = await PluginManage.unblock_group_task(name, gid) - logger.info(f"开启群组被动 {name}", arparma.header_result, session=session) + if all.result: + result = await PluginManage.unblock_group_all_task(gid) + logger.info(f"开启所有群组被动", arparma.header_result, session=session) + else: + result = await PluginManage.unblock_group_task(name, gid) + logger.info( + f"开启群组被动 {name}", arparma.header_result, session=session + ) else: if session.id1 in bot.config.superusers and default_status.result: """单个插件的进群默认修改""" @@ -195,7 +202,14 @@ async def _( gid = session.id3 or session.id2 if gid: if task.result: - result = await PluginManage.block_group_task(name, gid) + if all.result: + result = await PluginManage.block_group_all_task(gid) + logger.info(f"开启所有群组被动", arparma.header_result, session=session) + else: + result = await PluginManage.block_group_task(name, gid) + logger.info( + f"关闭群组被动 {name}", arparma.header_result, session=session + ) else: if session.id1 in bot.config.superusers and default_status.result: """单个插件的进群默认修改""" diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py index 1c96eed0..2565c463 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py @@ -286,6 +286,18 @@ class PluginManage: """ return await cls._change_group_task(task_name, group_id, False) + @classmethod + async def unblock_group_all_task(cls, group_id: str) -> str: + """启用被动技能 + + 参数: + group_id: 群组id + + 返回: + str: 返回信息 + """ + return await cls._change_group_task("", group_id, False, True) + @classmethod async def block_group_task(cls, task_name: str, group_id: str) -> str: """禁用被动技能 @@ -299,6 +311,18 @@ class PluginManage: """ return await cls._change_group_task(task_name, group_id, True) + @classmethod + async def block_group_all_task(cls, group_id: str) -> str: + """禁用被动技能 + + 参数: + group_id: 群组id + + 返回: + str: 返回信息 + """ + return await cls._change_group_task("", group_id, True, True) + @classmethod async def unblock_group_plugin(cls, plugin_name: str, group_id: str) -> str: """启用群组插件 @@ -314,7 +338,7 @@ class PluginManage: @classmethod async def _change_group_task( - cls, task_name: str, group_id: str, status: bool + cls, task_name: str, group_id: str, status: bool, is_all: bool = False ) -> str: """改变群组被动技能状态 @@ -322,21 +346,35 @@ class PluginManage: task_name: 被动技能名称 group_id: 群组Id status: 状态 + is_all: 所有群被动 返回: str: 返回信息 """ - if task := await TaskInfo.get_or_none(name=task_name): - status_str = "关闭" if status else "开启" - group, _ = await GroupConsole.get_or_create( - group_id=group_id, channel_id__isnull=True - ) - if status: - group.block_task += f"{task.module}," - else: - group.block_task = group.block_task.replace(f"{task.module},", "") - await group.save(update_fields=["block_task"]) - return f"已成功{status_str} {task_name} 被动技能!" + status_str = "关闭" if status else "开启" + if is_all: + modules = await TaskInfo.annotate().values_list("module", flat=True) + if modules: + group, _ = await GroupConsole.get_or_create( + group_id=group_id, channel_id__isnull=True + ) + if status: + group.block_task = ",".join(modules) + "," # type: ignore + else: + group.block_task = "" + await group.save(update_fields=["block_task"]) + return f"已成功{status_str}全部被动技能!" + else: + if task := await TaskInfo.get_or_none(name=task_name): + group, _ = await GroupConsole.get_or_create( + group_id=group_id, channel_id__isnull=True + ) + if status: + group.block_task += f"{task.module}," + else: + group.block_task = group.block_task.replace(f"{task.module},", "") + await group.save(update_fields=["block_task"]) + return f"已成功{status_str} {task_name} 被动技能!" return "没有找到这个被动技能喔..." @classmethod diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/command.py b/zhenxun/builtin_plugins/admin/plugin_switch/command.py index ddbdb535..db89c596 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/command.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/command.py @@ -15,7 +15,7 @@ _status_matcher = on_alconna( "switch", Option("-t|--task", action=store_true, help_text="被动技能"), Option("-df|--default", action=store_true, help_text="进群默认开关"), - Option("--all", action=store_true, help_text="全部插件"), + Option("--all", action=store_true, help_text="全部插件/被动"), Subcommand( "open", Args["plugin_name?", [str, int]], @@ -73,6 +73,20 @@ _status_matcher.shortcut( prefix=True, ) +_status_matcher.shortcut( + r"开启(所有|全部)群被动", + command="switch", + arguments=["open", "--task", "--all"], + prefix=True, +) + +_status_matcher.shortcut( + r"关闭(所有|全部)群被动", + command="switch", + arguments=["close", "--task", "--all"], + prefix=True, +) + _status_matcher.shortcut( r"开启所有(插件|功能)",