88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
"""
|
|
消息发送钩子工具
|
|
|
|
用于自动记录机器人发送的消息到 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 |