Files
dy/backend/utils/received_message_log.py
2026-07-28 15:04:17 +08:00

50 lines
1.7 KiB
Python

"""接收消息原始日志写入。"""
from __future__ import annotations
import logging
from datetime import datetime
from typing import Optional
from models.database import AsyncSessionLocal
from models.models import ReceivedMessageLog
from utils.log_limits import bound_raw_message_log_content
logger = logging.getLogger("received_message_log")
async def record_received_message(
*,
account_id: int,
raw_content: str,
sender_name: Optional[str] = None,
sender_id: Optional[str] = None,
sender_avatar: Optional[str] = None,
conversation_id: Optional[str] = None,
message_type: Optional[int] = None,
server_message_id: Optional[str] = None,
) -> None:
# The live message object remains untouched for matching/replying. Only
# this diagnostic copy is bounded before persistence.
store_content = bound_raw_message_log_content(raw_content)
async with AsyncSessionLocal() as db:
try:
db.add(
ReceivedMessageLog(
account_id=account_id,
conversation_id=(conversation_id or "").strip() or None,
sender_id=(sender_id or "").strip() or None,
sender_name=(sender_name or "").strip() or None,
sender_avatar=(sender_avatar or "").strip() or None,
message_type=message_type,
server_message_id=(server_message_id or "").strip() or None,
raw_content=store_content,
created_at=datetime.utcnow(),
)
)
await db.commit()
except Exception as exc:
await db.rollback()
logger.error("Failed to record received message log: %s", exc)