diff --git a/main.py b/main.py index 9815eda..255e719 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,37 @@ class WXBot(WebWeixin): if member['UserName'] == id: return member['NickName'] return None + # 获取用户备注(没有则返回昵称)或群名称,若本地无相关数据返回_unknown + def getUserOrGroupName(self, id): + name = '_unknown' + if id == self.User['UserName']: + return self.User['NickName'] # 自己 + + if id[:2] == '@@': + # 群 + name = self.getGroupName(id) + else: + # 特殊账号 + for member in self.SpecialUsersList: + if member['UserName'] == id: + name = member['RemarkName'] if member[ + 'RemarkName'] else member['NickName'] + # 公众号或服务号 + for member in self.PublicUsersList: + if member['UserName'] == id: + name = member['RemarkName'] if member[ + 'RemarkName'] else member['NickName'] + # 直接联系人 + for member in self.ContactList: + if member['UserName'] == id: + name = member['RemarkName'] if member[ + 'RemarkName'] else member['NickName'] + # 群友 + for member in self.GroupMemeberList: + if member['UserName'] == id: + name = member['DisplayName'] if member[ + 'DisplayName'] else member['NickName'] + return name def composeMessageID(self, msgID, timestamp): return time.strftime('%Y%m%d%H%M%S', time.localtime(timestamp)) + msgID @@ -100,9 +131,9 @@ class WXBot(WebWeixin): "create_time": msg['CreateTime'], "msg_type": msgType, "content": None, - "from_name": self.getUserRemarkName(msg['FromUserName']), + "from_name": self.getUserOrGroupName(msg['FromUserName']), "from_nickname": self.getUserNickName(msg['FromUserName']), - "to_name": self.getUserRemarkName(msg['ToUserName']), + "to_name": self.getUserOrGroupName(msg['ToUserName']), "to_nickname": self.getUserNickName(msg['ToUserName']), "group_name": None } @@ -114,16 +145,19 @@ class WXBot(WebWeixin): # 群消息 if ":
" in msg['Content']: [people, content] = msg['Content'].split(':
', 1) - params['group_name'] = self.getUserRemarkName(msg['FromUserName']) - params['from_name'] = self.getUserRemarkName(people) + params['group_name'] = self.getUserOrGroupName(msg['FromUserName']) + params['from_name'] = self.getUserOrGroupName(people) params['to_name'] = params['to_nickname'] = None elif msg['ToUserName'][:2] == '@@': # 发送的群消息 - params['group_name'] = self.getUserRemarkName(msg['ToUserName']) + params['group_name'] = self.getUserOrGroupName(msg['ToUserName']) params['from_name'] = self.User['NickName'] params['to_name'] = params['to_nickname'] = None if msgType == 1: # 文字消息 + if params['from_name'] == '_unknown' or params['to_name'] == '_unknown': + # 有陌生人的文字消息,可能是新添加的好友,重新获取联系人列表 + self.webwxgetcontact() params['content'] = msg['Content'].replace('<', '<').replace('>', '>') elif msgType == 3: params['content'] = "[图片](%s)" % composedID