From 579558e59b7ebec560a8cd8ba17f7a4e7d824d62 Mon Sep 17 00:00:00 2001 From: HibiKier <45528451+HibiKier@users.noreply.github.com> Date: Fri, 11 Jul 2025 10:07:09 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=A2=AB=E5=8A=A8?= =?UTF-8?q?=E7=9A=84=E9=BB=98=E8=AE=A4=E5=BC=80=E5=85=B3=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=20(#1948)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * :bug: 修复被动的默认开关指令 * ✨ 优化插件开关命令,增强用户体验 * :zap: 移除旧_task配置 --- .../admin/plugin_switch/__init__.py | 120 ++++++++++-------- .../admin/plugin_switch/_data_source.py | 46 +++++-- .../admin/plugin_switch/command.py | 27 ++++ .../platform/qq/group_handle/__init__.py | 16 --- .../superuser/broadcast/__init__.py | 12 +- 5 files changed, 130 insertions(+), 91 deletions(-) diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py index e183de4a..d98e4cf1 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py @@ -1,7 +1,7 @@ from nonebot.adapters import Bot from nonebot.plugin import PluginMetadata from nonebot_plugin_alconna import AlconnaQuery, Arparma, Match, Query -from nonebot_plugin_session import EventSession +from nonebot_plugin_uninfo import Uninfo from zhenxun.configs.config import Config from zhenxun.configs.utils import PluginExtraData, RegisterConfig @@ -9,7 +9,7 @@ from zhenxun.services.log import logger from zhenxun.utils.enum import BlockType, PluginType from zhenxun.utils.message import MessageUtils -from ._data_source import PluginManage, build_plugin, build_task, delete_help_image +from ._data_source import PluginManager, build_plugin, build_task, delete_help_image from .command import _group_status_matcher, _status_matcher base_config = Config.get("plugin_switch") @@ -57,6 +57,11 @@ __plugin_meta__ = PluginMetadata( 关闭群被动早晚安 关闭群被动早晚安 -g 12355555 + 开启/关闭默认群被动 [被动名称] + 私聊下: 开启/关闭群被动默认状态 + 示例: + 关闭默认群被动 早晚安 + 开启/关闭所有群被动 ?[-g [group_id]] 私聊中: 开启/关闭全局或指定群组被动状态 示例: @@ -87,10 +92,10 @@ __plugin_meta__ = PluginMetadata( @_status_matcher.assign("$main") async def _( bot: Bot, - session: EventSession, + session: Uninfo, arparma: Arparma, ): - if session.id1 in bot.config.superusers: + if session.user.id in bot.config.superusers: image = await build_plugin() logger.info( "查看功能列表", @@ -105,7 +110,7 @@ async def _( @_status_matcher.assign("open") async def _( bot: Bot, - session: EventSession, + session: Uninfo, arparma: Arparma, plugin_name: Match[str], group: Match[str], @@ -114,22 +119,23 @@ async def _( all: Query[bool] = AlconnaQuery("all.value", False), ): if not all.result and not plugin_name.available: - await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) + await MessageUtils.build_message("请输入功能/被动名称").finish(reply_to=True) name = plugin_name.result - if gid := session.id3 or session.id2: + if session.group: + group_id = session.group.id """修改当前群组的数据""" if task.result: if all.result: - result = await PluginManage.unblock_group_all_task(gid) + result = await PluginManager.unblock_group_all_task(group_id) logger.info("开启所有群组被动", arparma.header_result, session=session) else: - result = await PluginManage.unblock_group_task(name, gid) + result = await PluginManager.unblock_group_task(name, group_id) logger.info( f"开启群组被动 {name}", arparma.header_result, session=session ) - elif session.id1 in bot.config.superusers and default_status.result: + elif session.user.id in bot.config.superusers and default_status.result: """单个插件的进群默认修改""" - result = await PluginManage.set_default_status(name, True) + result = await PluginManager.set_default_status(name, True) logger.info( f"超级用户开启 {name} 功能进群默认开关", arparma.header_result, @@ -137,8 +143,8 @@ async def _( ) elif all.result: """所有插件""" - result = await PluginManage.set_all_plugin_status( - True, default_status.result, gid + result = await PluginManager.set_all_plugin_status( + True, default_status.result, group_id ) logger.info( "开启群组中全部功能", @@ -146,22 +152,24 @@ async def _( session=session, ) else: - result = await PluginManage.unblock_group_plugin(name, gid) + result = await PluginManager.unblock_group_plugin(name, group_id) logger.info(f"开启功能 {name}", arparma.header_result, session=session) - delete_help_image(gid) + delete_help_image(group_id) await MessageUtils.build_message(result).finish(reply_to=True) - elif session.id1 in bot.config.superusers: + elif session.user.id in bot.config.superusers: """私聊""" group_id = group.result if group.available else None if all.result: if task.result: """关闭全局或指定群全部被动""" if group_id: - result = await PluginManage.unblock_group_all_task(group_id) + result = await PluginManager.unblock_group_all_task(group_id) else: - result = await PluginManage.unblock_global_all_task() + result = await PluginManager.unblock_global_all_task( + default_status.result + ) else: - result = await PluginManage.set_all_plugin_status( + result = await PluginManager.set_all_plugin_status( True, default_status.result, group_id ) logger.info( @@ -171,8 +179,8 @@ async def _( session=session, ) await MessageUtils.build_message(result).finish(reply_to=True) - if default_status.result: - result = await PluginManage.set_default_status(name, True) + if default_status.result and not task.result: + result = await PluginManager.set_default_status(name, True) logger.info( f"超级用户开启 {name} 功能进群默认开关", arparma.header_result, @@ -186,7 +194,7 @@ async def _( name = split_list[0] group_id = split_list[1] if group_id: - result = await PluginManage.superuser_task_handle(name, group_id, True) + result = await PluginManager.superuser_task_handle(name, group_id, True) logger.info( f"超级用户开启被动技能 {name}", arparma.header_result, @@ -194,14 +202,16 @@ async def _( target=group_id, ) else: - result = await PluginManage.unblock_global_task(name) + result = await PluginManager.unblock_global_task( + name, default_status.result + ) logger.info( f"超级用户开启全局被动技能 {name}", arparma.header_result, session=session, ) else: - result = await PluginManage.superuser_unblock(name, None, group_id) + result = await PluginManager.superuser_unblock(name, None, group_id) logger.info( f"超级用户开启功能 {name}", arparma.header_result, @@ -215,7 +225,7 @@ async def _( @_status_matcher.assign("close") async def _( bot: Bot, - session: EventSession, + session: Uninfo, arparma: Arparma, plugin_name: Match[str], block_type: Match[str], @@ -225,22 +235,23 @@ async def _( all: Query[bool] = AlconnaQuery("all.value", False), ): if not all.result and not plugin_name.available: - await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) + await MessageUtils.build_message("请输入功能/被动名称").finish(reply_to=True) name = plugin_name.result - if gid := session.id3 or session.id2: + if session.group: + group_id = session.group.id """修改当前群组的数据""" if task.result: if all.result: - result = await PluginManage.block_group_all_task(gid) + result = await PluginManager.block_group_all_task(group_id) logger.info("开启所有群组被动", arparma.header_result, session=session) else: - result = await PluginManage.block_group_task(name, gid) + result = await PluginManager.block_group_task(name, group_id) logger.info( f"关闭群组被动 {name}", arparma.header_result, session=session ) - elif session.id1 in bot.config.superusers and default_status.result: + elif session.user.id in bot.config.superusers and default_status.result: """单个插件的进群默认修改""" - result = await PluginManage.set_default_status(name, False) + result = await PluginManager.set_default_status(name, False) logger.info( f"超级用户开启 {name} 功能进群默认开关", arparma.header_result, @@ -248,26 +259,28 @@ async def _( ) elif all.result: """所有插件""" - result = await PluginManage.set_all_plugin_status( - False, default_status.result, gid + result = await PluginManager.set_all_plugin_status( + False, default_status.result, group_id ) logger.info("关闭群组中全部功能", arparma.header_result, session=session) else: - result = await PluginManage.block_group_plugin(name, gid) + result = await PluginManager.block_group_plugin(name, group_id) logger.info(f"关闭功能 {name}", arparma.header_result, session=session) - delete_help_image(gid) + delete_help_image(group_id) await MessageUtils.build_message(result).finish(reply_to=True) - elif session.id1 in bot.config.superusers: + elif session.user.id in bot.config.superusers: group_id = group.result if group.available else None if all.result: if task.result: """关闭全局或指定群全部被动""" if group_id: - result = await PluginManage.block_group_all_task(group_id) + result = await PluginManager.block_group_all_task(group_id) else: - result = await PluginManage.block_global_all_task() + result = await PluginManager.block_global_all_task( + default_status.result + ) else: - result = await PluginManage.set_all_plugin_status( + result = await PluginManager.set_all_plugin_status( False, default_status.result, group_id ) logger.info( @@ -277,8 +290,8 @@ async def _( session=session, ) await MessageUtils.build_message(result).finish(reply_to=True) - if default_status.result: - result = await PluginManage.set_default_status(name, False) + if default_status.result and not task.result: + result = await PluginManager.set_default_status(name, False) logger.info( f"超级用户关闭 {name} 功能进群默认开关", arparma.header_result, @@ -292,7 +305,9 @@ async def _( name = split_list[0] group_id = split_list[1] if group_id: - result = await PluginManage.superuser_task_handle(name, group_id, False) + result = await PluginManager.superuser_task_handle( + name, group_id, False + ) logger.info( f"超级用户关闭被动技能 {name}", arparma.header_result, @@ -300,7 +315,9 @@ async def _( target=group_id, ) else: - result = await PluginManage.block_global_task(name) + result = await PluginManager.block_global_task( + name, default_status.result + ) logger.info( f"超级用户关闭全局被动技能 {name}", arparma.header_result, @@ -314,7 +331,7 @@ async def _( elif block_type.result in ["g", "group"]: if block_type.available: _type = BlockType.GROUP - result = await PluginManage.superuser_block(name, _type, group_id) + result = await PluginManager.superuser_block(name, _type, group_id) logger.info( f"超级用户关闭功能 {name}, 禁用类型: {_type}", arparma.header_result, @@ -327,19 +344,20 @@ async def _( @_group_status_matcher.handle() async def _( - session: EventSession, + session: Uninfo, arparma: Arparma, status: str, ): - if gid := session.id3 or session.id2: + if session.group: + group_id = session.group.id if status == "sleep": - await PluginManage.sleep(gid) + await PluginManager.sleep(group_id) logger.info("进行休眠", arparma.header_result, session=session) await MessageUtils.build_message("那我先睡觉了...").finish() else: - if await PluginManage.is_wake(gid): + if await PluginManager.is_wake(group_id): await MessageUtils.build_message("我还醒着呢!").finish() - await PluginManage.wake(gid) + await PluginManager.wake(group_id) logger.info("醒来", arparma.header_result, session=session) await MessageUtils.build_message("呜..醒来了...").finish() return MessageUtils.build_message("群组id为空...").send() @@ -347,10 +365,10 @@ async def _( @_status_matcher.assign("task") async def _( - session: EventSession, + session: Uninfo, arparma: Arparma, ): - image = await build_task(session.id3 or session.id2) + image = await build_task(session.group.id if session.group else None) if image: logger.info("查看群被动列表", arparma.header_result, session=session) await MessageUtils.build_message(image).finish(reply_to=True) diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py index 72862266..fb245cf2 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py @@ -155,7 +155,7 @@ async def build_task(group_id: str | None) -> BuildImage: ) -class PluginManage: +class PluginManager: @classmethod async def set_default_status(cls, plugin_name: str, status: bool) -> str: """设置插件进群默认状态 @@ -342,17 +342,21 @@ class PluginManage: return await cls._change_group_task("", group_id, True, True) @classmethod - async def block_global_all_task(cls) -> str: + async def block_global_all_task(cls, is_default: bool) -> str: """禁用全局被动技能 返回: str: 返回信息 """ - await TaskInfo.all().update(status=False) - return "已全局禁用所有被动状态" + if is_default: + await TaskInfo.all().update(default_status=False) + return "已禁用所有被动进群默认状态" + else: + await TaskInfo.all().update(status=False) + return "已全局禁用所有被动状态" @classmethod - async def block_global_task(cls, name: str) -> str: + async def block_global_task(cls, name: str, is_default: bool = False) -> str: """禁用全局被动技能 参数: @@ -361,31 +365,47 @@ class PluginManage: 返回: str: 返回信息 """ - await TaskInfo.filter(name=name).update(status=False) - return f"已全局禁用被动状态 {name}" + if is_default: + await TaskInfo.filter(name=name).update(default_status=False) + return f"已禁用被动进群默认状态 {name}" + else: + await TaskInfo.filter(name=name).update(status=False) + return f"已全局禁用被动状态 {name}" @classmethod - async def unblock_global_all_task(cls) -> str: + async def unblock_global_all_task(cls, is_default: bool) -> str: """开启全局被动技能 + 参数: + is_default: 是否为默认状态 + 返回: str: 返回信息 """ - await TaskInfo.all().update(status=True) - return "已全局开启所有被动状态" + if is_default: + await TaskInfo.all().update(default_status=True) + return "已开启所有被动进群默认状态" + else: + await TaskInfo.all().update(status=True) + return "已全局开启所有被动状态" @classmethod - async def unblock_global_task(cls, name: str) -> str: + async def unblock_global_task(cls, name: str, is_default: bool = False) -> str: """开启全局被动技能 参数: name: 被动技能名称 + is_default: 是否为默认状态 返回: str: 返回信息 """ - await TaskInfo.filter(name=name).update(status=True) - return f"已全局开启被动状态 {name}" + if is_default: + await TaskInfo.filter(name=name).update(default_status=True) + return f"已开启被动进群默认状态 {name}" + else: + 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: diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/command.py b/zhenxun/builtin_plugins/admin/plugin_switch/command.py index 8c3e8fab..62056a2e 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/command.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/command.py @@ -58,6 +58,19 @@ _status_matcher.shortcut( prefix=True, ) +_status_matcher.shortcut( + r"开启(所有|全部)默认群被动", + command="switch", + arguments=["open", "--task", "--all", "-df"], + prefix=True, +) + +_status_matcher.shortcut( + r"关闭(所有|全部)默认群被动", + command="switch", + arguments=["close", "--task", "--all", "-df"], + prefix=True, +) _status_matcher.shortcut( r"开启群被动\s*(?P.+)", @@ -73,6 +86,20 @@ _status_matcher.shortcut( prefix=True, ) +_status_matcher.shortcut( + r"开启默认群被动\s*(?P.+)", + command="switch", + arguments=["open", "{name}", "--task", "-df"], + prefix=True, +) + +_status_matcher.shortcut( + r"关闭默认群被动\s*(?P.+)", + command="switch", + arguments=["close", "{name}", "--task", "-df"], + prefix=True, +) + _status_matcher.shortcut( r"开启(所有|全部)群被动", diff --git a/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py b/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py index f4c28f04..f1785a1a 100644 --- a/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py +++ b/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py @@ -54,22 +54,6 @@ __plugin_meta__ = PluginMetadata( default_value=5, type=int, ), - RegisterConfig( - module="_task", - key="DEFAULT_GROUP_WELCOME", - value=True, - help="被动 进群欢迎 进群默认开关状态", - default_value=True, - type=bool, - ), - RegisterConfig( - module="_task", - key="DEFAULT_REFUND_GROUP_REMIND", - value=True, - help="被动 退群提醒 进群默认开关状态", - default_value=True, - type=bool, - ), ], tasks=[ Task( diff --git a/zhenxun/builtin_plugins/superuser/broadcast/__init__.py b/zhenxun/builtin_plugins/superuser/broadcast/__init__.py index 3fc08e4c..0b9c15ba 100644 --- a/zhenxun/builtin_plugins/superuser/broadcast/__init__.py +++ b/zhenxun/builtin_plugins/superuser/broadcast/__init__.py @@ -28,7 +28,7 @@ from nonebot_plugin_alconna.uniseg.segment import ( ) from nonebot_plugin_session import EventSession -from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task +from zhenxun.configs.utils import PluginExtraData, Task from zhenxun.utils.enum import PluginType from zhenxun.utils.message import MessageUtils @@ -73,16 +73,6 @@ __plugin_meta__ = PluginMetadata( author="HibiKier", version="1.2", plugin_type=PluginType.SUPERUSER, - configs=[ - RegisterConfig( - module="_task", - key="DEFAULT_BROADCAST", - value=True, - help="被动 广播 进群默认开关状态", - default_value=True, - type=bool, - ) - ], tasks=[Task(module="broadcast", name="广播")], ).to_dict(), )