diff --git a/admin/dashboard/blueprints/messages.py b/admin/dashboard/blueprints/messages.py
index 4fd6a4f..eabe832 100644
--- a/admin/dashboard/blueprints/messages.py
+++ b/admin/dashboard/blueprints/messages.py
@@ -109,6 +109,25 @@ def get_messages():
msg['quoted_type'] = quote_data.get('reference_type', '')
msg['quoted_preview_image'] = quote_data.get('preview_image', '')
msg['quoted_preview_video_thumb'] = quote_data.get('preview_video_thumb', '')
+ msg['quoted_reference_svrid'] = quote_data.get('reference_svrid', '')
+
+ # 优先使用原始被引用消息自己已落库的图片/缩略图地址
+ reference_svrid = quote_data.get('reference_svrid')
+ if reference_svrid:
+ referenced_msg = server.message_storage.get_message_by_message_id(reference_svrid)
+ if referenced_msg:
+ if msg['quoted_type'] == 'image':
+ msg['quoted_preview_image'] = (
+ referenced_msg.get('image_path')
+ or referenced_msg.get('message_thumb')
+ or msg['quoted_preview_image']
+ )
+ elif msg['quoted_type'] == 'video':
+ msg['quoted_preview_video_thumb'] = (
+ referenced_msg.get('message_thumb')
+ or referenced_msg.get('image_path')
+ or msg['quoted_preview_video_thumb']
+ )
else:
# 其他类型的应用消息,解析 XML 提取标题
root = ET.fromstring(msg['content'])
diff --git a/db/message_storage.py b/db/message_storage.py
index 326b130..9024b6c 100644
--- a/db/message_storage.py
+++ b/db/message_storage.py
@@ -61,6 +61,18 @@ class MessageStorageDB(BaseDBOperator):
sql += " ORDER BY timestamp DESC LIMIT 1"
return self.execute_query(sql, tuple(params), fetch_one=True)
+ def get_message_by_message_id(self, message_id: int | str) -> Optional[Dict]:
+ """根据 message_id 获取单条消息"""
+ sql = """
+ SELECT id, group_id, timestamp, sender, content, message_type,
+ attachment_url, message_id, message_xml, message_thumb, image_path
+ FROM messages
+ WHERE message_id = %s
+ ORDER BY id DESC
+ LIMIT 1
+ """
+ return self.execute_query(sql, (message_id,), fetch_one=True)
+
def get_member_recent_messages(self, group_id: str, wxid: str, days: int = 30,
limit: int = 200, include_today: bool = True) -> List[Dict]:
"""获取指定群成员近期消息"""
diff --git a/utils/message_formatter.py b/utils/message_formatter.py
index 28c29f1..5258fa5 100644
--- a/utils/message_formatter.py
+++ b/utils/message_formatter.py
@@ -76,6 +76,7 @@ def parse_quote_message(xml_content: str) -> dict:
display_name = _clean_text(_extract_first(r'(.*?)', xml_content, "未知用户")) or "未知用户"
quoted_content = _extract_first(r'.*?(.*?)', xml_content)
ref_type = _extract_first(r'.*?(.*?)', xml_content)
+ reference_svrid = _extract_first(r'.*?(.*?)', xml_content)
pretty_reference = _format_referenced_content(ref_type, quoted_content, xml_content)
media_preview = _extract_media_preview(ref_type, quoted_content)
@@ -83,6 +84,7 @@ def parse_quote_message(xml_content: str) -> dict:
"main_content": main_content,
"display_name": display_name,
"quoted_content": pretty_reference,
+ "reference_svrid": reference_svrid,
"reference_type": media_preview.get("reference_type", "text"),
"preview_image": media_preview.get("preview_image", ""),
"preview_video_thumb": media_preview.get("preview_video_thumb", ""),