fix: reuse referenced message media in dashboard quotes
This commit is contained in:
@@ -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'])
|
||||
|
||||
@@ -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]:
|
||||
"""获取指定群成员近期消息"""
|
||||
|
||||
@@ -76,6 +76,7 @@ def parse_quote_message(xml_content: str) -> dict:
|
||||
display_name = _clean_text(_extract_first(r'<displayname>(.*?)</displayname>', xml_content, "未知用户")) or "未知用户"
|
||||
quoted_content = _extract_first(r'<refermsg>.*?<content>(.*?)</content>', xml_content)
|
||||
ref_type = _extract_first(r'<refermsg>.*?<type>(.*?)</type>', xml_content)
|
||||
reference_svrid = _extract_first(r'<refermsg>.*?<svrid>(.*?)</svrid>', 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", ""),
|
||||
|
||||
Reference in New Issue
Block a user