对消息进行格式化
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
import html
|
import html
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
def format_quote_message(xml_content):
|
def format_quote_message(xml_content):
|
||||||
@@ -13,26 +14,47 @@ def format_quote_message(xml_content):
|
|||||||
格式化后的消息文本
|
格式化后的消息文本
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 解析XML
|
|
||||||
root = ET.fromstring(xml_content)
|
|
||||||
|
|
||||||
# 获取主消息内容
|
xml_content = xml_content.replace('<', '<').replace('>', '>')
|
||||||
title_elem = root.find('.//title')
|
print(xml_content)
|
||||||
main_content = title_elem.text if title_elem is not None else ""
|
# 使用正则表达式直接提取关键信息,避免XML解析问题
|
||||||
|
title_match = re.search(r'<title>(.*?)</title>', xml_content)
|
||||||
|
main_content = title_match.group(1) if title_match else "[无标题]"
|
||||||
|
|
||||||
# 获取引用消息信息
|
# 提取引用消息的发送者和内容
|
||||||
refer_msg = root.find('.//refermsg')
|
display_name_match = re.search(r'<displayname>(.*?)</displayname>', xml_content)
|
||||||
if refer_msg is not None:
|
display_name = display_name_match.group(1) if display_name_match else "未知用户"
|
||||||
display_name = refer_msg.find('displayname').text if refer_msg.find('displayname') is not None else "未知用户"
|
|
||||||
quoted_content = refer_msg.find('content').text if refer_msg.find('content') is not None else ""
|
quoted_content_match = re.search(r'<refermsg>.*?<content>(.*?)</content>', xml_content, re.DOTALL)
|
||||||
|
quoted_content = quoted_content_match.group(1) if quoted_content_match else ""
|
||||||
|
|
||||||
# 解码HTML实体
|
# 解码HTML实体
|
||||||
|
try:
|
||||||
quoted_content = html.unescape(quoted_content)
|
quoted_content = html.unescape(quoted_content)
|
||||||
|
except:
|
||||||
|
pass # 如果解码失败,使用原始内容
|
||||||
|
|
||||||
# 构建格式化的引用消息
|
# 构建格式化的引用消息
|
||||||
|
if display_name and quoted_content:
|
||||||
formatted_message = f"┌─────────────────────────────────\n│ 引用 {display_name}:{quoted_content}\n└─────────────────────────────────\n{main_content}"
|
formatted_message = f"┌─────────────────────────────────\n│ 引用 {display_name}:{quoted_content}\n└─────────────────────────────────\n{main_content}"
|
||||||
return formatted_message
|
return formatted_message
|
||||||
|
|
||||||
return main_content
|
return main_content
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return f"解析引用消息失败: {str(e)}"
|
# 如果解析失败,尝试提取title标签内容
|
||||||
|
try:
|
||||||
|
match = re.search(r'<title>(.*?)</title>', xml_content)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return f"[引用消息]" # 返回一个简单的标识,而不是错误信息
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
strs ="""
|
||||||
|
<?xml version="1.0"?> <msg> <appmsg appid="" sdkver="0"> <title>那也没事,都是富二代,都是送出国镀个金回家继承家业的</title> <des /> <action /> <type>57</type> <showtype>0</showtype> <soundtype>0</soundtype> <mediatagname /> <messageext /> <messageaction /> <content /> <contentattr>0</contentattr> <url /> <lowurl /> <dataurl /> <lowdataurl /> <songalbumurl /> <songlyric /> <appattach> <totallen>0</totallen> <attachid /> <emoticonmd5></emoticonmd5> <fileext /> <aeskey></aeskey> </appattach> <extinfo /> <sourceusername /> <sourcedisplayname /> <thumburl /> <md5 /> <statextstr /> <refermsg> <type>1</type> <svrid>2568355911763278189</svrid> <fromusr>45317011307@chatroom</fromusr> <chatusr>wxid_twrbhdxddlud12</chatusr> <displayname>水牛🐃</displayname> <content>都是富二代。</content> <msgsource><msgsource> <sec_msg_node> <alnode> <fr>1</fr> </alnode> </sec_msg_node> <pua>1</pua> <silence>1</silence> <membercount>125</membercount> <signature>N0_V1_DaX/Y3s2|v1_PvH3m56P</signature> <tmp_node> <publisher-id></publisher-id> </tmp_node> </msgsource> </msgsource> <createtime>1743491847</createtime> </refermsg> </appmsg> <fromusername>maoyijie</fromusername> <scene>0</scene> <appinfo> <version>1</version> <appname /> </appinfo> <commenturl /> </msg>
|
||||||
|
"""
|
||||||
|
sss = format_quote_message(strs)
|
||||||
|
print(sss)
|
||||||
|
|||||||
Reference in New Issue
Block a user