diff --git a/__version__ b/__version__ index 9985c50b..b8025e04 100644 --- a/__version__ +++ b/__version__ @@ -1 +1 @@ -__version__: v0.2.3-5f361ff +__version__: v0.2.3-f3e5c9e diff --git a/zhenxun/builtin_plugins/admin/admin_watch.py b/zhenxun/builtin_plugins/admin/admin_watch.py index 7fe7fdb5..45947b52 100644 --- a/zhenxun/builtin_plugins/admin/admin_watch.py +++ b/zhenxun/builtin_plugins/admin/admin_watch.py @@ -1,16 +1,18 @@ from nonebot import on_notice -from nonebot.adapters.onebot.v11 import GroupAdminNoticeEvent from nonebot.plugin import PluginMetadata +from nonebot.adapters.onebot.v11 import GroupAdminNoticeEvent -from zhenxun.configs.config import Config -from zhenxun.configs.utils import PluginExtraData, RegisterConfig -from zhenxun.models.level_user import LevelUser from zhenxun.services.log import logger +from zhenxun.configs.config import Config from zhenxun.utils.enum import PluginType +from zhenxun.utils.rules import notice_rule +from zhenxun.models.level_user import LevelUser +from zhenxun.configs.utils import RegisterConfig, PluginExtraData __plugin_meta__ = PluginMetadata( name="群管理员变动监测", - description="检测群管理员变动, 添加与删除管理员默认权限, 当配置项 ADMIN_DEFAULT_AUTH 为空时, 不会添加管理员权限", + description="""检测群管理员变动, 添加与删除管理员默认权限, + 当配置项 ADMIN_DEFAULT_AUTH 为空时, 不会添加管理员权限""", usage="", extra=PluginExtraData( author="HibiKier", @@ -29,7 +31,7 @@ __plugin_meta__ = PluginMetadata( ) -admin_notice = on_notice(priority=5) +admin_notice = on_notice(priority=5, rule=notice_rule(GroupAdminNoticeEvent)) base_config = Config.get("admin_bot_manage") @@ -52,7 +54,8 @@ async def _(event: GroupAdminNoticeEvent): ) else: logger.warning( - f"配置项 MODULE: [admin_bot_manage] | KEY: [ADMIN_DEFAULT_AUTH] 为空" + "配置项 MODULE: [admin_bot_manage] |" + " KEY: [ADMIN_DEFAULT_AUTH] 为空" ) elif event.sub_type == "unset": await LevelUser.delete_level(str(event.user_id), str(event.group_id)) diff --git a/zhenxun/builtin_plugins/admin/group_member_update/__init__.py b/zhenxun/builtin_plugins/admin/group_member_update/__init__.py index 2c9fbd21..72532b09 100644 --- a/zhenxun/builtin_plugins/admin/group_member_update/__init__.py +++ b/zhenxun/builtin_plugins/admin/group_member_update/__init__.py @@ -1,19 +1,19 @@ import nonebot from nonebot import on_notice from nonebot.adapters import Bot -from nonebot.adapters.onebot.v11 import GroupIncreaseNoticeEvent from nonebot.plugin import PluginMetadata -from nonebot_plugin_alconna import Alconna, Arparma, on_alconna -from nonebot_plugin_apscheduler import scheduler from nonebot_plugin_session import EventSession +from nonebot_plugin_apscheduler import scheduler +from nonebot_plugin_alconna import Alconna, Arparma, on_alconna +from nonebot.adapters.onebot.v11 import GroupIncreaseNoticeEvent -from zhenxun.configs.config import BotConfig -from zhenxun.configs.utils import PluginExtraData from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType +from zhenxun.configs.config import BotConfig from zhenxun.utils.message import MessageUtils from zhenxun.utils.platform import PlatformUtils -from zhenxun.utils.rules import admin_check, ensure_group +from zhenxun.configs.utils import PluginExtraData +from zhenxun.utils.rules import admin_check, notice_rule, ensure_group from ._data_source import MemberUpdateManage @@ -42,7 +42,7 @@ _matcher = on_alconna( ) -_notice = on_notice(priority=1, block=False) +_notice = on_notice(priority=1, block=False, rule=notice_rule(GroupIncreaseNoticeEvent)) @_matcher.handle() diff --git a/zhenxun/builtin_plugins/hooks/ban_hook.py b/zhenxun/builtin_plugins/hooks/ban_hook.py index 675f04c6..b0d3d4d6 100644 --- a/zhenxun/builtin_plugins/hooks/ban_hook.py +++ b/zhenxun/builtin_plugins/hooks/ban_hook.py @@ -1,19 +1,19 @@ import logging -from nonebot.adapters import Bot, Event -from nonebot.exception import IgnoredException -from nonebot.matcher import Matcher -from nonebot.message import run_preprocessor from nonebot.typing import T_State +from nonebot.matcher import Matcher from nonebot_plugin_alconna import At +from nonebot.adapters import Bot, Event +from nonebot.message import run_preprocessor +from nonebot.exception import IgnoredException from nonebot_plugin_session import EventSession from zhenxun.configs.config import Config +from zhenxun.utils.enum import PluginType +from zhenxun.utils.utils import FreqLimiter +from zhenxun.utils.message import MessageUtils from zhenxun.models.ban_console import BanConsole from zhenxun.models.group_console import GroupConsole -from zhenxun.utils.enum import PluginType -from zhenxun.utils.message import MessageUtils -from zhenxun.utils.utils import FreqLimiter Config.add_plugin_config( "hook", @@ -58,12 +58,12 @@ async def _( else: time = abs(int(time)) if time < 60: - time_str = str(time) + " 秒" + time_str = f"{time!s} 秒" else: minute = int(time / 60) if minute > 60: - hours = int(minute / 60) - minute = minute % 60 + hours = minute // 60 + minute %= 60 time_str = f"{hours} 小时 {minute}分钟" else: time_str = f"{minute} 分钟" diff --git a/zhenxun/builtin_plugins/platform/qq/group_handle.py b/zhenxun/builtin_plugins/platform/qq/group_handle.py index 2e10b79a..d5bea4e2 100644 --- a/zhenxun/builtin_plugins/platform/qq/group_handle.py +++ b/zhenxun/builtin_plugins/platform/qq/group_handle.py @@ -18,6 +18,7 @@ from nonebot.adapters.onebot.v12 import ( ) from zhenxun.services.log import logger +from zhenxun.utils.rules import notice_rule from zhenxun.utils.utils import FreqLimiter from zhenxun.utils.message import MessageUtils from zhenxun.models.fg_request import FgRequest @@ -95,9 +96,17 @@ limit_cd = base_config.get("welcome_msg_cd") _flmt = FreqLimiter(limit_cd) -group_increase_handle = on_notice(priority=1, block=False) +group_increase_handle = on_notice( + priority=1, + block=False, + rule=notice_rule([GroupIncreaseNoticeEvent, GroupMemberIncreaseEvent]), +) """群员增加处理""" -group_decrease_handle = on_notice(priority=1, block=False) +group_decrease_handle = on_notice( + priority=1, + block=False, + rule=notice_rule([GroupDecreaseNoticeEvent, GroupMemberDecreaseEvent]), +) """群员减少处理""" add_group = on_request(priority=1, block=False) """加群同意请求""" diff --git a/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py b/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py index 8e2ac040..85c75b4a 100644 --- a/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py +++ b/zhenxun/builtin_plugins/platform/qq/group_handle/__init__.py @@ -11,6 +11,7 @@ from nonebot.adapters.onebot.v12 import ( ) from zhenxun.utils.enum import PluginType +from zhenxun.utils.rules import notice_rule from zhenxun.utils.platform import PlatformUtils from zhenxun.utils.common_utils import CommonUtils from zhenxun.configs.config import Config, BotConfig @@ -82,9 +83,17 @@ base_config = Config.get("invite_manager") limit_cd = base_config.get("welcome_msg_cd") -group_increase_handle = on_notice(priority=1, block=False) +group_increase_handle = on_notice( + priority=1, + block=False, + rule=notice_rule([GroupIncreaseNoticeEvent, GroupMemberIncreaseEvent]), +) """群员增加处理""" -group_decrease_handle = on_notice(priority=1, block=False) +group_decrease_handle = on_notice( + priority=1, + block=False, + rule=notice_rule([GroupMemberDecreaseEvent, GroupMemberIncreaseEvent]), +) """群员减少处理""" add_group = on_request(priority=1, block=False) """加群同意请求""" diff --git a/zhenxun/utils/rules.py b/zhenxun/utils/rules.py index f3381a48..1be97ed1 100644 --- a/zhenxun/utils/rules.py +++ b/zhenxun/utils/rules.py @@ -1,5 +1,5 @@ -from nonebot.adapters import Bot, Event from nonebot.internal.rule import Rule +from nonebot.adapters import Bot, Event from nonebot.permission import SUPERUSER from nonebot_plugin_session import EventSession, SessionLevel @@ -24,7 +24,7 @@ def admin_check(a: int | str, key: str | None = None) -> Rule: return True if session.id1 and session.id2: level = a - if type(a) == str and key: + if isinstance(a, str) and key: level = Config.get_config(a, key) if level is not None: return bool( @@ -59,3 +59,26 @@ def ensure_private(session: EventSession) -> bool: bool: bool """ return not session.id3 and not session.id2 + + +def notice_rule(event_type: type | list[type]) -> Rule: + """ + Notice限制 + + 参数: + event_type: Event类型 + + 返回: + Rule: Rule + """ + + async def _rule(event: Event) -> bool: + if isinstance(event_type, list): + for et in event_type: + if isinstance(event, et): + return True + else: + return isinstance(event, event_type) + return False + + return Rule(_rule)