diff --git a/zhenxun/builtin_plugins/admin/admin_help/html_help.py b/zhenxun/builtin_plugins/admin/admin_help/html_help.py index 69699bbb..76141d9b 100644 --- a/zhenxun/builtin_plugins/admin/admin_help/html_help.py +++ b/zhenxun/builtin_plugins/admin/admin_help/html_help.py @@ -15,7 +15,8 @@ async def get_task() -> dict[str, str] | None: return { "name": "被动技能", "description": "控制群组中的被动技能状态", - "usage": "通过 开启/关闭群被动 来控制群被
----------
" + "usage": "通过 开启/关闭群被动 来控制群被动
" + + " 示例:开启/关闭群被动早晚安
----------
" + "
".join([task.name for task in task_list]), } return None diff --git a/zhenxun/builtin_plugins/superuser/super_help/zhenxun_help.py b/zhenxun/builtin_plugins/superuser/super_help/zhenxun_help.py index 0a93a160..ff290dce 100644 --- a/zhenxun/builtin_plugins/superuser/super_help/zhenxun_help.py +++ b/zhenxun/builtin_plugins/superuser/super_help/zhenxun_help.py @@ -15,7 +15,8 @@ async def get_task() -> dict[str, str] | None: return { "name": "被动技能", "description": "控制群组中的被动技能状态", - "usage": "通过 开启/关闭群被动 来控制群被动
----------
" + "usage": "通过 开启/关闭群被动 来控制群被动
" + + " 示例:开启/关闭群被动早晚安
----------
" + "
".join([task.name for task in task_list]), } return None diff --git a/zhenxun/models/group_console.py b/zhenxun/models/group_console.py index 01839b14..410457c1 100644 --- a/zhenxun/models/group_console.py +++ b/zhenxun/models/group_console.py @@ -1,4 +1,4 @@ -from typing import Any, overload +from typing import Any, cast, overload from typing_extensions import Self from tortoise import fields @@ -79,24 +79,57 @@ class GroupConsole(Model): elif isinstance(data, list): return "".join(cls.format(item) for item in data) + @classmethod + async def __set_default_plugin_status(cls, group: Self) -> list[str]: + """设置新群组信息时默认插件关闭状态 + + 参数: + group: GroupConsole对象 + + 返回: + list[str]: 更新字段列表 + """ + task_modules = cast( + list[str], + await TaskInfo.filter(default_status=False).values_list( + "module", flat=True + ), + ) + plugin_modules = cast( + list[str], + await PluginInfo.filter( + plugin_type__in=[PluginType.NORMAL, PluginType.DEPENDANT], + default_status=False, + load_status=True, + ).values_list("module", flat=True), + ) + + if not task_modules and not plugin_modules: + return [] + + update_fields = [] + + if task_modules: + group.block_task = cls.convert_module_format(task_modules) + update_fields.append("block_task") + + if plugin_modules: + group.block_plugin = cls.convert_module_format(list(plugin_modules)) + update_fields.append("block_plugin") + + return update_fields + @classmethod async def create( cls, using_db: BaseDBAsyncClient | None = None, **kwargs: Any ) -> Self: """覆盖create方法""" group = await super().create(using_db=using_db, **kwargs) - if modules := await TaskInfo.filter(default_status=False).values_list( - "module", flat=True - ): - group.block_task = cls.convert_module_format(modules) # type: ignore - if modules := await PluginInfo.filter( - plugin_type__in=[PluginType.NORMAL, PluginType.DEPENDANT], - default_status=False, - ).values_list("module", flat=True): - group.block_plugin = cls.convert_module_format(modules) # type: ignore - await group.save( - using_db=using_db, update_fields=["block_plugin", "block_task"] - ) + + update_fields = await cls.__set_default_plugin_status(group) + if update_fields: + await group.save(using_db=using_db, update_fields=update_fields) + return group @classmethod @@ -110,20 +143,12 @@ class GroupConsole(Model): group, is_create = await super().get_or_create( defaults=defaults, using_db=using_db, **kwargs ) + if is_create: - if modules := await TaskInfo.filter(default_status=False).values_list( - "module", flat=True - ): - group.block_task = cls.convert_module_format(modules) # type: ignore - if modules := await PluginInfo.filter( - plugin_type__in=[PluginType.NORMAL, PluginType.DEPENDANT], - default_status=False, - load_status=True, - ).values_list("module", flat=True): - group.block_plugin = cls.convert_module_format(modules) # type: ignore - await group.save( - using_db=using_db, update_fields=["block_plugin", "block_task"] - ) + update_fields = await cls.__set_default_plugin_status(group) + if update_fields: + await group.save(using_db=using_db, update_fields=update_fields) + return group, is_create @classmethod @@ -137,20 +162,12 @@ class GroupConsole(Model): group, is_create = await super().update_or_create( defaults=defaults, using_db=using_db, **kwargs ) + if is_create: - if modules := await TaskInfo.filter(default_status=False).values_list( - "module", flat=True - ): - group.block_task = cls.convert_module_format(modules) # type: ignore - if modules := await PluginInfo.filter( - plugin_type__in=[PluginType.NORMAL, PluginType.DEPENDANT], - default_status=False, - load_status=True, - ).values_list("module", flat=True): - group.block_plugin = cls.convert_module_format(modules) # type: ignore - await group.save( - using_db=using_db, update_fields=["block_plugin", "block_task"] - ) + update_fields = await cls.__set_default_plugin_status(group) + if update_fields: + await group.save(using_db=using_db, update_fields=update_fields) + return group, is_create @classmethod