yunlambert

背景

之前写的一篇文章里微信自动聊天机器人,利用图灵网的机器人进行消息回复。但是突然想到,如果特定的某人(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

分类:

技术点:

相关文章:

  • 2022-02-23
  • 2021-09-27
  • 2021-11-15
  • 2021-12-14
  • 2021-07-05
  • 2021-06-18
  • 2021-12-04
  • 2021-11-02
猜你喜欢
  • 2021-11-16
  • 2021-11-06
  • 2021-06-09
  • 2021-11-27
  • 2021-11-02
  • 2021-12-22
相关资源
相似解决方案