diff --git a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py index a73b8910..13528f88 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/__init__.py @@ -1,16 +1,16 @@ 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_alconna import Match, Query, Arparma, AlconnaQuery -from zhenxun.configs.config import Config -from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.services.log import logger -from zhenxun.utils.enum import BlockType, PluginType +from zhenxun.configs.config import Config from zhenxun.utils.message import MessageUtils +from zhenxun.utils.enum import BlockType, PluginType +from zhenxun.configs.utils import RegisterConfig, PluginExtraData -from ._data_source import PluginManage, build_plugin, build_task -from .command import _group_status_matcher, _status_matcher +from .command import _status_matcher, _group_status_matcher +from ._data_source import PluginManage, build_task, build_plugin, delete_help_image base_config = Config.get("plugin_switch") @@ -40,36 +40,35 @@ __plugin_meta__ = PluginMetadata( version="0.1", plugin_type=PluginType.SUPER_AND_ADMIN, superuser_help=""" - 超级管理员额外命令 - 格式: - 插件列表 - 开启/关闭[功能名称] ?[-t ["private", "p", "group", "g"](关闭类型)] ?[-g 群组Id] + 格式: + 插件列表 + 开启/关闭[功能名称] ?[-t ["private", "p", "group", "g"](关闭类型)] ?[-g 群组Id] - 开启/关闭插件df[功能名称]: 开启/关闭指定插件进群默认状态 - 开启/关闭所有插件df: 开启/关闭所有插件进群默认状态 - 开启/关闭所有插件: - 私聊中: 开启/关闭所有插件全局状态 - 群组中: 开启/关闭当前群组所有插件状态 + 开启/关闭插件df[功能名称]: 开启/关闭指定插件进群默认状态 + 开启/关闭所有插件df: 开启/关闭所有插件进群默认状态 + 开启/关闭所有插件: + 私聊中: 开启/关闭所有插件全局状态 + 群组中: 开启/关闭当前群组所有插件状态 - 开启/关闭群被动[name] ?[-g [group_id]] - 私聊中: 开启/关闭全局指定的被动状态 - 群组中: 开启/关闭当前群组指定的被动状态 - 示例: - 关闭群被动早晚安 - 关闭群被动早晚安 -g 12355555 + 开启/关闭群被动[name] ?[-g [group_id]] + 私聊中: 开启/关闭全局指定的被动状态 + 群组中: 开启/关闭当前群组指定的被动状态 + 示例: + 关闭群被动早晚安 + 关闭群被动早晚安 -g 12355555 - 开启/关闭所有群被动 ?[-g [group_id]] - 私聊中: 开启/关闭全局或指定群组被动状态 - 示例: - 开启所有群被动: 开启全局所有被动 - 开启所有群被动 -g 12345678: 开启群组12345678所有被动 + 开启/关闭所有群被动 ?[-g [group_id]] + 私聊中: 开启/关闭全局或指定群组被动状态 + 示例: + 开启所有群被动: 开启全局所有被动 + 开启所有群被动 -g 12345678: 开启群组12345678所有被动 - 私聊下: - 示例: - 开启签到 : 全局开启签到 - 关闭签到 : 全局关闭签到 - 关闭签到 p : 全局私聊关闭签到 - 关闭签到 -g 12345678 : 关闭群组12345678的签到功能(普通管理员无法开启) + 私聊下: + 示例: + 开启签到 : 全局开启签到 + 关闭签到 : 全局关闭签到 + 关闭签到 p : 全局私聊关闭签到 + 关闭签到 -g 12345678 : 关闭群组12345678的签到功能(普通管理员无法开启) """, admin_level=base_config.get("CHANGE_GROUP_SWITCH_LEVEL", 2), configs=[ @@ -117,8 +116,7 @@ async def _( if not all.result and not plugin_name.available: await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) name = plugin_name.result - gid = session.id3 or session.id2 - if gid: + if gid := session.id3 or session.id2: """修改当前群组的数据""" if task.result: if all.result: @@ -129,31 +127,28 @@ async def _( logger.info( f"开启群组被动 {name}", arparma.header_result, session=session ) + elif session.id1 in bot.config.superusers and default_status.result: + """单个插件的进群默认修改""" + result = await PluginManage.set_default_status(name, True) + logger.info( + f"超级用户开启 {name} 功能进群默认开关", + arparma.header_result, + session=session, + ) + elif all.result: + """所有插件""" + result = await PluginManage.set_all_plugin_status( + True, default_status.result, gid + ) + logger.info( + "开启群组中全部功能", + arparma.header_result, + session=session, + ) else: - if session.id1 in bot.config.superusers and default_status.result: - """单个插件的进群默认修改""" - result = await PluginManage.set_default_status(name, True) - logger.info( - f"超级用户开启 {name} 功能进群默认开关", - arparma.header_result, - session=session, - ) - else: - if all.result: - """所有插件""" - result = await PluginManage.set_all_plugin_status( - True, default_status.result, gid - ) - logger.info( - "开启群组中全部功能", - arparma.header_result, - session=session, - ) - else: - result = await PluginManage.unblock_group_plugin(name, gid) - logger.info( - f"开启功能 {name}", arparma.header_result, session=session - ) + result = await PluginManage.unblock_group_plugin(name, gid) + logger.info(f"开启功能 {name}", arparma.header_result, session=session) + delete_help_image(gid) await MessageUtils.build_message(result).finish(reply_to=True) elif session.id1 in bot.config.superusers: """私聊""" @@ -170,7 +165,8 @@ async def _( True, default_status.result, group_id ) logger.info( - f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", + "超级用户开启全部功能全局开关" + f" {f'指定群组: {group_id}' if group_id else ''}", arparma.header_result, session=session, ) @@ -204,7 +200,6 @@ async def _( arparma.header_result, session=session, ) - await MessageUtils.build_message(result).finish(reply_to=True) else: result = await PluginManage.superuser_unblock(name, None, group_id) logger.info( @@ -213,7 +208,8 @@ async def _( session=session, target=group_id, ) - await MessageUtils.build_message(result).finish(reply_to=True) + delete_help_image() + await MessageUtils.build_message(result).finish(reply_to=True) @_status_matcher.assign("close") @@ -231,43 +227,35 @@ async def _( if not all.result and not plugin_name.available: await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) name = plugin_name.result - gid = session.id3 or session.id2 - if gid: + if gid := session.id3 or session.id2: """修改当前群组的数据""" if task.result: if all.result: result = await PluginManage.block_group_all_task(gid) - logger.info(f"开启所有群组被动", arparma.header_result, session=session) + logger.info("开启所有群组被动", arparma.header_result, session=session) else: result = await PluginManage.block_group_task(name, gid) logger.info( f"关闭群组被动 {name}", arparma.header_result, session=session ) + elif session.id1 in bot.config.superusers and default_status.result: + """单个插件的进群默认修改""" + result = await PluginManage.set_default_status(name, False) + logger.info( + f"超级用户开启 {name} 功能进群默认开关", + arparma.header_result, + session=session, + ) + elif all.result: + """所有插件""" + result = await PluginManage.set_all_plugin_status( + False, default_status.result, gid + ) + logger.info("关闭群组中全部功能", arparma.header_result, session=session) else: - if session.id1 in bot.config.superusers and default_status.result: - """单个插件的进群默认修改""" - result = await PluginManage.set_default_status(name, False) - logger.info( - f"超级用户开启 {name} 功能进群默认开关", - arparma.header_result, - session=session, - ) - else: - if all.result: - """所有插件""" - result = await PluginManage.set_all_plugin_status( - False, default_status.result, gid - ) - logger.info( - f"关闭群组中全部功能", - arparma.header_result, - session=session, - ) - else: - result = await PluginManage.block_group_plugin(name, gid) - logger.info( - f"关闭功能 {name}", arparma.header_result, session=session - ) + result = await PluginManage.block_group_plugin(name, gid) + logger.info(f"关闭功能 {name}", arparma.header_result, session=session) + delete_help_image(gid) await MessageUtils.build_message(result).finish(reply_to=True) elif session.id1 in bot.config.superusers: group_id = group.result if group.available else None @@ -283,7 +271,8 @@ async def _( False, default_status.result, group_id ) logger.info( - f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", + "超级用户关闭全部功能全局开关" + f" {f'指定群组: {group_id}' if group_id else ''}", arparma.header_result, session=session, ) @@ -317,13 +306,13 @@ async def _( arparma.header_result, session=session, ) - await MessageUtils.build_message(result).finish(reply_to=True) else: _type = BlockType.ALL - if block_type.available: - if block_type.result in ["p", "private"]: + if block_type.result in ["p", "private"]: + if block_type.available: _type = BlockType.PRIVATE - elif block_type.result in ["g", "group"]: + elif block_type.result in ["g", "group"]: + if block_type.available: _type = BlockType.GROUP result = await PluginManage.superuser_block(name, _type, group_id) logger.info( @@ -332,7 +321,8 @@ async def _( session=session, target=group_id, ) - await MessageUtils.build_message(result).finish(reply_to=True) + delete_help_image() + await MessageUtils.build_message(result).finish(reply_to=True) @_group_status_matcher.handle() @@ -362,11 +352,7 @@ async def _( ): image = await build_task(session.id3 or session.id2) if image: - logger.info( - f"查看群被动列表", - arparma.header_result, - session=session, - ) + logger.info("查看群被动列表", arparma.header_result, session=session) await MessageUtils.build_message(image).finish(reply_to=True) else: await MessageUtils.build_message("获取群被动任务失败...").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 6790d357..3a24b7d9 100644 --- a/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py +++ b/zhenxun/builtin_plugins/admin/plugin_switch/_data_source.py @@ -3,8 +3,23 @@ from zhenxun.models.plugin_info import PluginInfo from zhenxun.utils.enum import BlockType, PluginType from zhenxun.models.group_console import GroupConsole from zhenxun.utils.exception import GroupInfoNotFound +from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH from zhenxun.utils.image_utils import RowStyle, BuildImage, ImageTemplate +HELP_FILE = IMAGE_PATH / "SIMPLE_HELP.png" + +GROUP_HELP_PATH = DATA_PATH / "group_help" + + +def delete_help_image(gid: str | None = None): + """删除帮助图片""" + if gid: + file = GROUP_HELP_PATH / f"{gid}.png" + if file.exists(): + file.unlink() + elif HELP_FILE.exists(): + HELP_FILE.unlink() + def plugin_row_style(column: str, text: str) -> RowStyle: """被动技能文本风格 @@ -421,7 +436,7 @@ class PluginManage: if status: group.block_task += f"{task.module}," elif f"super:{task.module}," in group.block_task: - return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" + return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" # noqa: E501 else: group.block_task = group.block_task.replace(f"{task.module},", "") await group.save(update_fields=["block_task"])