增加一个关于数据库在前面没有正确识别用户身份的时候的最小回退并改进ada插件的关于消息处理时可能会错误地把@消息识别为[视频]的情况
This commit is contained in:
@@ -150,6 +150,18 @@ class PersonInfoManager:
|
|||||||
|
|
||||||
# Ensure person_id is correctly set from the argument
|
# Ensure person_id is correctly set from the argument
|
||||||
final_data["person_id"] = person_id
|
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
|
# Serialize JSON fields
|
||||||
for key in JSON_SERIALIZED_FIELDS:
|
for key in JSON_SERIALIZED_FIELDS:
|
||||||
@@ -199,6 +211,15 @@ class PersonInfoManager:
|
|||||||
|
|
||||||
# Ensure person_id is correctly set from the argument
|
# Ensure person_id is correctly set from the argument
|
||||||
final_data["person_id"] = person_id
|
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
|
# Serialize JSON fields
|
||||||
for key in JSON_SERIALIZED_FIELDS:
|
for key in JSON_SERIALIZED_FIELDS:
|
||||||
@@ -295,6 +316,15 @@ class PersonInfoManager:
|
|||||||
creation_data["platform"] = data["platform"]
|
creation_data["platform"] = data["platform"]
|
||||||
if data and "user_id" in data:
|
if data and "user_id" in data:
|
||||||
creation_data["user_id"] = data["user_id"]
|
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)
|
await self._safe_create_person_info(person_id, creation_data)
|
||||||
|
|||||||
@@ -156,6 +156,21 @@ class MessageHandler:
|
|||||||
Parameters:
|
Parameters:
|
||||||
raw_message: dict: 原始消息
|
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_type: str = raw_message.get("message_type")
|
||||||
message_id: int = raw_message.get("message_id")
|
message_id: int = raw_message.get("message_id")
|
||||||
# message_time: int = raw_message.get("time")
|
# message_time: int = raw_message.get("time")
|
||||||
@@ -354,6 +369,18 @@ class MessageHandler:
|
|||||||
for sub_message in real_message:
|
for sub_message in real_message:
|
||||||
sub_message: dict
|
sub_message: dict
|
||||||
sub_message_type = sub_message.get("type")
|
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:
|
match sub_message_type:
|
||||||
case RealMessageType.text:
|
case RealMessageType.text:
|
||||||
ret_seg = await self.handle_text_message(sub_message)
|
ret_seg = await self.handle_text_message(sub_message)
|
||||||
@@ -407,6 +434,7 @@ class MessageHandler:
|
|||||||
else:
|
else:
|
||||||
logger.warning("record处理失败或不支持")
|
logger.warning("record处理失败或不支持")
|
||||||
case RealMessageType.video:
|
case RealMessageType.video:
|
||||||
|
logger.debug(f"开始处理VIDEO消息段: {sub_message}")
|
||||||
ret_seg = await self.handle_video_message(sub_message)
|
ret_seg = await self.handle_video_message(sub_message)
|
||||||
if ret_seg:
|
if ret_seg:
|
||||||
await event_manager.trigger_event(
|
await event_manager.trigger_event(
|
||||||
@@ -414,8 +442,9 @@ class MessageHandler:
|
|||||||
)
|
)
|
||||||
seg_message.append(ret_seg)
|
seg_message.append(ret_seg)
|
||||||
else:
|
else:
|
||||||
logger.warning("video处理失败")
|
logger.warning(f"video处理失败,原始消息: {sub_message}")
|
||||||
case RealMessageType.at:
|
case RealMessageType.at:
|
||||||
|
logger.debug(f"开始处理AT消息段: {sub_message}")
|
||||||
ret_seg = await self.handle_at_message(
|
ret_seg = await self.handle_at_message(
|
||||||
sub_message,
|
sub_message,
|
||||||
raw_message.get("self_id"),
|
raw_message.get("self_id"),
|
||||||
@@ -427,7 +456,7 @@ class MessageHandler:
|
|||||||
)
|
)
|
||||||
seg_message.append(ret_seg)
|
seg_message.append(ret_seg)
|
||||||
else:
|
else:
|
||||||
logger.warning("at处理失败")
|
logger.warning(f"at处理失败,原始消息: {sub_message}")
|
||||||
case RealMessageType.rps:
|
case RealMessageType.rps:
|
||||||
ret_seg = await self.handle_rps_message(sub_message)
|
ret_seg = await self.handle_rps_message(sub_message)
|
||||||
if ret_seg:
|
if ret_seg:
|
||||||
|
|||||||
Reference in New Issue
Block a user