添加注释,增加redis支持,添加了聊天记录构建支持

This commit is contained in:
2026-01-02 17:10:42 +08:00
parent 3163bbf8c1
commit 01b83803c1
24 changed files with 965 additions and 313 deletions

View File

@@ -1,7 +1,15 @@
"""
WebSocket 核心模块
WebSocket 核心通信模块
负责与 OneBot 实现端建立 WebSocket 连接,处理消息接收、事件分发和 API 调用。
该模块定义了 `WS` 类,负责与 OneBot v11 实现(如 NapCat建立和管理
WebSocket 连接。它是整个机器人框架的底层通信基础。
主要职责包括:
- 建立 WebSocket 连接并处理认证。
- 实现断线自动重连机制。
- 监听并接收来自 OneBot 的事件和 API 响应。
- 分发事件给 `CommandManager` 进行处理。
- 提供 `call_api` 方法,用于异步发送 API 请求并等待响应。
"""
import asyncio
import json
@@ -20,12 +28,14 @@ from .config_loader import global_config
class WS:
"""
WebSocket 客户端,负责与 OneBot 实现端建立连接并处理通信
WebSocket 客户端,负责与 OneBot v11 实现进行底层通信
"""
def __init__(self):
"""
初始化 WebSocket 客户端
初始化 WebSocket 客户端
从全局配置中读取 WebSocket URI、访问令牌Token和重连间隔。
"""
# 读取参数
cfg = global_config.napcat_ws
@@ -39,7 +49,10 @@ class WS:
async def connect(self):
"""
主连接循环,负责建立连接和自动重连
启动并管理 WebSocket 连接。
这是一个无限循环,负责建立连接。如果连接断开,它会根据配置的
`reconnect_interval` 时间间隔后自动尝试重新连接。
"""
headers = {"Authorization": f"Bearer {self.token}"} if self.token else {}
@@ -67,9 +80,13 @@ class WS:
async def _listen_loop(self, websocket):
"""
核心监听循环,处理接收到的 WebSocket 消息
核心监听循环,处理所有接收到的 WebSocket 消息
:param websocket: WebSocket 连接对象
此循环会持续从 WebSocket 连接中读取消息,并根据消息内容
判断是 API 响应还是上报的事件,然后分发给相应的处理逻辑。
Args:
websocket: 当前活动的 WebSocket 连接对象。
"""
async for message in websocket:
try:
@@ -96,9 +113,16 @@ class WS:
async def on_event(self, raw_data: dict):
"""
事件分发层:根据 post_type 调用 matcher 对应的处理器
事件处理和分发层。
:param raw_data: 原始事件数据字典
当接收到一个 OneBot 事件时,此方法负责:
1. 使用 `EventFactory` 将原始 JSON 数据解析成对应的事件对象。
2. 为事件对象注入 `Bot` 实例,以便在插件中可以调用 API。
3. 打印格式化的事件日志。
4. 将事件对象传递给 `CommandManager` (`matcher`) 进行后续处理。
Args:
raw_data (dict): 从 WebSocket 接收到的原始事件字典。
"""
try:
# 使用工厂创建事件对象
@@ -124,11 +148,18 @@ class WS:
async def call_api(self, action: str, params: dict = None):
"""
调用 OneBot API
OneBot v11 实现端发送一个 API 请求。
:param action: API 动作名称
:param params: API 参数
:return: API 响应结果
该方法通过 WebSocket 发送请求,并使用 `echo` 字段来匹配对应的响应。
它创建了一个 `Future` 对象来异步等待响应,并设置了超时机制。
Args:
action (str): API 的动作名称,例如 "send_group_msg"
params (dict, optional): API 请求的参数字典。 Defaults to None.
Returns:
dict: OneBot API 的响应数据。如果超时或连接断开,则返回一个
表示失败的字典。
"""
if not self.ws:
return {"status": "failed", "msg": "websocket not initialized"}
@@ -152,3 +183,4 @@ class WS:
except asyncio.TimeoutError:
self._pending_requests.pop(echo_id, None)
return {"status": "failed", "retcode": -1, "msg": "api timeout"}