feat:初版

This commit is contained in:
2025-12-03 15:48:44 +08:00
commit b4df26f61d
199 changed files with 23434 additions and 0 deletions

88
utils/message_hook.py Normal file
View File

@@ -0,0 +1,88 @@
"""
消息发送钩子工具
用于自动记录机器人发送的消息到 MessageLogger
"""
from loguru import logger
async def log_bot_message(to_wxid: str, content: str, msg_type: str = "text", media_url: str = ""):
"""
记录机器人发送的消息到 MessageLogger
Args:
to_wxid: 接收者微信ID
content: 消息内容
msg_type: 消息类型 (text/image/video/file等)
media_url: 媒体文件URL (可选)
"""
try:
logger.info(f"message_hook: 开始记录机器人消息")
# 动态导入避免循环依赖
from plugins.MessageLogger.main import MessageLogger
logger.info(f"message_hook: MessageLogger 导入成功")
# 获取 MessageLogger 实例
message_logger = MessageLogger.get_instance()
logger.info(f"message_hook: MessageLogger 实例: {message_logger}")
if message_logger:
logger.info(f"message_hook: 调用 save_bot_message")
await message_logger.save_bot_message(to_wxid, content, msg_type, media_url)
logger.info(f"message_hook: save_bot_message 调用完成")
else:
logger.warning("MessageLogger 实例未找到,跳过消息记录")
except Exception as e:
logger.error(f"记录机器人消息失败: {e}")
import traceback
logger.error(f"详细错误: {traceback.format_exc()}")
def create_message_hook(original_method):
"""
创建消息发送钩子装饰器
Args:
original_method: 原始的发送消息方法
Returns:
包装后的方法
"""
async def wrapper(self, to_wxid: str, content: str, *args, **kwargs):
# 调用原始方法
result = await original_method(self, to_wxid, content, *args, **kwargs)
# 记录消息
await log_bot_message(to_wxid, content, "text")
return result
return wrapper
def create_file_message_hook(original_method, msg_type: str):
"""
创建文件消息发送钩子装饰器
Args:
original_method: 原始的发送文件方法
msg_type: 消息类型
Returns:
包装后的方法
"""
async def wrapper(self, to_wxid: str, file_path: str, *args, **kwargs):
# 调用原始方法
result = await original_method(self, to_wxid, file_path, *args, **kwargs)
# 记录消息
import os
filename = os.path.basename(file_path)
await log_bot_message(to_wxid, f"[{msg_type}] {filename}", msg_type, file_path)
return result
return wrapper