fix: at和回复只显示qq号的问题

This commit is contained in:
Windpicker-owo
2025-09-03 17:51:55 +08:00
parent b7e042161f
commit 368517267e
2 changed files with 20 additions and 5 deletions

View File

@@ -536,7 +536,8 @@ class MessageHandler:
logger.debug("机器人被at") logger.debug("机器人被at")
self_info: dict = await get_self_info(self.get_server_connection()) self_info: dict = await get_self_info(self.get_server_connection())
if self_info: if self_info:
return Seg(type="text", data=f"@<{self_info.get('nickname')}:{self_info.get('user_id')}>") # 返回包含昵称和用户ID的at格式便于后续处理
return Seg(type="at", data=f"{self_info.get('nickname')}:{self_info.get('user_id')}")
else: else:
return None return None
else: else:
@@ -544,7 +545,8 @@ class MessageHandler:
self.get_server_connection(), group_id=group_id, user_id=qq_id self.get_server_connection(), group_id=group_id, user_id=qq_id
) )
if member_info: if member_info:
return Seg(type="text", data=f"@<{member_info.get('nickname')}:{member_info.get('user_id')}>") # 返回包含昵称和用户ID的at格式便于后续处理
return Seg(type="at", data=f"{member_info.get('nickname')}:{member_info.get('user_id')}")
else: else:
return None return None
@@ -688,7 +690,7 @@ class MessageHandler:
logger.warning("无法获取被引用的人的昵称,返回默认值") logger.warning("无法获取被引用的人的昵称,返回默认值")
seg_message.append(Seg(type="text", data="[回复 未知用户:")) seg_message.append(Seg(type="text", data="[回复 未知用户:"))
else: else:
seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}:{sender_id}>")) seg_message.append(Seg(type="text", data=f"[回复<{sender_nickname}>"))
seg_message += reply_message seg_message += reply_message
seg_message.append(Seg(type="text", data="],说:")) seg_message.append(Seg(type="text", data="],说:"))
return seg_message return seg_message

View File

@@ -149,6 +149,15 @@ class MessageRecv(Message):
self.is_emoji = False self.is_emoji = False
self.is_video = False self.is_video = False
return segment.data # type: ignore return segment.data # type: ignore
elif segment.type == "at":
self.is_picid = False
self.is_emoji = False
self.is_video = False
# 处理at消息格式为"昵称:QQ号"
if segment.data and ":" in segment.data:
nickname, qq_id = segment.data.split(":", 1)
return f"@{nickname}"
return f"@{segment.data}" if segment.data else "@未知用户"
elif segment.type == "image": elif segment.type == "image":
# 如果是base64图片数据 # 如果是base64图片数据
if isinstance(segment.data, str): if isinstance(segment.data, str):
@@ -503,12 +512,16 @@ class MessageProcessBase(Message):
return await get_voice_text(seg.data) return await get_voice_text(seg.data)
return "[发了一段语音,网卡了加载不出来]" return "[发了一段语音,网卡了加载不出来]"
elif seg.type == "at": elif seg.type == "at":
return f"[@{seg.data}]" # 处理at消息格式为"昵称:QQ号"
if seg.data and ":" in seg.data:
nickname, qq_id = seg.data.split(":", 1)
return f"@{nickname}"
return f"@{seg.data}" if seg.data else "@未知用户"
elif seg.type == "reply": elif seg.type == "reply":
if self.reply and hasattr(self.reply, "processed_plain_text"): if self.reply and hasattr(self.reply, "processed_plain_text"):
# print(f"self.reply.processed_plain_text: {self.reply.processed_plain_text}") # print(f"self.reply.processed_plain_text: {self.reply.processed_plain_text}")
# print(f"reply: {self.reply}") # print(f"reply: {self.reply}")
return f"[回复<{self.reply.message_info.user_info.user_nickname}:{self.reply.message_info.user_info.user_id}> 的消息:{self.reply.processed_plain_text}]" # type: ignore return f"[回复<{self.reply.message_info.user_info.user_nickname}> 的消息:{self.reply.processed_plain_text}]" # type: ignore
return None return None
else: else:
return f"[{seg.type}:{str(seg.data)}]" return f"[{seg.type}:{str(seg.data)}]"