From 0ccbc2c7019ba1ba0ff773884af9b9ff9730ccad Mon Sep 17 00:00:00 2001 From: webjoin111 <455457521@qq.com> Date: Sat, 30 Aug 2025 00:02:56 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20(log):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=97=A5=E5=BF=97=E6=A0=BC=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E6=91=98=E8=A6=81base64=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhenxun/builtin_plugins/hooks/call_hook.py | 32 +++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/zhenxun/builtin_plugins/hooks/call_hook.py b/zhenxun/builtin_plugins/hooks/call_hook.py index 1695a48e..f87bd983 100644 --- a/zhenxun/builtin_plugins/hooks/call_hook.py +++ b/zhenxun/builtin_plugins/hooks/call_hook.py @@ -1,6 +1,7 @@ from typing import Any from nonebot.adapters import Bot, Message +from nonebot.adapters.onebot.v11 import MessageSegment from zhenxun.configs.config import Config from zhenxun.models.bot_message_store import BotMessageStore @@ -40,6 +41,35 @@ def replace_message(message: Message) -> str: return result +def format_message_for_log(message: Message) -> str: + """ + 将消息对象转换为适合日志记录的字符串,对base64等长内容进行摘要处理。 + """ + if not isinstance(message, Message): + return str(message) + + log_parts = [] + for seg in message: + seg: MessageSegment + if seg.type == "text": + log_parts.append(seg.data.get("text", "")) + elif seg.type in ("image", "record", "video"): + file_info = seg.data.get("file", "") + if isinstance(file_info, str) and file_info.startswith("base64://"): + b64_data = file_info[9:] + data_size_bytes = (len(b64_data) * 3) / 4 - b64_data.count("=", -2) + log_parts.append( + f"[{seg.type}: base64, size={data_size_bytes / 1024:.2f}KB]" + ) + else: + log_parts.append(f"[{seg.type}]") + elif seg.type == "at": + log_parts.append(f"[@{seg.data.get('qq', 'unknown')}]") + else: + log_parts.append(f"[{seg.type}]") + return "".join(log_parts) + + @Bot.on_called_api async def handle_api_result( bot: Bot, exception: Exception | None, api: str, data: dict[str, Any], result: Any @@ -78,7 +108,7 @@ async def handle_api_result( else replace_message(message), platform=PlatformUtils.get_platform(bot), ) - logger.debug(f"消息发送记录,message: {message}") + logger.debug(f"消息发送记录,message: {format_message_for_log(message)}") except Exception as e: logger.warning( f"消息发送记录发生错误...data: {data}, result: {result}",