采用python编写微信自动回复程序(基于图灵机器人)

写在开头,注册CSDN这么久,第一次发博客,难免有写得不明白的地方,请读者们谅解!

一、要实现微信自动回复,需要如下准备:

1.注册一个图灵机器人(现在是要收费的,不过一个月的费用也不是很贵),注册好后,会有一个apikey,这个是以后连接图灵机器人需要到的;

java 自动回复机器人源码 自动回复程序编写_聊天机器人

2.安装python(本人是采用python3.7.4进行代码的编写),python安装教程很多,这里不多说了;
3.安装python的itchat和re两个安装包,安装包的教程也很多,这里也不多说了;
4.一个使用年限比较久的微信号(本人的微信号使用了7年),貌似注册一年的微信号是登录不了微信的网页版。因为本程序时基于网页版微信的自动回复。

二、程序中主要的函数解析

1.@itchat.msg_register([‘Text’,‘Map’, ‘Card’, ‘Note’, ‘Sharing’, ‘Picture’, ‘Video’])
def tuling_reply(msg):
该函数主要是连接微信和图灵机器人,在两者之间传递消息。使用该函数,先要注册消息的类型。
使用itchat模块读取微信消息的内容时,消息的格式如下:

{
 ‘MsgId’: ‘204068301817265407’,
 ‘FromUserName’: ‘@b61d******************************8572f9f’,
 ‘ToUserName’: ‘filehelper’,
 ‘MsgType’: 1,
 ‘Content’: ‘你好’,
 ‘Status’: 3,
 ‘ImgStatus’: 1,
 ‘CreateTime’: 1612185614,
 ‘VoiceLength’: 0,
 ‘PlayLength’: 0,
 ‘FileName’: ‘’,
 ‘FileSize’: ‘’,
 ‘MediaId’: ‘’,
 ‘Url’: ‘’,
 ‘AppMsgType’: 0,
 ‘StatusNotifyCode’: 0,
 ‘StatusNotifyUserName’: ‘’,
 ‘RecommendInfo’:
 {‘UserName’: ‘’,
 ‘NickName’: ‘’,
 ‘QQNum’: 0,
 ‘Province’: ‘’,
 ‘City’: ‘’,
 ‘Content’: ‘’,
 ‘Signature’: ‘’,
 ‘Alias’: ‘’,
 ‘Scene’: 0,
 ‘VerifyFlag’: 0,
 ‘AttrStatus’: 0,
 ‘Sex’: 0,
 ‘Ticket’: ‘’,
 ‘OpCode’: 0},
 ‘ForwardFlag’: 0,
 ‘AppInfo’:
 {‘AppID’: ‘’, ‘Type’: 0},
 ‘HasProductId’: 0,
 ‘Ticket’: ‘’,
 ‘ImgHeight’: 0,
 ‘ImgWidth’: 0,
 ‘SubMsgType’: 0,
 ‘NewMsgId’: 204068301817265407,
 ‘OriContent’: ‘’,
 ‘EncryFileName’: ‘’,
 ‘Type’: ‘Text’,
 ‘Text’: ‘你好’
 }

2.def is_right_id(targe_char, string): #在字符串string中,查找单个字符targe_char。
targe_char一般是字符’@‘因为使用itchat模块读取微信消息的内容时,FromUserName对应的值是以’@‘开头的,通过判断是否存在’@'来区别发送的消息是不是FromUserName或ToUserName类型。
可能是因为微信的保密原因,FromUserName或ToUserName是以字符串形式给出,不是明文形式。每一次重新扫码登录网页版微信时,同一个朋友的UserName都是不一样的,但是登录后是保持不变的。

3.def get_response(msg): #将微信的消息发给图灵机器人
函数中的KEY就是注册图灵机器人是的apikey。

三、功能讲解

1.通过微信的文件传输助手(filehelper)获取需要自动回复的小伙伴的FromUserName,一般是"@b61d******************************8572f9f"这种格式,再将这个数据发给文件传输助手,文件传输助手将会提示”更新聊天小伙伴成功“。
2.如果需要更换聊天小伙伴,发送“更新”或“更新聊天小伙伴"到文件传输助手,文件传输助手将会提示”更新设置已开启,等待设置新的聊天小伙伴“,这是讲收到的FromUserName(@b61d******************************8572f9f)发给文件传输助手,文件传输助手将提示”更新聊天小伙伴成功“。
3.选择好聊天小伙伴,就可以实现自动回复了

四、程序的测试

本人使用python3.7.4,32位,电脑系统是win10,64位。程序测试有效。

1.开启程序时,第一次选择聊天小伙伴

java 自动回复机器人源码 自动回复程序编写_java 自动回复机器人源码_02


2. 更新聊天小伙伴

java 自动回复机器人源码 自动回复程序编写_java 自动回复机器人源码_03


3.和聊天小伙伴的聊天内容,就不截图了,哈哈哈!

五、完整代码如下

#-*- coding:utf-8 -*-
import requests
import itchat
import re

KEY = '850***************2f'  #可以到图灵机器人官网申请一个apikey,现在要收费,一个月的费用不高
Target_user = "filehander"
flag = 1

def is_right_id(targe_char, string):         # 在字符串string中,查找单个字符targe_char
    a = re.search(targe_char, string)        # 采用正则表达式查找,如果找到返回True,否则返回False
    if a:
        return True
    else:
        return False

def get_response(msg):
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key'    : KEY,
        'info'   : msg,
        'userid' : 'wechat-robot',
    }
    try:
        r = requests.post(apiUrl, data=data).json()   # 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常
        return r.get('text')                          # 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常
    except:                                           # 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return
        return                                        # 将会返回一个None


@itchat.msg_register(['Text','Map', 'Card', 'Note', 'Sharing', 'Picture', 'Video'])
def tuling_reply(msg):
    global Target_user, flag
    if flag == 1:
        itchat.send("收到的消息:" + msg['Text'] + '\n' + "消息来自:" + msg["FromUserName"], toUserName='filehelper')
    if msg["FromUserName"] == Target_user or msg["ToUserName"] == "filehelper":
        if is_right_id('@', msg['Content']):
            Target_user = msg['Content']
            flag = 0
            itchat.send("更新聊天小伙伴成功", toUserName='filehelper')
        if msg["ToUserName"] == "filehelper" and msg['Content'] == "更新聊天小伙伴" or msg['Content'] == "更新":
            flag = 1
            itchat.send("更新设置已开启,等待设置新的聊天小伙伴", toUserName='filehelper')
        if msg["FromUserName"] == Target_user:
            reply = get_response(msg['Text'])
            itchat.send(reply, toUserName=Target_user)

itchat.auto_login(hotReload=True)
itchat.run()

六、参考资料

1.itchat——使用python登录网页版微信 2.微信的自动回复&接入聊天机器人