zhenxun_bot/zhenxun/utils/rules.py

92 lines
2.1 KiB
Python
Raw Normal View History

2024-02-04 04:18:54 +08:00
from nonebot.internal.rule import Rule
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
if session.id and session.group:
2024-02-04 04:18:54 +08:00
level = a
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(
session.id, session.group.id, int(level)
)
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
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)