fix(sign_in): 修复签到命令 Rule 构造 NameError(MessageEvent 注解全局可见)

- rules.py 改为模块顶层导入 nonebot(NoneBot Rule 解析依赖参数注解在全局命名空间求值)
- 权限纯函数 is_allowed 拆至 permission.py(无 nonebot 依赖,保持可测性)
- 测试加载模块列表同步调整(config/api/service/permission)
This commit is contained in:
2026-08-16 09:05:08 +08:00
parent 9ee5545cac
commit 260651363a
3 changed files with 43 additions and 43 deletions

View File

@@ -1,49 +1,21 @@
"""独立签到插件 - 权限校验。
"""独立签到插件 - 权限校验NoneBot Rule
签到命令仅在白名单群聊(或管理员)中可用;私聊非管理员不可用。
与 onmyoji_gacha 的规则不同:抽卡规则私聊放行,签到规则更严格(群聊白名单)。
注意:本模块必须顶层导入 nonebotNoneBot Rule 解析依赖参数注解,
注解名需要在模块全局命名空间可见),纯函数逻辑见 permission.py。
"""
from __future__ import annotations
from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from nonebot.rule import Rule
def is_allowed(
user_id: int,
group_id: Optional[int],
*,
allowed_group_id: int,
allowed_user_id: int,
) -> bool:
"""签到权限纯函数:管理员任意场景可用;其他用户仅白名单群聊可用。
Args:
user_id: 消息发送者 QQ
group_id: 群聊 ID非群聊场景为 None
allowed_group_id: 白名单群聊
allowed_user_id: 管理员 QQ
"""
if user_id == allowed_user_id:
return True
return group_id is not None and group_id == allowed_group_id
from .config import Config
from .permission import is_allowed
def check_permission() -> Rule:
"""生成签到命令权限 Rule白名单群聊 + 管理员)。
延迟导入 nonebot与 config.py 同模式),保证纯函数在无 nonebot 的
测试环境中可加载。
"""
from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent
from .config import Config
"""生成签到命令权限 Rule白名单群聊 + 管理员)。"""
config = Config()