diff --git a/zhenxun/builtin_plugins/admin/admin_help.py b/zhenxun/builtin_plugins/admin/admin_help.py index 45c1773e..0b56da42 100644 --- a/zhenxun/builtin_plugins/admin/admin_help.py +++ b/zhenxun/builtin_plugins/admin/admin_help.py @@ -21,8 +21,6 @@ from zhenxun.utils.image_utils import ( ) from zhenxun.utils.rules import admin_check, ensure_group -base_config = Config.get("admin_bot_manage") - __plugin_meta__ = PluginMetadata( name="群组管理员帮助", description="管理员帮助列表", diff --git a/zhenxun/builtin_plugins/admin/admin_watch.py b/zhenxun/builtin_plugins/admin/admin_watch.py index 919e4bd3..7fe7fdb5 100644 --- a/zhenxun/builtin_plugins/admin/admin_watch.py +++ b/zhenxun/builtin_plugins/admin/admin_watch.py @@ -3,7 +3,7 @@ from nonebot.adapters.onebot.v11 import GroupAdminNoticeEvent from nonebot.plugin import PluginMetadata from zhenxun.configs.config import Config -from zhenxun.configs.utils import PluginExtraData +from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.models.level_user import LevelUser from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType @@ -13,7 +13,18 @@ __plugin_meta__ = PluginMetadata( description="检测群管理员变动, 添加与删除管理员默认权限, 当配置项 ADMIN_DEFAULT_AUTH 为空时, 不会添加管理员权限", usage="", extra=PluginExtraData( - author="HibiKier", version="0.1", plugin_type=PluginType.HIDDEN + author="HibiKier", + version="0.1", + plugin_type=PluginType.HIDDEN, + configs=[ + RegisterConfig( + module="admin_bot_manage", + key="ADMIN_DEFAULT_AUTH", + value=5, + help="设置群欢迎消息所需要的管理员权限等级", + default_value=5, + ) + ], ).dict(), ) diff --git a/zhenxun/builtin_plugins/admin/welcome_message.py b/zhenxun/builtin_plugins/admin/welcome_message.py index 7909a036..6cb6c8dc 100644 --- a/zhenxun/builtin_plugins/admin/welcome_message.py +++ b/zhenxun/builtin_plugins/admin/welcome_message.py @@ -35,6 +35,7 @@ __plugin_meta__ = PluginMetadata( admin_level=base_config.get("SET_GROUP_WELCOME_MESSAGE_LEVEL", 2), configs=[ RegisterConfig( + module="admin_bot_manage", key="SET_GROUP_WELCOME_MESSAGE_LEVEL", value=2, help="设置群欢迎消息所需要的管理员权限等级", diff --git a/zhenxun/builtin_plugins/hooks/_auth_checker.py b/zhenxun/builtin_plugins/hooks/_auth_checker.py index e5cd6be9..edc71a6e 100644 --- a/zhenxun/builtin_plugins/hooks/_auth_checker.py +++ b/zhenxun/builtin_plugins/hooks/_auth_checker.py @@ -417,9 +417,12 @@ class AuthChecker: """ if group_id := session.id3 or session.id2: text = message.extract_plain_text() - group, _ = await GroupConsole.get_or_create( + group = await GroupConsole.get_or_none( group_id=group_id, channel_id__isnull=True ) + if not group: + """群不存在""" + raise IgnoredException("群不存在") if group.level < 0: """群权限小于0""" logger.debug( diff --git a/zhenxun/builtin_plugins/platform/qq/group_handle.py b/zhenxun/builtin_plugins/platform/qq/group_handle.py index a0bb61cc..5f9349e6 100644 --- a/zhenxun/builtin_plugins/platform/qq/group_handle.py +++ b/zhenxun/builtin_plugins/platform/qq/group_handle.py @@ -49,7 +49,7 @@ __plugin_meta__ = PluginMetadata( module="invite_manager", key="flag", value=True, - help="强制拉群后进群回复的内容", + help="强制拉群后进群退出并回复内容", default_value=True, type=bool, ), @@ -113,91 +113,106 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent | GroupMemberIncreaseEvent group = await GroupConsole.get_or_none( group_id=group_id, channel_id__isnull=True ) - if (not group or group.group_flag == 0) and base_config.get("flag"): - """群聊不存在或被强制拉群,退出该群""" - try: - if result_msg := base_config.get("message"): - await bot.send_group_msg( - group_id=event.group_id, message=result_msg + if not group or group.group_flag == 0: + """群聊不存在或被强制拉群""" + if base_config.get("flag"): + """退出群组""" + try: + if result_msg := base_config.get("message"): + await bot.send_group_msg( + group_id=event.group_id, message=result_msg + ) + await bot.set_group_leave(group_id=event.group_id) + await bot.send_private_msg( + user_id=int(superuser), + message=f"触发强制入群保护,已成功退出群聊 {group_id}...", ) - await bot.set_group_leave(group_id=event.group_id) - await bot.send_private_msg( - user_id=int(superuser), - message=f"触发强制入群保护,已成功退出群聊 {group_id}...", - ) - logger.info( - f"强制拉群或未有群信息,退出群聊成功", - "入群检测", - group_id=event.group_id, - ) - if req := await FgRequest.get_or_none(group_id=group_id): - req.handle_type = RequestHandleType.IGNORE - await req.save(update_fields=["handle_type"]) - except Exception as e: - logger.error( - f"强制拉群或未有群信息,退出群聊失败", - "入群检测", - group_id=event.group_id, - e=e, - ) - await bot.send_private_msg( - user_id=int(superuser), - message=f"触发强制入群保护,退出群聊 {event.group_id} 失败...", - ) - elif not GroupConsole.exists(group_id=group_id, channel_id__isnull=True): - """默认群功能开关""" - block_plugin = "" - if plugin_list := await PluginInfo.filter(default_status=False).all(): - for plugin in plugin_list: - block_plugin += f"{plugin.module}," - group_info = await bot.get_group_info(group_id=event.group_id) - await GroupConsole.create( - group_id=group_info["group_id"], - group_name=group_info["group_name"], - max_member_count=group_info["max_member_count"], - member_count=group_info["member_count"], - group_flag=1, - block_plugin=block_plugin, - platform="qq", - ) - admin_default_auth = Config.get_config( - "admin_bot_manage", "ADMIN_DEFAULT_AUTH" - ) - # 即刻刷新权限 - for user_info in await bot.get_group_member_list(group_id=event.group_id): - """即刻刷新权限""" - if ( - user_info["role"] - in [ - "owner", - "admin", - ] - and not await LevelUser.is_group_flag( - user_info["user_id"], group_id + logger.info( + f"强制拉群或未有群信息,退出群聊成功", + "入群检测", + group_id=event.group_id, ) - and admin_default_auth is not None + if req := await FgRequest.get_or_none( + group_id=group_id, handle_type__isnull=True + ): + req.handle_type = RequestHandleType.IGNORE + await req.save(update_fields=["handle_type"]) + except Exception as e: + logger.error( + f"强制拉群或未有群信息,退出群聊失败", + "入群检测", + group_id=event.group_id, + e=e, + ) + await bot.send_private_msg( + user_id=int(superuser), + message=f"触发强制入群保护,退出群聊 {event.group_id} 失败...", + ) + await GroupConsole.filter(group_id=group_id).delete() + else: + """允许群组并设置群认证,默认群功能开关""" + if group: + await GroupConsole.filter( + group_id=group_id, channel_id__isnull=True + ).update(group_flag=1) + else: + block_plugin = "" + if plugin_list := await PluginInfo.filter( + default_status=False + ).all(): + for plugin in plugin_list: + block_plugin += f"{plugin.module}," + group_info = await bot.get_group_info(group_id=event.group_id) + await GroupConsole.create( + group_id=group_info["group_id"], + group_name=group_info["group_name"], + max_member_count=group_info["max_member_count"], + member_count=group_info["member_count"], + group_flag=1, + block_plugin=block_plugin, + platform="qq", + ) + """刷新群管理员权限""" + admin_default_auth = Config.get_config( + "admin_bot_manage", "ADMIN_DEFAULT_AUTH" + ) + # 即刻刷新权限 + for user_info in await bot.get_group_member_list( + group_id=event.group_id ): - await LevelUser.set_level( - user_info["user_id"], - user_info["group_id"], - admin_default_auth, - ) - logger.debug( - f"添加默认群管理员权限: {admin_default_auth}", - "入群检测", - session=user_info["user_id"], - group_id=user_info["group_id"], - ) - if str(user_info["user_id"]) in bot.config.superusers: - await LevelUser.set_level( - user_info["user_id"], user_info["group_id"], 9 - ) - logger.debug( - f"添加超级用户权限: 9", - "入群检测", - session=user_info["user_id"], - group_id=user_info["group_id"], - ) + """即刻刷新权限""" + if ( + user_info["role"] + in [ + "owner", + "admin", + ] + and not await LevelUser.is_group_flag( + user_info["user_id"], group_id + ) + and admin_default_auth is not None + ): + await LevelUser.set_level( + user_info["user_id"], + user_info["group_id"], + admin_default_auth, + ) + logger.debug( + f"添加默认群管理员权限: {admin_default_auth}", + "入群检测", + session=user_info["user_id"], + group_id=user_info["group_id"], + ) + if str(user_info["user_id"]) in bot.config.superusers: + await LevelUser.set_level( + user_info["user_id"], user_info["group_id"], 9 + ) + logger.debug( + f"添加超级用户权限: 9", + "入群检测", + session=user_info["user_id"], + group_id=user_info["group_id"], + ) else: join_time = datetime.now() user_info = await bot.get_group_member_info( diff --git a/zhenxun/configs/utils/__init__.py b/zhenxun/configs/utils/__init__.py index d9f4367e..4ba9c47c 100644 --- a/zhenxun/configs/utils/__init__.py +++ b/zhenxun/configs/utils/__init__.py @@ -67,7 +67,7 @@ class ConfigGroup(BaseModel): """配置项列表""" def get(self, c: str, default: Any = None) -> Any: - cfg = self.configs.get(c) + cfg = self.configs.get(c.upper()) if cfg is not None: if cfg.value is not None: return cfg.value