refactor(core): 优化权限管理和事件模型

- 重构 AdminManager 和 PermissionManager 以 Redis 为主要数据源
- 为所有事件模型添加 slots=True 提升性能
- 更新文档说明 Mypyc 编译注意事项
- 清理测试和调试文件
- 移动静态资源到 web_static 目录
This commit is contained in:
2026-01-13 08:35:54 +08:00
parent 7f331970dd
commit 3cbf5328bb
25 changed files with 434 additions and 409 deletions

View File

@@ -13,16 +13,18 @@ WebSocket 连接。它是整个机器人框架的底层通信基础。
"""
import asyncio
import json
from typing import Any, Dict, Optional
from typing import Any, Dict, Optional, cast
import uuid
import websockets
from websockets.legacy.client import WebSocketClientProtocol
from models.events.factory import EventFactory
from .bot import Bot
from .config_loader import global_config
from .managers.command_manager import matcher
from .utils.executor import CodeExecutor
from .utils.logger import logger
@@ -31,7 +33,7 @@ class WS:
WebSocket 客户端,负责与 OneBot v11 实现进行底层通信。
"""
def __init__(self, code_executor=None):
def __init__(self, code_executor: Optional[CodeExecutor] = None) -> None:
"""
初始化 WebSocket 客户端。
@@ -43,13 +45,13 @@ class WS:
self.token = cfg.token
self.reconnect_interval = cfg.reconnect_interval
self.ws = None
self._pending_requests = {}
self.ws: Optional[WebSocketClientProtocol] = None
self._pending_requests: Dict[str, asyncio.Future] = {}
self.bot: Bot | None = None
self.self_id: int | None = None
self.code_executor = code_executor
async def connect(self):
async def connect(self) -> None:
"""
启动并管理 WebSocket 连接。
@@ -63,7 +65,8 @@ class WS:
logger.info(f"正在尝试连接至 NapCat: {self.url}")
async with websockets.connect(
self.url, additional_headers=headers
) as websocket:
) as websocket_raw:
websocket = cast(WebSocketClientProtocol, websocket_raw)
self.ws = websocket
logger.success("连接成功!")
await self._listen_loop(websocket)
@@ -79,7 +82,7 @@ class WS:
logger.info(f"{self.reconnect_interval}秒后尝试重连...")
await asyncio.sleep(self.reconnect_interval)
async def _listen_loop(self, websocket_connection):
async def _listen_loop(self, websocket_connection: WebSocketClientProtocol) -> None:
"""
核心监听循环,处理所有接收到的 WebSocket 消息。
@@ -111,7 +114,7 @@ class WS:
except Exception as e:
logger.exception(f"解析消息异常: {e}")
async def on_event(self, event_data: dict):
async def on_event(self, event_data: Dict[str, Any]) -> None:
"""
事件处理和分发层。