mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-08 05:10:01 +08:00
bugfix:修复notice事件扩散问题 (#2132)
* bugfix:修复notice事件扩散问题 * 优化并发调度 * bugfix:修复签到样式 * bugfix:功能调用统计修复 * bugfix:修复私聊时功能调用统计显示已退群问题 * 提高插件适配兼容性 * 优化发送队列 * 修改权限检查设计 * 继续修改权限检查设计 * 完善权限检查设计 * 优化sqlite配置 * 优化数据库初始化 * 代码整理,无用代码清理 * bugfix:修复启动时数据库校验问题 * bugfix:修复预算裁剪过于激进问题
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user