💡 add rule utils docstring

This commit is contained in:
yanyongyu
2020-09-13 13:01:23 +08:00
parent ce2700c1d2
commit f79eabdc61
15 changed files with 212 additions and 89 deletions

View File

@ -4,14 +4,15 @@
import asyncio
from nonebot.utils import run_sync
from nonebot.typing import Bot, Event, Union, NoReturn, PermissionChecker
from nonebot.typing import Bot, Event, Union, NoReturn, Callable, Awaitable, PermissionChecker
class Permission:
__slots__ = ("checkers",)
def __init__(self, *checkers: PermissionChecker) -> None:
self.checkers = list(checkers)
def __init__(self, *checkers: Callable[[Bot, Event],
Awaitable[bool]]) -> None:
self.checkers = set(checkers)
async def __call__(self, bot: Bot, event: Event) -> bool:
if not self.checkers:
@ -25,13 +26,13 @@ class Permission:
def __or__(self, other: Union["Permission",
PermissionChecker]) -> "Permission":
checkers = [*self.checkers]
checkers = self.checkers.copy()
if isinstance(other, Permission):
checkers.extend(other.checkers)
checkers |= other.checkers
elif asyncio.iscoroutinefunction(other):
checkers.append(other)
checkers.add(other)
else:
checkers.append(run_sync(other))
checkers.add(run_sync(other))
return Permission(*checkers)