https://zhuanlan.zhihu.com/p/308999073html
今天是鄙人的生日,歡luo事後想寫點關於itchat的文章~python
(不當心暴露年齡了,是的,我已經16歲了~~)react
言歸正傳,這裏說的自動回覆包括了兩種:一個是相似QQ的「【自動回覆】」,就是一句本身設置的固定的話,別人以給你發消息你就自動回覆這句話;二是相似Siri的智能回覆,就是找了一個機器人代替你聊天,哈哈,雖然賤賤的可是我真的很討厭微信聊天。json
1、運行環境和看懂下文須要的知識windows
一、Python基本語法。這個若是不清楚的話,先學習下吧,幾天就看完了:api
Python基本知識服務器
二、Linux系統。固然這個不是必須的,若是你只是想試驗一下的話徹底能夠在windows下,Python能夠跨平臺的,不過畢竟我想24h跑這個腳本,那就最好用服務器,服務器大部分是Linux的,我用的是阿里雲ECS CentOS release 6.5。微信
2、基本原理app
一、針對第一種類QQ的自動回覆,這個很簡單,就是收到消息就向發送者發送一條固定字符串就好了。ide
二、針對第二種類Siri的智能回覆,這個須要調用圖靈機器人(Turing Robort),就是將收到的消息發送給Turing,再把Turing回覆的消息發送給發送者。
三、有一些問題須要解決
3、代碼實現
一、申請Turing機器人的對外接口key
添加一個機器人,設置機器人跟你的名字同樣,其餘信息也同樣,由於有時候這個傻子會以第三人稱來回復消息,好比「帥帥以爲這個很不錯!」,設置好,不容易露餡!
最關鍵的是拿到APIkey,而後替換掉下面代碼中的「replaceKeyByYourKey」。
二、python源代碼
#coding=utf8 import itchat from itchat.content import TEXT from itchat.content import * import sys import time import re import requests, json import aiml import os # When recieve the following msg types, trigger the auto replying. @itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO],isFriendChat=True, isMpChat=True) def text_reply(msg): global auto_reply, robort_reply, peer_list # The command signal of "[自動回覆]" if msg['FromUserName'] == myUserName and msg['Content'] == u"開啓自動回覆": auto_reply = True itchat.send_msg(u"[自動回覆]已經打開。\n", msg['FromUserName']) elif msg['FromUserName'] == myUserName and msg['Content'] == u"關閉自動回覆": auto_reply = False itchat.send_msg(u"[自動回覆]已經關閉。\n", msg['FromUserName']) # elif not msg['FromUserName'] == myUserName: else: if auto_reply == True: itchat.send_msg(u"[自動回覆]您好,我如今有事不在,一會再和您聯繫。\n", msg['FromUserName']) else: ''' For none-filehelper message, if recieve '= =', start robort replying. if recieve 'x x', stop robort replying. ''' if msg['Content'] == u"= =": robort_reply = True peer_list.append(msg['ToUserName']) return elif msg['Content'] == u"x x": robort_reply = False peer_list.remove(msg['ToUserName']) return # Let Turing reply the msg. if robort_reply == True and msg['FromUserName'] in peer_list: # Sleep 1 second is not necessary. Just cheat human. time.sleep(1) cont = requests.get('http://www.tuling123.com/openapi/api?key=replacekeyByYourKey&info=%s' % msg['Content']).content m = json.loads