微信自动回复

技术文章请注意时效!原理才是根本。

微信机器人三个主要功能:自动回复,撤回消息查看,图灵机器人。

库选择

可以自己写一个,也是比较简单的,但是浪费时间,尤其是改bug会消耗很多精力,github存在的意义就在于此了。使用别人的库,可以学别人的思路,实现各种功能可以参考的代码也比较多。
python版itchat库:https://github.com/littlecodersh/ItChat
java版itchat4j库:https://github.com/yaphone/itchat4j
这里选择python版的itchat库,它的使用说明:https://itchat.readthedocs.io/zh/latest/。

itchat的原理

使用itchat,会在相应文件夹下面输出一张图片qr.png,扫描登陆就行了。其实登陆的是网页版微信。也就是使用itchat,就不能用网页微信了。

使用wireshark或者直接浏览器控制台,就可以得到微信的网页端各种api,包装一下就是itchat了。 如果滥用,会被微信封掉网页端的。我把程序放在了服务器上,ip是还是国外的,已经用了几个月了,也没有什么异常,只是在开始提醒我是不是我自己登陆的。

itchat基本使用

基本的使用查看itchat作者写的文档就行了。

对itchat可能有问题的地方

a)为什么自己从手机发出的消息能够被itchat相关的函数接受? 因为itchat登陆的是网页端,自己从手机发出的消息,微信服务器会自动同步到网页端。
b)为什么要把控制微信自动回复机器人的命令发到文件助手上,而不能发给自己? 从微信自动回复机器人,也就是微信网页端发出的命令,会自动同步到手机上。 从手机上发给文件助手的命令,微信网页端也进行同步,微信自动回复机器人也能接收到。 但是自己发给自己,比如从微信网页端发消息给自己,微信不会同步到手机上,它认为你自己发给自己,你自己是知道的,就不会进行同步。同理从手机发给自己,也不会进行同步,微信网页端也收不到消息。
c)把登陆二维码发到手机上,通过微信扫二维码功能,选择相册中浏览本地图片可以登陆吗? 不可以,显然微信做了限制,只能扫其他设备的二维码才能登陆。

在自动回复过程中,主人在手机上回复给了好友,也就相当于主人知道了好友消息,正在手动回复,这时需要关闭自动回复功能。需要一个自动回复的会话机制。

在接受好友消息的函数中,创建一个会话,会话id(session_id)是msg[‘FromUserName’] + msg[‘ToUserName’],好友的名称+主人的名称。如果在自动回复好友过程中,也就是有一个好友的名称+主人的名称会话,主人再去回复好友,这时拿到的会话是一个,再去处理函数中other_to_host判断如果主人回复了,就把会话中的相关值更改SessionListsession_id = True,不再启用自动回复。

撤回消息查看的逻辑

好友发给你的消息,一定到了你的手机端和网页端,好友撤回消息后,微信会把你手机端和网页端对应的消息撤回。如果好友每发一个消息,就保存下来,撤回后(itchat中撤回消息装饰器参数是itchat.content.NOTE),就把对应的消息发到文件助手上通知,就做到了撤回消息的查看。

调用次数限制

为了防止别人频繁的和助手对话,网页端微信可能被封。限制助手在一天内回复特定人的次数。 每次回复都把一个dict类型的(保存着用户名-调用助手的次数)中对应的次数加一。 到特定的次数就把他放到不回复的名单中,明天把这个名单和dict类型(保存着用户名-调用助手的次数)都清空。

网页控制

发表评论

电子邮件地址不会被公开。 必填项已用*标注