2024-02-04 04:18:54 +08:00
|
|
|
|
from nonebot.internal.rule import Rule
|
2024-10-05 22:37:30 +08:00
|
|
|
|
from nonebot.adapters import Bot, Event
|
2024-02-04 04:18:54 +08:00
|
|
|
|
from nonebot.permission import SUPERUSER
|
2024-10-18 18:57:55 +08:00
|
|
|
|
from nonebot_plugin_uninfo import Uninfo
|
|
|
|
|
|
from nonebot_plugin_session import EventSession
|
2024-02-04 04:18:54 +08:00
|
|
|
|
|
|
|
|
|
|
from zhenxun.configs.config import Config
|
|
|
|
|
|
from zhenxun.models.level_user import LevelUser
|
2024-10-18 18:57:55 +08:00
|
|
|
|
from zhenxun.utils.platform import PlatformUtils
|
2024-02-04 04:18:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def admin_check(a: int | str, key: str | None = None) -> Rule:
|
|
|
|
|
|
"""
|
|
|
|
|
|
管理员权限等级检查
|
|
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
|
a: 权限等级或 配置项 module
|
|
|
|
|
|
key: 配置项 key.
|
|
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
|
Rule: Rule
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2024-10-18 18:57:55 +08:00
|
|
|
|
async def _rule(bot: Bot, event: Event, session: Uninfo) -> bool:
|
2024-02-04 04:18:54 +08:00
|
|
|
|
if await SUPERUSER(bot, event):
|
|
|
|
|
|
return True
|
2024-10-18 18:57:55 +08:00
|
|
|
|
if PlatformUtils.is_qbot(session):
|
|
|
|
|
|
"""官bot接口,放弃所有权限检查"""
|
|
|
|
|
|
return False
|
2024-10-22 10:38:40 +08:00
|
|
|
|
if session.group:
|
2024-02-04 04:18:54 +08:00
|
|
|
|
level = a
|
2024-10-05 22:37:30 +08:00
|
|
|
|
if isinstance(a, str) and key:
|
2024-02-04 04:18:54 +08:00
|
|
|
|
level = Config.get_config(a, key)
|
|
|
|
|
|
if level is not None:
|
2024-02-26 03:04:32 +08:00
|
|
|
|
return bool(
|
2024-10-18 18:57:55 +08:00
|
|
|
|
await LevelUser.check_level(
|
2024-10-22 10:38:40 +08:00
|
|
|
|
session.user.id, session.group.id, int(level)
|
2024-10-18 18:57:55 +08:00
|
|
|
|
)
|
2024-02-26 03:04:32 +08:00
|
|
|
|
)
|
2024-02-04 04:18:54 +08:00
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
return Rule(_rule)
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-18 18:57:55 +08:00
|
|
|
|
def ensure_group(session: Uninfo) -> bool:
|
2024-02-04 04:18:54 +08:00
|
|
|
|
"""
|
|
|
|
|
|
是否在群聊中
|
|
|
|
|
|
|
|
|
|
|
|
参数:
|
2024-10-18 18:57:55 +08:00
|
|
|
|
session: Uninfo
|
2024-02-04 04:18:54 +08:00
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
|
bool: bool
|
|
|
|
|
|
"""
|
2024-10-18 18:57:55 +08:00
|
|
|
|
return bool(session.group)
|
2024-03-18 17:50:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ensure_private(session: EventSession) -> bool:
|
|
|
|
|
|
"""
|
|
|
|
|
|
是否在私聊中
|
|
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
|
session: session
|
|
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
|
bool: bool
|
|
|
|
|
|
"""
|
|
|
|
|
|
return not session.id3 and not session.id2
|
2024-10-05 22:37:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|