mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-05 19:36:43 +08:00
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
import contextlib
|
|
from typing import Annotated, Type
|
|
|
|
from nonebot.adapters import Event
|
|
from nonebot.matcher import Matcher
|
|
from nonebot.params import Depends, EventPlainText, EventToMe
|
|
from nonebot.permission import SUPERUSER
|
|
from nonebot.rule import Rule
|
|
from nonebot.typing import T_State
|
|
from nonebot_plugin_saa import extract_target
|
|
|
|
from ..platform import platform_manager
|
|
from ..plugin_config import plugin_config
|
|
|
|
|
|
def _configurable_to_me(to_me: bool = EventToMe()):
|
|
if plugin_config.bison_to_me:
|
|
return to_me
|
|
else:
|
|
return True
|
|
|
|
|
|
configurable_to_me = Rule(_configurable_to_me)
|
|
|
|
common_platform = [
|
|
p.platform_name
|
|
for p in filter(
|
|
lambda platform: platform.enabled and platform.is_common,
|
|
platform_manager.values(),
|
|
)
|
|
]
|
|
|
|
|
|
def gen_handle_cancel(matcher: Type[Matcher], message: str):
|
|
async def _handle_cancel(text: Annotated[str, EventPlainText()]):
|
|
if text == "取消":
|
|
await matcher.finish(message)
|
|
|
|
return Depends(_handle_cancel)
|
|
|
|
|
|
def ensure_user_info(matcher: Type[Matcher]):
|
|
async def _check_user_info(state: T_State):
|
|
if not state.get("target_user_info"):
|
|
await matcher.finish(
|
|
"No target_user_info set, this shouldn't happen, please issue"
|
|
)
|
|
|
|
return _check_user_info
|
|
|
|
|
|
async def set_target_user_info(event: Event, state: T_State):
|
|
user = extract_target(event)
|
|
state["target_user_info"] = user
|
|
|
|
|
|
def admin_permission():
|
|
permission = SUPERUSER
|
|
with contextlib.suppress(ImportError):
|
|
from nonebot.adapters.onebot.v11.permission import GROUP_ADMIN, GROUP_OWNER
|
|
|
|
permission = permission | GROUP_ADMIN | GROUP_OWNER
|
|
|
|
return permission
|