Chatbot for Wechat 微信聊天机器人

写在前面 Notice

1、这个小玩意本是2018年春节写给女朋友玩的,当时只有图灵机器人的自动回复功能。时隔一年,2019春节时又加了一些功能,包括微软小冰的自动回复、读心术、成语接龙、照片测颜值、图片写诗、斗图、消息防撤回。许多功能已经有人搞过了,所以本工具更多是参考别人的实现方式,把各种功能整合起来。

2、非专业码农,不能保证功能不出现问题。如果发现任何bug,请和我联系。

3、语言:python3,这次没有打包成exe,而是采用批处理的方式,发现非常好用,比exe省事多了。

下载 Download

WechatRobot.zip

 

功能介绍 Introduction of Functionality

 

(1)自动回复

可以设置一个开启暗号,不同的好友/群聊可以有不同的暗号,当特定的好友/群组发送了该暗号时,对该好友/群组开启自动回复功能。例如,下面这个好友的暗号就叫“开启暗号”,收到这个消息号,我将自动回复“我来也”,然后就进入自动回复模式。

 

(2)斗图

可以看到,有时会回复图片,有时会回复文字。这是因为这个工具具有斗图功能,默认的斗图比为30%。可以通过回复“斗图+1-10的数字”,为不同的好友/群聊设置不同的斗图比,下面将斗图比设为10,那么将一直回复图片。如果接收到的消息是文字或是“/便便”这样的可解释为文字的小表情,程序将试图对文字进行分词,然后随机从分词结果中选择一个词作为关键词,在斗图啦网站(https://www.doutula.com/photo/list/)上搜索,如果接收到的消息也是图片,没有关键词可用,则在斗图啦网站的最新表情页面随机搜索。由于需要下载再上传,所以斗图模式下回复图片的速度稍慢于回复文字。

有了这个功能,斗图应该能小无敌了吧。斗一会图,把斗图等级改为0,就会回复文字了。

 

(3)读心术

发送消息“读心”进入读心模式,接口是微软小冰的读心术,通过回答最多15个问题来猜你想的是谁。试了几下,有点厉害,相当准确。

 

(4)成语接龙

发送消息“接龙”进入成语接龙模式。实现方式:在本地保存了一个成语词典,每次接收到一个符合规则的词(未用过,首字=上词尾字)时,先检查在不在词典里,如果不在,则在百度汉语里检索,如果没有检索到,则回复该词不是成语;如果是成语,则首先在本地词典里查找接龙词,如果找不到,则在成语接龙网(https://chengyujielong.51240.com/)上尝试返回结果,如果无有效返回,则向好友/群聊成员认输。如果对方接不上,则可以向我认输,或者向我求助。游戏一直持续,直至一方认输为止。自己试了一下,难度相当高,特别是从本地词典里找成语时可不会管该成语是否常用,经常冒出让我觉得自己语体教的高级词,于是干脆带上了词典里的解释,也算一种学习了。

 

(5)测颜值+为图片写诗

接口为微软小冰的“拼颜值”和“少女诗人小冰”功能。原理:如果接收到图片,通过随机数判断是否是斗图模式。如果不是斗图模式,则尝试以二进制数据流读取图片内容(好像gif无法读取,会返回空结果)。如果成功读取,则将图片保存至本地(pic文件夹,文件名为接收图片的时间),并将图片上传给微软小冰。回复“1”可以测颜值:将微软小冰测得的文字结果返回并回复,然后以正则表达式判断有没有分数,如果有分数,再返回人脸识别结果,这一点很重要,因为当照片中有多个人时,需要这个“给原图加了戳的新图”来判断文字说的是哪位。

回复“2”可以对图片写诗,就是把读取的图片上传给少女诗人小冰,它会返回三段长度不等的诗,每个诗带一个分数,这里会选择得分最高的诗回复。之前gitHub上有一个有趣的项目,叫neural storyteller,用卷积神经网络给图片编故事的,可惜要用Theano,我试了很久都没成功(吐槽一下,Theano真是最难装的软件),但期望很高。我想这个图片写诗的功能应该跟它原理差不多吧。

下图所示的是拿姜梓新和罗玉凤的照片测颜值,并拿姜梓新的照片写诗。个人觉得,颜值结果还是有相当强的参考性的……至于诗嘛,可能是给肖像写诗的原因,太飘忽了,不过,还是要相信小冰的作诗能力,毕竟在报纸上发表过大作的。

其实,最好玩的是发多人照上去,它会回复谁的颜值最高,谁的颜值拖了后腿……

(6)消息防撤回

顾名思义,比较骚操作。原理:对于指定的好友/群聊,会自动监听并保存最近5条聊天记录,如果发生了消息撤回,就会找到那条消息的ID,并把内容发送到自己的文件传输助手上,不管那条消息是文字,图片,还是其他。

下图中,对方了怕我辣眼睛,想要撤回凤姐的照片和一条消息。”你撤回啥子”是对上一条消息的自动回复,“美图来了哇……”是对图片的自动回复。

撤回后,我和他的聊天记录里显示消息和图片已撤回:

然并卵,我的文件传输助手已经收到了提示:

 

(7) 不同的回复风格

目前最常用的自动回复机器人大概就是图灵机器人和微软小冰了。别人的实现大多用图灵,是因为它有API Key,方便接入。微软小冰没有开放API,但是我们可以曲线救国:自己关注“小冰”公众号,把目标好友/群聊发来的消息转发给小冰,让小冰回复,然后再把小冰的回复转发给目标好友/群聊。

两个机器人的画风不太相同:图灵在技术上明显弱一些,但是有个好处是比较老实,比如你问ta时间啊之类的,ta会告诉你,偏工具向,甚至能当本英语查词器。

小冰技术上更强,甚至能看到多句逻辑,回复更浪(能有多浪:https://www.zhihu.com/question/35065673),偏调戏向。

 

最后,如果接收到关闭自动回复的暗号——这位好友就设置为“关闭暗号”,机器人就会停止除了防撤回以外的一切功能。

 

如何使用 How to Use

首先,电脑里要装python3,并且环境变量设置好。确认方法:打开cmd命令提示符,输入python –version,回车,出现Python3.x的版本号即OK。然后,将程序包解压缩,里面的_internal文件夹是python代码和一些预留的路径,config文件夹存放配置文件,,pic文件夹用于保存聊天对象发来的图片,这些基本上都不需要操作(顶多把pic里的图片拷走~)。需要操作的只是那4个.bat结尾的批处理,按步骤具体如下。

(1)运行“1 install_dependency.bat”,安装所需要的python外部库

我的电脑里都已经装好了,所以都是“requirement already satisfied”。

(2.1)运行“2.1 setup_general.bat”,进行一般设置

最主要的是选择自动回复接口(图灵/微软/无)。如果选择图灵,则需要提供一个APIKey,可以去图灵机器人官网申请,很容易的。微软小冰的话不需要也没有APIKey,但需要先自行在微信中关注“小冰”公众号。两者的区别除了上面的风格差异外,图灵机器人可以自己提供语料库,虽然低级(匹配模式,而不是模型),但也聊胜于无,至少把机器人名称设置为男/女朋友对你的昵称之类的,另外,图灵机器人免费版有个限制,每日的回复上限是100。

批处理会在config文件夹中建立一个env.txt的文件,内容一看便知,也可以通过修改文件中冒号后面的内容,对设置进行更改。

(2.2)运行“2.2 setup_friends.bat”,进行聊天对象的设置

对特定的好友/群聊/自己进行设置,包括好友昵称,群聊名称和成员昵称,自动回复的开启和关闭,一些提示语,开启防撤回等。下面是关于一个群聊的设置,都是傻瓜式操作。

上图的最后显示,批处理在config/friends_config中生成dinenwei.txt的文本文件,里面的内容也是一看便知。每设置一个聊天对象(好友/群聊),就会生成这么一个文件,如果两个聊天对象的情况差不多,也可以简单的复制并修改。

(3)运行“3 run_robot.bat”,开启聊天机器人

第一次运行时,会弹出二维码,用手机微信扫码登陆即可。程序会读取上面的配置文件,如果某个好友/群聊找不到会提示错误,但只是该好友/群聊的设置无效,不影响整体运行。如果设置了图灵接口,程序会检查该接口的可用性。然后,程序就入监听状态了,可以从上面看到各种处理的内容,比如对方发来的消息,斗图时分词和下载图片的url等等。

(4)注意事项

第一,程序一旦关掉,机器人就不复存在,如果要让它持续在线,最好放在工作站上运行。

第二,_internal/wxpy_cache里的缓存可以使程序关掉后短时间内重新运行时不必再扫码,如果是想使用新的微信账号,要把这里面的两个pkl文件删除掉。

第三,虽然在设置好友时包括了自己,但是有的微信账号是不能给自己发信息的,这个好像是天然的bug,不过影响不大,给自己发消息也就只是调试用的。可以在wx.qq.com上登陆自己的微信,然后给自己发消息,测试自己是否中枪。

发表评论

Close Menu