增加一个关于数据库在前面没有正确识别用户身份的时候的最小回退并改进ada插件的关于消息处理时可能会错误地把@消息识别为[视频]的情况

This commit is contained in:
Furina-1013-create
2025-09-06 22:58:50 +08:00
parent db3c3ebd63
commit d53e39e85d
2 changed files with 61 additions and 2 deletions

View File

@@ -150,6 +150,18 @@ class PersonInfoManager:
# Ensure person_id is correctly set from the argument
final_data["person_id"] = person_id
# 你们的英文注释是何意味?
# 检查并修复关键字段为None的情况喵
if final_data.get("user_id") is None:
logger.warning(f"user_id为None使用'unknown'作为默认值 person_id={person_id}")
final_data["user_id"] = "unknown"
if final_data.get("platform") is None:
logger.warning(f"platform为None使用'unknown'作为默认值 person_id={person_id}")
final_data["platform"] = "unknown"
# 这里的目的是为了防止在识别出错的情况下有一个最小回退,不只是针对@消息识别成视频后的报错问题
# Serialize JSON fields
for key in JSON_SERIALIZED_FIELDS:
@@ -199,6 +211,15 @@ class PersonInfoManager:
# Ensure person_id is correctly set from the argument
final_data["person_id"] = person_id
# 检查并修复关键字段为None的情况
if final_data.get("user_id") is None:
logger.warning(f"user_id为None使用'unknown'作为默认值 person_id={person_id}")
final_data["user_id"] = "unknown"
if final_data.get("platform") is None:
logger.warning(f"platform为None使用'unknown'作为默认值 person_id={person_id}")
final_data["platform"] = "unknown"
# Serialize JSON fields
for key in JSON_SERIALIZED_FIELDS:
@@ -295,6 +316,15 @@ class PersonInfoManager:
creation_data["platform"] = data["platform"]
if data and "user_id" in data:
creation_data["user_id"] = data["user_id"]
# 额外检查关键字段如果为None则使用默认值
if creation_data.get("user_id") is None:
logger.warning(f"创建用户时user_id为None使用'unknown'作为默认值 person_id={person_id}")
creation_data["user_id"] = "unknown"
if creation_data.get("platform") is None:
logger.warning(f"创建用户时platform为None使用'unknown'作为默认值 person_id={person_id}")
creation_data["platform"] = "unknown"
# 使用安全的创建方法,处理竞态条件
await self._safe_create_person_info(person_id, creation_data)

View File

@@ -156,6 +156,21 @@ class MessageHandler:
Parameters:
raw_message: dict: 原始消息
"""
# 添加原始消息调试日志特别关注message字段
logger.debug(f"收到原始消息: message_type={raw_message.get('message_type')}, message_id={raw_message.get('message_id')}")
logger.debug(f"原始消息内容: {raw_message.get('message', [])}")
# 检查是否包含@或video消息段
message_segments = raw_message.get('message', [])
if message_segments:
for i, seg in enumerate(message_segments):
seg_type = seg.get('type')
if seg_type in ['at', 'video']:
logger.info(f"检测到 {seg_type.upper()} 消息段 [{i}]: {seg}")
elif seg_type not in ['text', 'face', 'image']:
logger.warning(f"检测到特殊消息段 [{i}]: type={seg_type}, data={seg.get('data', {})}")
message_type: str = raw_message.get("message_type")
message_id: int = raw_message.get("message_id")
# message_time: int = raw_message.get("time")
@@ -354,6 +369,18 @@ class MessageHandler:
for sub_message in real_message:
sub_message: dict
sub_message_type = sub_message.get("type")
# 添加详细的消息类型调试信息
logger.debug(f"处理消息段: type={sub_message_type}, data={sub_message.get('data', {})}")
# 特别关注 at 和 video 消息的识别
if sub_message_type == "at":
logger.debug(f"检测到@消息: {sub_message}")
elif sub_message_type == "video":
logger.debug(f"检测到VIDEO消息: {sub_message}")
elif sub_message_type not in ["text", "face", "image", "record"]:
logger.warning(f"检测到特殊消息类型: {sub_message_type}, 完整消息: {sub_message}")
match sub_message_type:
case RealMessageType.text:
ret_seg = await self.handle_text_message(sub_message)
@@ -407,6 +434,7 @@ class MessageHandler:
else:
logger.warning("record处理失败或不支持")
case RealMessageType.video:
logger.debug(f"开始处理VIDEO消息段: {sub_message}")
ret_seg = await self.handle_video_message(sub_message)
if ret_seg:
await event_manager.trigger_event(
@@ -414,8 +442,9 @@ class MessageHandler:
)
seg_message.append(ret_seg)
else:
logger.warning("video处理失败")
logger.warning(f"video处理失败,原始消息: {sub_message}")
case RealMessageType.at:
logger.debug(f"开始处理AT消息段: {sub_message}")
ret_seg = await self.handle_at_message(
sub_message,
raw_message.get("self_id"),
@@ -427,7 +456,7 @@ class MessageHandler:
)
seg_message.append(ret_seg)
else:
logger.warning("at处理失败")
logger.warning(f"at处理失败,原始消息: {sub_message}")
case RealMessageType.rps:
ret_seg = await self.handle_rps_message(sub_message)
if ret_seg: