mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-09-29 00:32:06 +08:00
* bugfix:修复notice事件扩散问题 * 优化并发调度 * bugfix:修复签到样式 * bugfix:功能调用统计修复 * bugfix:修复私聊时功能调用统计显示已退群问题 * 提高插件适配兼容性 * 优化发送队列 * 修改权限检查设计 * 继续修改权限检查设计 * 完善权限检查设计 * 优化sqlite配置 * 优化数据库初始化 * 代码整理,无用代码清理 * bugfix:修复启动时数据库校验问题 * bugfix:修复预算裁剪过于激进问题
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from dataclasses import dataclass
|
|
import inspect
|
|
from typing import Any
|
|
|
|
import nonebot.message as nb_message
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class AuthPatchGuardResult:
|
|
ok: bool
|
|
reason: str = ""
|
|
|
|
|
|
_HANDLE_EVENT_PARAMS = {"bot", "event"}
|
|
_HANDLE_EVENT_REQUIRED_ATTRS = (
|
|
"escape_tag",
|
|
"logger",
|
|
"NoLogException",
|
|
"AsyncExitStack",
|
|
"_apply_event_preprocessors",
|
|
"_apply_event_postprocessors",
|
|
"TrieRule",
|
|
"matchers",
|
|
"catch",
|
|
"StopPropagation",
|
|
"_handle_exception",
|
|
"anyio",
|
|
"run_coro_with_shield",
|
|
)
|
|
|
|
|
|
def _signature_param_names(func: Callable[..., Any]) -> set[str]:
|
|
return set(inspect.signature(func).parameters)
|
|
|
|
|
|
def validate_handle_event_patch() -> AuthPatchGuardResult:
|
|
target = getattr(nb_message, "handle_event", None)
|
|
if target is None:
|
|
return AuthPatchGuardResult(False, "missing nonebot.message.handle_event")
|
|
try:
|
|
params = _signature_param_names(target)
|
|
except Exception as exc:
|
|
return AuthPatchGuardResult(False, f"inspect signature failed: {exc}")
|
|
missing_params = sorted(_HANDLE_EVENT_PARAMS - params)
|
|
if missing_params:
|
|
return AuthPatchGuardResult(
|
|
False,
|
|
"handle_event signature missing params: " + ", ".join(missing_params),
|
|
)
|
|
missing_attrs = [
|
|
attr for attr in _HANDLE_EVENT_REQUIRED_ATTRS if not hasattr(nb_message, attr)
|
|
]
|
|
if missing_attrs:
|
|
return AuthPatchGuardResult(
|
|
False,
|
|
"nonebot.message missing attrs: " + ", ".join(missing_attrs),
|
|
)
|
|
return AuthPatchGuardResult(True)
|