From 6c189e81dc3f67c5bc42ec7fec824935bb5e8869 Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Tue, 26 Nov 2024 19:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E9=99=90=E5=88=B6=E6=9F=A5=E8=AF=A2=E6=AC=A1?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builtin_plugins/hooks/_auth_checker.py | 79 +++++++++++++------ 1 file changed, 54 insertions(+), 25 deletions(-) diff --git a/zhenxun/builtin_plugins/hooks/_auth_checker.py b/zhenxun/builtin_plugins/hooks/_auth_checker.py index 0f50a1b4..bbc644ac 100644 --- a/zhenxun/builtin_plugins/hooks/_auth_checker.py +++ b/zhenxun/builtin_plugins/hooks/_auth_checker.py @@ -84,6 +84,12 @@ class LimitManage: key_type = user_id if group_id and limit.watch_type == LimitWatchType.GROUP: key_type = channel_id or group_id + logger.debug( + f"解除对象: {key_type} 的block限制", + "AuthChecker", + session=user_id, + group_id=group_id, + ) limiter.set_false(key_type) @classmethod @@ -152,11 +158,17 @@ class LimitManage: await MessageUtils.build_message(limit.result).send() logger.debug( f"{limit.module}({limit.limit_type}) 正在限制中...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException(f"{limit.module} 正在限制中...") else: + logger.debug( + f"开始进行限制 {limit.module}({limit.limit_type})...", + "AuthChecker", + session=user_id, + group_id=group_id, + ) if isinstance(limiter, FreqLimiter): limiter.start_cd(key_type) if isinstance(limiter, UserBlockLimiter): @@ -230,7 +242,10 @@ class AuthChecker: user = await UserConsole.get_user(user_id, session.platform) except IntegrityError as e: logger.debug( - "重复创建用户,已跳过全选该次权限...", "HOOK", session=session, e=e + "重复创建用户,已跳过该次权限...", + "AuthChecker", + session=session, + e=e, ) return if plugin := await PluginInfo.get_or_none(module_path=module_path): @@ -255,7 +270,7 @@ class AuthChecker: await self.auth_limit(plugin, session) except IsSuperuserException: logger.debug( - "超级用户或被ban跳过权限检测...", "HOOK", session=session + "超级用户或被ban跳过权限检测...", "AuthChecker", session=session ) except IgnoredException: is_ignore = True @@ -279,7 +294,9 @@ class AuthChecker: if u := await UserConsole.get_user(user_id): u.gold = 0 await u.save(update_fields=["gold"]) - logger.debug(f"调用功能花费金币: {cost_gold}", "HOOK", session=session) + logger.debug( + f"调用功能花费金币: {cost_gold}", "AuthChecker", session=session + ) if is_ignore: raise IgnoredException("权限检测 ignore") @@ -306,11 +323,12 @@ class AuthChecker: if not group_id: group_id = channel_id channel_id = None - limit_list: list[PluginLimit] = await plugin.plugin_limit.filter( - status=True - ).all() # type: ignore - for limit in limit_list: - LimitManage.add_limit(limit) + if plugin.module not in LimitManage.add_module: + limit_list: list[PluginLimit] = await plugin.plugin_limit.filter( + status=True + ).all() # type: ignore + for limit in limit_list: + LimitManage.add_limit(limit) if user_id: await LimitManage.check( plugin.module, user_id, group_id, channel_id, session @@ -345,7 +363,7 @@ class AuthChecker: ).send(reply_to=True) logger.debug( f"{plugin.name}({plugin.module}) 超级管理员禁用了该群此功能...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("超级管理员禁用了该群此功能...") @@ -358,7 +376,7 @@ class AuthChecker: ) logger.debug( f"{plugin.name}({plugin.module}) 未开启此功能...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("该群未开启此功能...") @@ -372,11 +390,14 @@ class AuthChecker: ).send(reply_to=True) except Exception as e: logger.error( - "auth_plugin 发送消息失败", "HOOK", session=session, e=e + "auth_plugin 发送消息失败", + "AuthChecker", + session=session, + e=e, ) logger.debug( f"{plugin.name}({plugin.module}) 该插件在群组中已被禁用...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("该插件在群组中已被禁用...") @@ -392,11 +413,14 @@ class AuthChecker: ).send() except Exception as e: logger.error( - "auth_admin 发送消息失败", "HOOK", session=session, e=e + "auth_admin 发送消息失败", + "AuthChecker", + session=session, + e=e, ) logger.debug( f"{plugin.name}({plugin.module}) 该插件在私聊中已被禁用...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("该插件在私聊中已被禁用...") @@ -406,7 +430,7 @@ class AuthChecker: raise IsSuperuserException() logger.debug( f"{plugin.name}({plugin.module}) 全局未开启此功能...", - "HOOK", + "AuthChecker", session=session, ) if self.is_send_limit_message(plugin, sid) and not is_poke: @@ -439,11 +463,14 @@ class AuthChecker: ).send(reply_to=True) except Exception as e: logger.error( - "auth_admin 发送消息失败", "HOOK", session=session, e=e + "auth_admin 发送消息失败", + "AuthChecker", + session=session, + e=e, ) logger.debug( f"{plugin.name}({plugin.module}) 管理员权限不足...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("管理员权限不足...") @@ -454,11 +481,11 @@ class AuthChecker: ).send() except Exception as e: logger.error( - "auth_admin 发送消息失败", "HOOK", session=session, e=e + "auth_admin 发送消息失败", "AuthChecker", session=session, e=e ) logger.debug( f"{plugin.name}({plugin.module}) 管理员权限不足...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("权限不足") @@ -484,21 +511,21 @@ class AuthChecker: """群权限小于0""" logger.debug( "群黑名单, 群权限-1...", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException("群黑名单") if not group.status: """群休眠""" if text.strip() != "醒来": - logger.debug("群休眠状态...", "HOOK", session=session) + logger.debug("群休眠状态...", "AuthChecker", session=session) raise IgnoredException("群休眠状态") if plugin.level > group.level: """插件等级大于群等级""" logger.debug( f"{plugin.name}({plugin.module}) 群等级限制.." f"该功能需要的群等级: {plugin.level}..", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException(f"{plugin.name}({plugin.module}) 群等级限制...") @@ -523,11 +550,13 @@ class AuthChecker: f"金币不足..该功能需要{plugin.cost_gold}金币.." ).send() except Exception as e: - logger.error("auth_cost 发送消息失败", "HOOK", session=session, e=e) + logger.error( + "auth_cost 发送消息失败", "AuthChecker", session=session, e=e + ) logger.debug( f"{plugin.name}({plugin.module}) 金币限制.." f"该功能需要{plugin.cost_gold}金币..", - "HOOK", + "AuthChecker", session=session, ) raise IgnoredException(f"{plugin.name}({plugin.module}) 金币限制...")