feat: 添加状态监控插件和Redis原子操作支持

- 新增 `/status` 指令,展示机器人运行状态和系统指标
- 实现Redis Lua脚本支持原子化计数器操作
- 添加消息收发统计功能
- 完善文档,包括插件开发和性能优化指南
- 重构WebSocket连接池,增加健康检查机制
- 移除旧版编译脚本,优化项目结构
This commit is contained in:
2026-01-23 15:54:45 +08:00
parent 489dd8c77d
commit d458413e4b
28 changed files with 1529 additions and 1177 deletions

View File

@@ -3,6 +3,7 @@ API 基础模块
定义了 API 调用的基础接口和统一处理逻辑。
"""
import copy
from typing import Any, Dict, Optional, TYPE_CHECKING
from ..utils.logger import logger
@@ -35,7 +36,32 @@ class BaseAPI:
params = {}
try:
logger.debug(f"调用API -> action: {action}, params: {params}")
# 日志记录前,对敏感或过长的参数进行处理
log_params = copy.deepcopy(params)
if 'message' in log_params:
if isinstance(log_params['message'], list):
for segment in log_params['message']:
if segment.get('type') == 'image' and 'file' in segment.get('data', {}):
file_data = segment['data']['file']
if file_data.startswith('data:image/'):
segment['data']['file'] = f"{file_data[:50]}... (base64 truncated)"
elif isinstance(log_params['message'], str) and log_params['message'].startswith('data:image/'):
log_params['message'] = f"{log_params['message'][:50]}... (base64 truncated)"
# 如果是发送消息的动作,则原子化地增加发送消息总数
if action in ["send_private_msg", "send_group_msg", "send_msg"]:
from ..managers.redis_manager import redis_manager
try:
lua_script = "return redis.call('INCR', KEYS[1])"
await redis_manager.execute_lua_script(
script=lua_script,
keys=["neobot:stats:messages_sent"],
args=[]
)
except Exception as e:
logger.error(f"发送消息计数失败: {e}")
logger.debug(f"调用API -> action: {action}, params: {log_params}")
response = await self._ws.call_api(action, params)
logger.debug(f"API响应 <- {response}")