HFC对应修改(部分)
This commit is contained in:
@@ -1,21 +1,16 @@
|
||||
import re
|
||||
import traceback
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from src.chat.message_receive.message import MessageRecv
|
||||
from src.chat.message_receive.storage import MessageStorage
|
||||
import traceback
|
||||
|
||||
from src.chat.heart_flow.heartflow import heartflow
|
||||
from src.chat.utils.utils import is_mentioned_bot_in_message
|
||||
from src.chat.utils.chat_message_builder import replace_user_references
|
||||
|
||||
# from src.chat.utils.chat_message_builder import replace_user_references
|
||||
from src.common.utils.utils_message import MessageUtils
|
||||
from src.common.logger import get_logger
|
||||
from src.person_info.person_info import Person
|
||||
from sqlmodel import select, col
|
||||
from src.common.database.database import get_db_session
|
||||
from src.common.database.database_model import Images, ImageType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
pass
|
||||
from src.chat.message_receive.message import SessionMessage
|
||||
|
||||
logger = get_logger("chat")
|
||||
|
||||
@@ -24,10 +19,9 @@ class HeartFCMessageReceiver:
|
||||
"""心流处理器,负责处理接收到的消息并计算兴趣度"""
|
||||
|
||||
def __init__(self):
|
||||
"""初始化心流处理器,创建消息存储实例"""
|
||||
self.storage = MessageStorage()
|
||||
pass
|
||||
|
||||
async def process_message(self, message: MessageRecv) -> None:
|
||||
async def process_message(self, message: "SessionMessage"):
|
||||
"""处理接收到的原始消息数据
|
||||
|
||||
主要流程:
|
||||
@@ -38,7 +32,7 @@ class HeartFCMessageReceiver:
|
||||
5. 关系处理
|
||||
|
||||
Args:
|
||||
message_data: 原始消息字符串
|
||||
message: SessionMessage对象,包含原始消息数据和相关信息
|
||||
"""
|
||||
try:
|
||||
# 通知消息不处理
|
||||
@@ -48,70 +42,46 @@ class HeartFCMessageReceiver:
|
||||
|
||||
# 1. 消息解析与初始化
|
||||
userinfo = message.message_info.user_info
|
||||
chat = message.chat_stream
|
||||
if userinfo is None or message.message_info.platform is None:
|
||||
group_info = message.message_info.group_info
|
||||
if userinfo is None or message.platform is None:
|
||||
raise ValueError("message userinfo or platform is missing")
|
||||
if userinfo.user_id is None or userinfo.user_nickname is None:
|
||||
raise ValueError("message userinfo id or nickname is missing")
|
||||
user_id = userinfo.user_id
|
||||
nickname = userinfo.user_nickname
|
||||
|
||||
# 2. 计算at信息
|
||||
is_mentioned, is_at, reply_probability_boost = is_mentioned_bot_in_message(message)
|
||||
# print(f"is_mentioned: {is_mentioned}, is_at: {is_at}, reply_probability_boost: {reply_probability_boost}")
|
||||
message.is_mentioned = is_mentioned
|
||||
message.is_at = is_at
|
||||
message.reply_probability_boost = reply_probability_boost
|
||||
# 2. 计算at信息 (现在转移给Adapter完成)
|
||||
# is_mentioned, is_at, reply_probability_boost = is_mentioned_bot_in_message(message)
|
||||
# # print(f"is_mentioned: {is_mentioned}, is_at: {is_at}, reply_probability_boost: {reply_probability_boost}")
|
||||
# message.is_mentioned = is_mentioned
|
||||
# message.is_at = is_at
|
||||
|
||||
await self.storage.store_message(message, chat)
|
||||
MessageUtils.store_message_to_db(message) # 存储消息到数据库
|
||||
|
||||
await heartflow.get_or_create_heartflow_chat(chat.stream_id) # type: ignore
|
||||
await heartflow.get_or_create_heartflow_chat(message.session_id)
|
||||
|
||||
# 3. 日志记录
|
||||
mes_name = chat.group_info.group_name if chat.group_info else "私聊"
|
||||
mes_name = group_info.group_name if group_info else "私聊"
|
||||
|
||||
# 用这个pattern截取出id部分,picid是一个list,并替换成对应的图片描述
|
||||
picid_pattern = r"\[picid:([^\]]+)\]"
|
||||
picid_list = re.findall(picid_pattern, message.processed_plain_text)
|
||||
# TODO: 修复引用格式替换
|
||||
# # 应用用户引用格式替换,将回复<aaa:bbb>和@<aaa:bbb>格式转换为可读格式
|
||||
# processed_plain_text = replace_user_references(
|
||||
# processed_text, message.message_info.platform, replace_bot_name=True
|
||||
# )
|
||||
# # if not processed_plain_text:
|
||||
# # print(message)
|
||||
|
||||
# 创建替换后的文本
|
||||
processed_text = message.processed_plain_text
|
||||
if picid_list:
|
||||
for picid in picid_list:
|
||||
with get_db_session() as session:
|
||||
statement = (
|
||||
select(Images).where(
|
||||
(col(Images.id) == int(picid)) & (col(Images.image_type) == ImageType.IMAGE)
|
||||
)
|
||||
if picid.isdigit()
|
||||
else None
|
||||
)
|
||||
image = session.exec(statement).first() if statement is not None else None
|
||||
if image and image.description:
|
||||
# 将[picid:xxxx]替换成图片描述
|
||||
processed_text = processed_text.replace(f"[picid:{picid}]", f"[图片:{image.description}]")
|
||||
else:
|
||||
# 如果没有找到图片描述,则移除[picid:xxxx]标记
|
||||
processed_text = processed_text.replace(f"[picid:{picid}]", "[图片:网络不好,图片无法加载]")
|
||||
|
||||
# 应用用户引用格式替换,将回复<aaa:bbb>和@<aaa:bbb>格式转换为可读格式
|
||||
processed_plain_text = replace_user_references(
|
||||
processed_text, message.message_info.platform, replace_bot_name=True
|
||||
)
|
||||
# if not processed_plain_text:
|
||||
# print(message)
|
||||
|
||||
logger.info(f"[{mes_name}]{userinfo.user_nickname}:{processed_plain_text}")
|
||||
logger.info(f"[{mes_name}]{userinfo.user_nickname}:{message.processed_plain_text}")
|
||||
|
||||
# 如果是群聊,获取群号和群昵称
|
||||
group_id = None
|
||||
group_nick_name = None
|
||||
if chat.group_info:
|
||||
group_id = chat.group_info.group_id
|
||||
if group_info:
|
||||
group_id = group_info.group_id
|
||||
group_nick_name = userinfo.user_cardname
|
||||
|
||||
_ = Person.register_person(
|
||||
platform=message.message_info.platform,
|
||||
platform=message.platform,
|
||||
user_id=user_id,
|
||||
nickname=nickname,
|
||||
group_id=group_id,
|
||||
|
||||
Reference in New Issue
Block a user