nonebot2/nonebot/permission.py

120 lines
3.0 KiB
Python
Raw Normal View History

2022-01-19 16:16:56 +08:00
"""本模块是 {ref}`nonebot.matcher.Matcher.permission` 的类型定义。
2020-09-14 20:48:03 +08:00
每个{ref}`事件响应器 <nonebot.matcher.Matcher>`
拥有一个 {ref}`nonebot.permission.Permission`其中是 `PermissionChecker` 的集合
只要有一个 `PermissionChecker` 检查结果为 `True` 时就会继续运行
2020-09-14 20:48:03 +08:00
2022-01-16 11:30:09 +08:00
FrontMatter:
mdx:
format: md
2022-01-16 11:30:09 +08:00
sidebar_position: 6
description: nonebot.permission 模块
2020-09-14 20:48:03 +08:00
"""
2020-08-17 16:09:41 +08:00
2021-11-14 18:51:23 +08:00
from nonebot.adapters import Bot, Event
from nonebot.internal.permission import USER as USER
from nonebot.internal.permission import Permission as Permission
from nonebot.internal.permission import User as User
from nonebot.params import EventType
2020-08-17 16:09:41 +08:00
class Message:
2022-01-19 16:16:56 +08:00
"""检查是否为消息事件"""
__slots__ = ()
def __repr__(self) -> str:
return "Message()"
async def __call__(self, type: str = EventType()) -> bool:
return type == "message"
2020-08-17 16:09:41 +08:00
class Notice:
2022-01-19 16:16:56 +08:00
"""检查是否为通知事件"""
__slots__ = ()
def __repr__(self) -> str:
return "Notice()"
async def __call__(self, type: str = EventType()) -> bool:
return type == "notice"
2020-08-17 16:09:41 +08:00
class Request:
2022-01-19 16:16:56 +08:00
"""检查是否为请求事件"""
__slots__ = ()
def __repr__(self) -> str:
return "Request()"
async def __call__(self, type: str = EventType()) -> bool:
return type == "request"
2020-08-17 16:09:41 +08:00
class MetaEvent:
2022-01-19 16:16:56 +08:00
"""检查是否为元事件"""
__slots__ = ()
def __repr__(self) -> str:
return "MetaEvent()"
async def __call__(self, type: str = EventType()) -> bool:
return type == "meta_event"
2020-08-17 16:09:41 +08:00
2022-01-19 16:16:56 +08:00
MESSAGE: Permission = Permission(Message())
"""匹配任意 `message` 类型事件
仅在需要同时捕获不同类型事件时使用优先使用 message type Matcher
2020-09-14 20:48:03 +08:00
"""
2022-01-19 16:16:56 +08:00
NOTICE: Permission = Permission(Notice())
"""匹配任意 `notice` 类型事件
仅在需要同时捕获不同类型事件时使用优先使用 notice type Matcher
2020-09-14 20:48:03 +08:00
"""
2022-01-19 16:16:56 +08:00
REQUEST: Permission = Permission(Request())
"""匹配任意 `request` 类型事件
仅在需要同时捕获不同类型事件时使用优先使用 request type Matcher
2020-09-14 20:48:03 +08:00
"""
2022-01-19 16:16:56 +08:00
METAEVENT: Permission = Permission(MetaEvent())
"""匹配任意 `meta_event` 类型事件
仅在需要同时捕获不同类型事件时使用优先使用 meta_event type Matcher
2020-09-14 20:48:03 +08:00
"""
2020-08-17 16:09:41 +08:00
class SuperUser:
2022-01-19 16:16:56 +08:00
"""检查当前事件是否是消息事件且属于超级管理员"""
__slots__ = ()
def __repr__(self) -> str:
return "Superuser()"
async def __call__(self, bot: Bot, event: Event) -> bool:
try:
user_id = event.get_user_id()
except Exception:
return False
return (
f"{bot.adapter.get_name().split(maxsplit=1)[0].lower()}:{user_id}"
in bot.config.superusers
or user_id in bot.config.superusers # 兼容旧配置
)
2020-12-10 02:13:25 +08:00
2022-01-19 16:16:56 +08:00
SUPERUSER: Permission = Permission(SuperUser())
"""匹配任意超级用户事件"""
2022-01-19 16:16:56 +08:00
__autodoc__ = {
"Permission": True,
"Permission.__call__": True,
"User": True,
"USER": True,
}