feat: 添加状态监控插件和Redis原子操作支持
- 新增 `/status` 指令,展示机器人运行状态和系统指标 - 实现Redis Lua脚本支持原子化计数器操作 - 添加消息收发统计功能 - 完善文档,包括插件开发和性能优化指南 - 重构WebSocket连接池,增加健康检查机制 - 移除旧版编译脚本,优化项目结构
This commit is contained in:
@@ -122,7 +122,13 @@ class ImageManager(Singleton):
|
||||
content = f.read()
|
||||
|
||||
mime_type = "image/jpeg" if image_type == "jpeg" else "image/png"
|
||||
return f"data:{mime_type};base64," + base64.b64encode(content).decode("utf-8")
|
||||
base64_str = base64.b64encode(content).decode("utf-8")
|
||||
|
||||
# 记录摘要日志,避免刷屏
|
||||
log_message = f"Base64 图片已生成 (MIME: {mime_type}, Size: {len(base64_str)/1024:.2f} KB, Preview: {base64_str[:30]}...{base64_str[-30:]})"
|
||||
logger.debug(log_message)
|
||||
|
||||
return f"data:{mime_type};base64," + base64_str
|
||||
except Exception as e:
|
||||
logger.error(f"读取图片文件失败: {e}")
|
||||
return None
|
||||
|
||||
@@ -412,7 +412,7 @@ class PermissionManager(Singleton):
|
||||
"""
|
||||
try:
|
||||
# 创建空的权限数据
|
||||
empty_data = {"users": {}}
|
||||
empty_data: Dict[str, Dict] = {"users": {}}
|
||||
|
||||
# 原子性写入文件
|
||||
temp_file = self.data_file + ".tmp"
|
||||
|
||||
@@ -67,5 +67,27 @@ class RedisManager(Singleton):
|
||||
"""
|
||||
return await self.redis.set(name, value, ex=ex)
|
||||
|
||||
async def execute_lua_script(self, script: str, keys: list, args: list):
|
||||
"""
|
||||
以原子方式执行 Lua 脚本
|
||||
|
||||
Args:
|
||||
script (str): 要执行的 Lua 脚本字符串
|
||||
keys (list): 脚本中使用的 Redis 键 (KEYS[1], KEYS[2], ...)
|
||||
args (list): 传递给脚本的参数 (ARGV[1], ARGV[2], ...)
|
||||
|
||||
Returns:
|
||||
Any: 脚本的返回值
|
||||
"""
|
||||
try:
|
||||
# redis-py 内部会自动处理脚本的缓存 (EVAL/EVALSHA)
|
||||
lua_script = self.redis.register_script(script)
|
||||
return await lua_script(keys=keys, args=args)
|
||||
except Exception as e:
|
||||
logger.error(f"执行 Lua 脚本失败: {e}")
|
||||
logger.debug(f"脚本内容: {script}")
|
||||
raise
|
||||
|
||||
|
||||
# 全局 Redis 管理器实例
|
||||
redis_manager = RedisManager()
|
||||
|
||||
Reference in New Issue
Block a user