zoukankan      html  css  js  c++  java
  • 微信机器人之邮件提醒特定的人的消息

    背景

    之前写的一篇文章里微信自动聊天机器人,利用图灵网的机器人进行消息回复。但是突然想到,如果特定的某人(emmm,你懂的)发消息自己却没有看见,只是个机器人来回复的话还是不太好的。所以决定增加一些功能来解决这个问题,目前优化后的微信聊天机器人实现的功能特性为:除特定的人以外的朋友来消息,微信机器人自动回复;特定的人(没错,特定的人指的就是女朋友)来消息,自动回复后可以通过邮件告知自己,并及时的进行消息的回复。

    思路

    还是用了itchat的库,但是之前一直认为msg['FromUserName']指的就是微信的ID账号名,所以想当然的就认为加一个判断就行了,设置一个special_name的字符串,如果msg['FromUserName']是在这个special_name这个列表里的话就直接发送邮件提醒。思路上没问题,但是没想到在判断是否为special_name的字符串的时候遇到了各种bug。首先msg['FromUserName']的提取是一个字典的形式,所以并不能直接用字符串相等进行判断。其次,我想利用UserName作为判断每一个发送方的判断依据,结果测试后却是失败的,经过调试发现,微信里每次消息的UserName都是不相同的!!由于是字典的形式,我们可以通过下列代码的格式对某对键值进行提取:

    thename = itchat.search_friends(userName=msg['FromUserName'])['UserName']
    

    为了检测与说明,我们通过下述代码将name为XXXX的信息打印出来看一看

    friends_list = itchat.get_friends(update=True)
    name = itchat.search_friends(name=u'XXXX')
    print(name)
    

    结果如下:

    [<User: {'StarFriend': 0, 'UniFriend': 0, 'MemberCount': 0, 'ContactFlag': 1, 'HeadImgUrl': '/cgi-bin/...', 'RemarkPYQuanPin': '...', 'MemberList': <ContactList: []>, 'SnsFlag': 1, 'PYInitial': 'MRYUN', 'OwnerUin': 0, 'Sex': 0, 'Province': '', 'AppAccountFlag': 0, 'Alias': '', 'Statues': 0, 'UserName': '@d28...', 'ChatRoomId': 0, 'RemarkName': '...', 'PYQuanPin': '...', 'NickName': '...', 'EncryChatRoomId': '', 'RemarkPYInitial': '..', 'VerifyFlag': 0, 'HideInputBarFlag': 0, 'DisplayName': '', 'Signature': '', 'IsOwner': 0, 'Uin': 0, 'AttrStatus': 233509, 'City': '', 'KeyWord': ''}>]
    

    关键的信息我已经隐去,这段像字典一样的代码就是你微通讯录里对朋友的信息的显示。UserName每次都是不同的,但是RemarkName为你备注朋友的姓名,NickName为你朋友的昵称,为了代码的持续可用性,我最后选择了RemarkName作为最后的判断标准。

    更新

    2018.2.28优化了代码,加入了filehelper控制程序暂停的功能。这样子跑在树莓派端,即使电脑不在身旁,也能及时控制程序暂停。

    代码展示

    代码请见github

    作者:YunLambert

    -------------------------------------------

    个性签名:一名会音乐、爱健身的不合格程序员

    可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾

  • 相关阅读:
    【DP】解析 SOSdp(子集和 dp)
    【图论】AcWing 342. 道路与航线 题目解答 (拓扑序+dijkstra)
    【DP】斜率优化初步
    Educational Codeforces Round 95 (Rated for Div. 2) 题解(待更)
    2020-2021 ACM-ICPC, Asia Seoul Regional Contest 部分题目解答
    Codeforces Round #704 (Div. 2) 题解(待更)
    Samara Farewell Contest 2020 (XXI Open Cup, GP of Samara) 部分题目解答
    AtCoder Regular Contest 113 题解(待补)
    docker中php-fpm无法更改时区问题
    pod时区更改
  • 原文地址:https://www.cnblogs.com/yunlambert/p/8471241.html
Copyright © 2011-2022 走看看