Python使用itchat庫實現微信自動回復

參考

代碼及結果

#!/usr/bin/env python  
# encoding: utf-8  

import requests
import itchat
import time
from threading import Timer

KEY = '8edce3ce905a4c1dbb965e6b35c3834d'

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捕獲了異常
    # 如果服務器沒能正常交互(返回非json或無法連接),那么就會進入下面的return
    except:
        # 將會返回一個None
        return

def isMsgFromMyself(msgFromUserName):
    # 檢查消息發送方是否為自己
    global myName
    return myName == msgFromUserName


# 注冊文本消息回復函數
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
    global autoReplyFlag,  timerSet, noReply, t  # 狀態標志位
    print(msg['Text'])
    if isMsgFromMyself(msg['FromUserName']):
        print("Replied!!")
        autoReplyFlag = False
        noReply = False
        try:
            t.cancel()
            print("Timer Canceled")
            timerSet = False
        except:
            pass
        return None

    if autoReplyFlag:
           # 為了保證在圖靈Key出現問題的時候仍舊可以回復,這里設置一個默認回復
        defaultReply = 'I received: ' + msg['Text']
        # 如果圖靈Key出現問題,那么reply將會是None
        reply = get_response(msg['Text'])
        # a or b的意思是,如果a有內容,那么返回a,否則返回b
        # 有內容一般就是指非空或者非None,你可以用`if a: print('True')`來測試
        return reply or defaultReply
    else:
        noReply = True
        if not timerSet:
            # if time.time()-noReplyStartTime >= 120:
            print("Timer setting")
            t = Timer(12, sendBusyStatus, [msg['FromUserName']])
            t.start()
            timerSet = True

def sendBusyStatus(UserName):
    global noReply, autoReplyFlag, timerSet
    print("Timer Working!")
    if noReply:
        itchat.send("我的主人在認真地熵減!讓我先陪你聊一會吧", UserName)
        autoReplyFlag = True
        timerSet = False

# 為了讓實驗過程更加方便(修改程序不用多次掃碼),我們使用熱啟動
itchat.auto_login()

autoReplyFlag, timerSet, noReply = False, False, False
t = 0  # 定義全局變量t, 用作觸發器使用,此行甚是丑陋;怎么才能更優雅呢?請大神指點。
myName = itchat.get_friends(update=True)[0]['UserName']
itchat.run()

相比于原教程,此處添加了一定時間內不回復即開啟自動回復的功能,大致原理是檢測消息發送方,如果不是自己的話就開啟就設置一個時間觸發器(學到了觸發器的用法),在規定時間內向對方發送消息。在這期間如果自己在手機上回復,那么就撤銷觸發器。整個程序的流程圖如下:

程序流程圖

聊天截圖:


聊天Demo

后期可以考慮程序監聽日常的聊天內容形成數據,然后利用數據訓練遞歸神經網絡以形成更加智能和個性化的回復。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容