48 lines
1.6 KiB
Python
48 lines
1.6 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
|
|
|
|
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:
|
|
# 原样落库:不做 strip / parse / serialize,空字符串也记录
|
|
store_content = raw_content if raw_content is not None else ""
|
|
|
|
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)
|