Skip to content

Commit 93295f0

Browse files
authored
fix: fix quote message campatibility (#51)
* fix: fix refer type in high version of mac wechat * fix: escape more chars * feat: fallback to msg.text
1 parent 310fa9b commit 93295f0

3 files changed

Lines changed: 32 additions & 61 deletions

File tree

efb_wechat_comwechat_slave/ComWechat.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from .MsgDeco import qutoed_text
3636
from .MsgProcess import MsgProcess, MsgWrapper
3737
from .Utils import download_file , load_config , load_temp_file_to_local , WC_EMOTICON_CONVERSION
38-
from .Constant import QUOTE_MESSAGE, QUOTE_GROUP_MESSAGE
38+
from .Constant import QUOTE_MESSAGE
3939

4040
from rich.console import Console
4141
from rich import print as rprint
@@ -501,7 +501,7 @@ def handle_msg(self , msg : Dict[str, Any] , author : 'ChatMember' , chat : 'Cha
501501
self.file_msg[msg["filepath"]] = ( msg , author , chat )
502502
return
503503

504-
self.send_efb_msgs(MsgWrapper(msg["message"], MsgProcess(msg, chat)), author=author, chat=chat, uid=MessageID(str(msg['msgid'])))
504+
self.send_efb_msgs(MsgWrapper(msg, MsgProcess(msg, chat)), author=author, chat=chat, uid=MessageID(str(msg['msgid'])))
505505

506506
def handle_file_msg(self):
507507
while True:
@@ -533,7 +533,7 @@ def handle_file_msg(self):
533533

534534
if flag:
535535
del self.file_msg[path]
536-
self.send_efb_msgs(MsgWrapper(msg["message"], MsgProcess(msg, chat)), author=author, chat=chat, uid=MessageID(str(msg['msgid'])))
536+
self.send_efb_msgs(MsgWrapper(msg, MsgProcess(msg, chat)), author=author, chat=chat, uid=MessageID(str(msg['msgid'])))
537537

538538
if len(self.delete_file):
539539
for k in list(self.delete_file.keys()):
@@ -795,15 +795,35 @@ def send_text(self, wxid: ChatID, msg: Message) -> 'Message':
795795
msgid = msg.target.uid
796796
sender = msg.target.author.uid
797797
displayname = msg.target.author.name
798-
content = escape(msg.target.vendor_specific.get("wx_xml", ""))
798+
content = escape(msg.target.vendor_specific.get("wx_xml", ""), {
799+
"\n": "
",
800+
"\t": "	",
801+
'"': """,
802+
}) or msg.target.text
803+
comwechat_info = msg.target.vendor_specific.get("comwechat_info", {})
804+
if comwechat_info.get("type", None) == "animatedsticker":
805+
refer_type = 47
806+
elif msg.target.type == MsgType.Image:
807+
refer_type = 3
808+
elif msg.target.type == MsgType.Voice:
809+
refer_type = 34
810+
elif msg.target.type == MsgType.Video:
811+
refer_type = 43
812+
elif msg.target.type == MsgType.Sticker:
813+
refer_type = 47
814+
elif msg.target.type == MsgType.Location:
815+
refer_type = 48
816+
elif msg.target.type == MsgType.File:
817+
refer_type = 49
818+
elif comwechat_info.get("type", None) == "share":
819+
refer_type = 49
820+
else:
821+
refer_type = 1
799822
if content:
800823
content = "<content>%s</content>" % content
801824
else:
802825
content = "<content />"
803-
if "@chatroom" in msg.author.chat.uid:
804-
xml = QUOTE_GROUP_MESSAGE % (self.wxid, text, msgid, sender, sender, displayname, content)
805-
else:
806-
xml = QUOTE_MESSAGE % (self.wxid, text, msgid, sender, sender, displayname, content)
826+
xml = QUOTE_MESSAGE % (self.wxid, text_to_send, refer_type, msgid, sender, sender, displayname, content)
807827
return self.bot.SendXml(wxid = wxid , xml = xml, img_path = "")
808828
return self.bot.SendText(wxid = wxid , msg = text)
809829

efb_wechat_comwechat_slave/Constant.py

Lines changed: 1 addition & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,3 @@
1-
QUOTE_GROUP_MESSAGE="""<msg>
2-
<fromusername>%s</fromusername>
3-
<scene>0</scene>
4-
<commenturl></commenturl>
5-
<appmsg appid="" sdkver="0">
6-
<title>%s</title>
7-
<des></des>
8-
<action>view</action>
9-
<type>57</type>
10-
<showtype>0</showtype>
11-
<content></content>
12-
<url></url>
13-
<dataurl></dataurl>
14-
<lowurl></lowurl>
15-
<lowdataurl></lowdataurl>
16-
<recorditem></recorditem>
17-
<thumburl></thumburl>
18-
<messageaction></messageaction>
19-
<refermsg>
20-
<type>1</type>
21-
<svrid>%s</svrid>
22-
<fromusr>%s</fromusr>
23-
<chatusr>%s</chatusr>
24-
<displayname>%s</displayname>
25-
%s
26-
</refermsg>
27-
<extinfo></extinfo>
28-
<sourceusername></sourceusername>
29-
<sourcedisplayname></sourcedisplayname>
30-
<commenturl></commenturl>
31-
<appattach>
32-
<totallen>0</totallen>
33-
<attachid></attachid>
34-
<emoticonmd5></emoticonmd5>
35-
<fileext></fileext>
36-
<aeskey></aeskey>
37-
</appattach>
38-
<weappinfo>
39-
<pagepath></pagepath>
40-
<username></username>
41-
<appid></appid>
42-
<appservicetype>0</appservicetype>
43-
</weappinfo>
44-
<websearch />
45-
</appmsg>
46-
<appinfo>
47-
<version>1</version>
48-
<appname>Window wechat</appname>
49-
</appinfo>
50-
</msg>
51-
"""
521
QUOTE_MESSAGE="""<msg>
532
<fromusername>%s</fromusername>
543
<scene>0</scene>
@@ -68,7 +17,7 @@
6817
<thumburl></thumburl>
6918
<messageaction></messageaction>
7019
<refermsg>
71-
<type>1</type>
20+
<type>%d</type>
7221
<svrid>%s</svrid>
7322
<fromusr>%s</fromusr>
7423
<chatusr>%s</chatusr>

efb_wechat_comwechat_slave/MsgProcess.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212
from ehforwarderbot import utils as efb_utils
1313
from ehforwarderbot.message import Message
1414

15-
def MsgWrapper(xml, efb_msgs: Union[Message, List[Message]]):
15+
def MsgWrapper(msg, efb_msgs: Union[Message, List[Message]]):
1616
efb_msgs = [efb_msgs] if isinstance(efb_msgs, Message) else efb_msgs
1717
if not efb_msgs:
1818
return
1919
for efb_msg in efb_msgs:
2020
vendor_specific = getattr(efb_msg, "vendor_specific", {})
21+
xml = msg.pop("message", None)
2122
vendor_specific["wx_xml"] = xml
23+
vendor_specific["comwechat_info"] = msg
2224
setattr(efb_msg, "vendor_specific", vendor_specific)
2325
return efb_msgs
2426

0 commit comments

Comments
 (0)