Skip to content

Commit 4d8cd1a

Browse files
committed
EWS, ETM: Minor bug fix.
1 parent ce93dfb commit 4d8cd1a

File tree

3 files changed

+48
-24
lines changed

3 files changed

+48
-24
lines changed

docs/EWS.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,6 @@ eh_wechat_slave = {
9797
* `uid_order` _(list of str)_ [Default: `["NickName"]`]
9898
Fallback order of resolving `uid` from WeChat user info. Highest priority goes to index 0. The list **MUST** be non empty with only values below, and the last element associate to a rather stable and available value for most chats, if not all of them.
9999
Available values: _(U, G, M means the value is available to users, groups, and group members respectively)_
100-
* `"NickName"`: [UGM] Name of the user/group
101-
* `"alias"`: [UM] Alias of the user
102-
* `"uin"`: [UG] WeChat Unique Identifier for all chats, **Not always available**.
100+
* `"NickName"`: [UGM] Name of the user/group
101+
* `"alias"`: [UM] Alias of the user
102+
* `"uin"`: [UG] WeChat Unique Identifier for all chats, **Not always available**.

plugins/eh_telegram_master/__init__.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def process_msg(self, msg):
250250
text = "🔗 <a href=\"%s\">%s</a>\n%s" % (urllib.parse.quote(msg.attributes["url"], safe="?=&#:/"),
251251
html.escape(msg.attributes["title"]),
252252
html.escape(msg.attributes["description"]))
253-
tg_msg = self.bot.bot.sendMessage(tg_dest, text=msg_template % msg.text, parse_mode="HTML")
253+
tg_msg = self.bot.bot.sendMessage(tg_dest, text=msg_template % text, parse_mode="HTML")
254254
elif msg.type in [MsgType.Image, MsgType.Sticker]:
255255
self.logger.debug("%s, process_msg_step_3_2", xid)
256256
self.logger.info("Received %s \nPath: %s\nSize: %s\nMIME: %s", msg.type, msg.path,
@@ -266,7 +266,10 @@ def process_msg(self, msg):
266266
if msg.mime == "image/gif":
267267
tg_msg = self.bot.bot.sendDocument(tg_dest, msg.file, caption=msg_template % msg.text)
268268
else:
269-
tg_msg = self.bot.bot.sendPhoto(tg_dest, msg.file, caption=msg_template % msg.text)
269+
try:
270+
tg_msg = self.bot.bot.sendPhoto(tg_dest, msg.file, caption=msg_template % msg.text)
271+
except telegram.error.BadRequest:
272+
tg_msg = self.bot.bot.sendDocument(tg_dest, msg.file, caption=msg_template % msg.text)
270273
os.remove(msg.path)
271274
self.logger.debug("%s, process_msg_step_3_3", xid)
272275
elif msg.type == MsgType.File:

plugins/eh_wechat_slave.py

+40-19
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,80 @@
1-
import itchat
2-
import re
3-
import xmltodict
1+
import io
42
import logging
3+
import mimetypes
54
import os
6-
import io
5+
import re
76
import time
7+
from binascii import crc32
8+
9+
import itchat
810
import magic
9-
import mimetypes
10-
import config
11+
import xmltodict
1112
from PIL import Image
12-
from binascii import crc32
13+
14+
import config
1315
from channel import EFBChannel, EFBMsg, MsgType, MsgSource, TargetType, ChannelType
14-
from utils import extra
1516
from channelExceptions import EFBMessageTypeNotSupported
17+
from utils import extra
18+
1619

1720
def incomeMsgMeta(func):
1821
def wcFunc(self, msg, isGroupChat=False):
22+
logger = logging.getLogger("plugins.eh_wechat_slave.incomeMsgMeta")
1923
mobj = func(self, msg, isGroupChat)
20-
self = msg['FromUserName'] == itchat.get_friends()[0]['UserName']
21-
if self:
22-
msg['FromUserName'] = msg['ToUserName']
23-
mobj.text = "You: " + mobj.text
24-
FromUser = self.search_user(UserName=msg['FromUserName'])[0] or {"NickName": "User error. (UE01)", "RemarkName": "User error. (UE01)"}
24+
me = msg['FromUserName'] == itchat.get_friends()[0]['UserName']
25+
logger.debug("me, %s", me)
26+
if me:
27+
msg['FromUserName'], msg['ToUserName'] = msg['ToUserName'], msg['FromUserName']
28+
FromUser = self.search_user(UserName=msg['FromUserName']) or \
29+
[{"NickName": "User error. (UE01)", "RemarkName": "User error. (UE01)", "Uin": 0}]
30+
FromUser = FromUser[0]
31+
logger.debug("From user, %s", FromUser)
2532
if isGroupChat:
26-
member = self.search_user(UserName=msg['FromUserName'], ActualUserName=msg['ActualUserName'])[0]['MemberList'][0]
33+
logger.debug("groupchat")
34+
if me:
35+
msg['ActualUserName'] = msg['ToUserName']
36+
member = {"NickName": itchat.get_friends()[0]['NickName'], "DisplayName": "You", "Uin": itchat.get_friends()[0]['Uin']}
37+
else:
38+
logger.debug("search_user")
39+
member = self.search_user(UserName=msg['FromUserName'], ActualUserName=msg['ActualUserName'])[0]['MemberList'][0]
40+
logger.debug("search_user.done")
2741
mobj.source = MsgSource.Group
42+
logger.debug("Group. member: %s", member)
2843
mobj.origin = {
2944
'name': FromUser['NickName'],
3045
'alias': FromUser['RemarkName'] or FromUser['NickName'],
3146
'uid': self.get_uid(UserName=msg.get('FromUserName', None),
3247
NickName=FromUser.get('NickName', None),
3348
alias=FromUser.get('RemarkName', None),
34-
uid=FromUser.get('Uin', None))
49+
Uin=FromUser.get('Uin', None))
3550
}
3651
mobj.member = {
3752
'name': member['NickName'],
3853
'alias': member['DisplayName'],
3954
'uid': self.get_uid(UserName=msg.get('ActualUserName', None),
4055
NickName=member.get('NickName', None),
4156
alias=member.get('DisplayName', None),
42-
uid=member.get('Uin', None))
57+
Uin=member.get('Uin', None))
4358
}
59+
logger.debug("origin: %s\nmember: %s\n", mobj.origin, mobj.member)
4460
else:
61+
if me:
62+
mobj.text = "You: " + mobj.text
4563
mobj.source = MsgSource.User
4664
mobj.origin = {
4765
'name': FromUser['NickName'],
4866
'alias': FromUser['RemarkName'] or FromUser['NickName'],
4967
'uid': self.get_uid(UserName=msg.get('FromUserName', None),
5068
NickName=FromUser.get('NickName', None),
5169
alias=FromUser.get('RemarkName', None),
52-
uid=FromUser.get('Uin', None))
70+
Uin=FromUser.get('Uin', None))
5371
}
5472
mobj.destination = {
5573
'name': itchat.get_friends()[0]['NickName'],
5674
'alias': itchat.get_friends()[0]['NickName'],
5775
'uid': self.get_uid(UserName=msg['ToUserName'])
5876
}
59-
logger = logging.getLogger("plugins.eh_wechat_slave.%s" % __name__)
77+
logger.debug("dest: %s", mobj.destination)
6078
logger.info("WeChat incoming message:\nType: %s\nText: %s\nUserName: %s\nuid: %s\nname: %s" %
6179
(mobj.type, msg['Text'], msg['FromUserName'], mobj.origin['uid'], mobj.origin['name']))
6280
self.queue.put(mobj)
@@ -159,6 +177,9 @@ def get_uid(self, UserName=None, NickName=None, alias=None, Uin=None):
159177
data = {"nickname": NickName, "alias": alias, "uin": Uin}
160178
if UserName and not (NickName or alias or Uin):
161179
r = self.search_user(UserName=UserName)
180+
if not r:
181+
self.logger.debug("get_uid, return False")
182+
return False
162183
data = {"nickname": r[0]['NickName'], "alias": r[0]["RemarkName"], "uin": r[0]["Uin"]}
163184
for i in fallback_order:
164185
if data[i.lower()]:
@@ -221,7 +242,7 @@ def search_user(self, UserName=None, uid=None, uin=None, name=None, ActualUserNa
221242
"uin": i.get("Uin", None)}
222243
for j in fallback_order:
223244
if str(crc32(data[j.lower()].encode("utf-8"))) == uid:
224-
result.append(j.copy())
245+
result.append(i.copy())
225246
if str(i.get('UserName', '')) == UserName or \
226247
str(i.get('AttrStatus', '')) == uid or \
227248
str(i.get('Uin', '')) == uin or \

0 commit comments

Comments
 (0)