今天是鄙人的生日,歡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回覆的消息發送給發送者。

三、有一些問題須要解決

  • 如何區別這兩種自動回覆呢?類QQ自動回覆針對全部人,不針對羣消息(估計1分鐘內就被踢出羣!),向本身發送消息「開啓自動回覆」,則便開啓了對全部人的類QQ自動回覆;向本身發送消息「關閉自動回覆」,則便關閉了對全部人的類QQ自動回覆。類Siri消息針對指定人,也是不針對羣消息,向對方發送消息「= =」 (你能夠本身換成別的),便開啓了智能回覆;向對方發送消息「x x」,則關閉智能回覆。
  • 只針對某我的或者某些人開啓智能回覆呢?在腳本中增長一個須要對其開啓智能回覆的人的list,只有這些人發的消息纔會自動回覆。

 

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(cont) itchat.send(m['text'], msg['FromUserName']) if m['code'] == 200000: itchat.send(m['url'], msg['FromUserName']) if m['code'] == 302000: itchat.send(m['list'], msg['FromUserName']) if m['code'] == 308000: itchat.send(m['list'], msg['FromUserName']) return # Main if __name__ == '__main__': # Set the hot login itchat.auto_login(enableCmdQR=True, hotReload=True) # Get your own UserName myUserName = itchat.get_friends(update=True)[0]["UserName"] print myUserName auto_reply = False robort_reply = False peer_list = [] itchat.run() 

 

 

4、成果檢驗

 

 

 

 

不過奉勸你們不要輕易開啓智能回覆,下面是我第一次實戰應用!這位幾個小時前新老鐵已經把我拉黑啦!瞅瞅這個機器人段子手胡說八道了些什麼!!

 

 

「感受你不是正常人」,哈哈哈,對不住了,老鐵~~