Skip to content

Commit d58080b

Browse files
authored
fix: fix quote message campatibility (#50)
* feat: store xml in vendor_specific * feat: add displayname and content in quoto message * fix: add chatusr in quoto message * refator: move constants * fix: set chatusr as wxid in group message * feat: set content as proper format
1 parent 9c0ba61 commit d58080b

File tree

3 files changed

+127
-9
lines changed

3 files changed

+127
-9
lines changed

efb_wechat_comwechat_slave/ComWechat.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import os
99
import base64
1010
from pathlib import Path
11+
from xml.sax.saxutils import escape
1112

1213
import re
1314
import json
@@ -32,18 +33,16 @@
3233
from .ChatMgr import ChatMgr
3334
from .CustomTypes import EFBGroupChat, EFBPrivateChat, EFBGroupMember, EFBSystemUser
3435
from .MsgDeco import qutoed_text
35-
from .MsgProcess import MsgProcess
36+
from .MsgProcess import MsgProcess, MsgWrapper
3637
from .Utils import download_file , load_config , load_temp_file_to_local , WC_EMOTICON_CONVERSION
38+
from .Constant import QUOTE_MESSAGE, QUOTE_GROUP_MESSAGE
3739

3840
from rich.console import Console
3941
from rich import print as rprint
4042
from io import BytesIO
4143
from PIL import Image
4244
from pyqrcode import QRCode
4345

44-
QUOTE_MESSAGE = '<?xml version="1.0"?><msg><appmsg appid="" sdkver="0"><title>%s</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 /><fileext /><aeskey /></appattach><extinfo /><sourceusername /><sourcedisplayname /><thumburl /><md5 /><statextstr /><refermsg><type>1</type><svrid>%s</svrid><fromusr>%s</fromusr><chatusr /></refermsg></appmsg><fromusername>%s</fromusername><scene>0</scene><appinfo><version>1</version><appname></appname></appinfo><commenturl></commenturl></msg>'
45-
QUOTE_GROUP_MESSAGE = '<?xml version="1.0"?><msg><appmsg appid="" sdkver="0"><title>%s</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 /><fileext /><aeskey /></appattach><extinfo /><sourceusername /><sourcedisplayname /><thumburl /><md5 /><statextstr /><refermsg><type>1</type><svrid>%s</svrid><fromusr>%s</fromusr><chatusr>%s</chatusr></refermsg></appmsg><fromusername>%s</fromusername><scene>0</scene><appinfo><version>1</version><appname></appname></appinfo><commenturl></commenturl></msg>'
46-
4746
class ComWeChatChannel(SlaveChannel):
4847
channel_name : str = "ComWechatChannel"
4948
channel_emoji : str = "💻"
@@ -86,7 +85,8 @@ def __init__(self, instance_id: InstanceID = None):
8685

8786
self.qrcode_timeout = self.config.get("qrcode_timeout", 10)
8887
self.login()
89-
self.wxid = self.bot.GetSelfInfo()["data"]["wxId"]
88+
self.me = self.bot.GetSelfInfo()["data"]
89+
self.wxid = self.me["wxId"]
9090
self.base_path = self.config["base_path"] if "base_path" in self.config else self.bot.get_base_path()
9191
self.dir = self.config["dir"]
9292
if not self.dir.endswith(os.path.sep):
@@ -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(MsgProcess(msg, chat), author=author, chat=chat, uid=MessageID(str(msg['msgid'])))
504+
self.send_efb_msgs(MsgWrapper(msg["message"], 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(MsgProcess(msg, chat), author=author, chat=chat, uid=msg['msgid'])
536+
self.send_efb_msgs(MsgWrapper(msg["message"], 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()):
@@ -794,10 +794,16 @@ def send_text(self, wxid: ChatID, msg: Message) -> 'Message':
794794
else:
795795
msgid = msg.target.uid
796796
sender = msg.target.author.uid
797+
displayname = msg.target.author.name
798+
content = escape(msg.target.vendor_specific.get("wx_xml", ""))
799+
if content:
800+
content = "<content>%s</content>" % content
801+
else:
802+
content = "<content />"
797803
if "@chatroom" in msg.author.chat.uid:
798-
xml = QUOTE_GROUP_MESSAGE % (text, msgid, sender, msg.author.chat.uid, self.wxid)
804+
xml = QUOTE_GROUP_MESSAGE % (self.wxid, text, msgid, sender, sender, displayname, content)
799805
else:
800-
xml = QUOTE_MESSAGE % (text, msgid, sender, self.wxid)
806+
xml = QUOTE_MESSAGE % (self.wxid, text, msgid, sender, sender, displayname, content)
801807
return self.bot.SendXml(wxid = wxid , xml = xml, img_path = "")
802808
return self.bot.SendText(wxid = wxid , msg = text)
803809

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
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+
"""
52+
QUOTE_MESSAGE="""<msg>
53+
<fromusername>%s</fromusername>
54+
<scene>0</scene>
55+
<commenturl></commenturl>
56+
<appmsg appid="" sdkver="0">
57+
<title>%s</title>
58+
<des></des>
59+
<action>view</action>
60+
<type>57</type>
61+
<showtype>0</showtype>
62+
<content></content>
63+
<url></url>
64+
<dataurl></dataurl>
65+
<lowurl></lowurl>
66+
<lowdataurl></lowdataurl>
67+
<recorditem></recorditem>
68+
<thumburl></thumburl>
69+
<messageaction></messageaction>
70+
<refermsg>
71+
<type>1</type>
72+
<svrid>%s</svrid>
73+
<fromusr>%s</fromusr>
74+
<chatusr>%s</chatusr>
75+
<displayname>%s</displayname>
76+
%s
77+
</refermsg>
78+
<extinfo></extinfo>
79+
<sourceusername></sourceusername>
80+
<sourcedisplayname></sourcedisplayname>
81+
<commenturl></commenturl>
82+
<appattach>
83+
<totallen>0</totallen>
84+
<attachid></attachid>
85+
<emoticonmd5></emoticonmd5>
86+
<fileext></fileext>
87+
<aeskey></aeskey>
88+
</appattach>
89+
<weappinfo>
90+
<pagepath></pagepath>
91+
<username></username>
92+
<appid></appid>
93+
<appservicetype>0</appservicetype>
94+
</weappinfo>
95+
<websearch />
96+
</appmsg>
97+
<appinfo>
98+
<version>1</version>
99+
<appname>Window wechat</appname>
100+
</appinfo>
101+
</msg>
102+
"""

efb_wechat_comwechat_slave/MsgProcess.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
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]]):
16+
efb_msgs = [efb_msgs] if isinstance(efb_msgs, Message) else efb_msgs
17+
if not efb_msgs:
18+
return
19+
for efb_msg in efb_msgs:
20+
vendor_specific = getattr(efb_msg, "vendor_specific", {})
21+
vendor_specific["wx_xml"] = xml
22+
setattr(efb_msg, "vendor_specific", vendor_specific)
23+
return efb_msgs
24+
1525
def MsgProcess(msg : dict , chat) -> Union[Message, List[Message]]:
1626

1727
if msg["type"] == "text":

0 commit comments

Comments
 (0)