python QQ聊天機器人,qqbot 使用簡介

一、介紹

qqbot 是一個用 python 實現的、基於騰訊 SmartQQ 協議的 QQ 機器人框架,可運行在 Linux 、 Windows 和 Mac OSX 平臺下。

你可以通過擴展 qqbot 來實現:

  • 監控、收集 QQ 消息
  • 自動消息推送
  • 聊天機器人
  • 通過 QQ 遠程控制你的設備

二、安裝方法

在 Python 2.7/3.4+ 下使用,用 pip 安裝:

pip install qqbot

三、 實例

在此例子中,通過判斷對方發過來的文字內容進行特定內容回覆,同時,爲了豐富回覆內容,我將QQ自帶的大量表情也添加到了規則庫當中,這樣對方即使給你發送一些聊天表情,比如笑臉,哭臉,等各種表情,這邊都會有所監聽,都可做相應回覆,因爲這個例子就是最簡單的測試demo,所以會監聽所有聊天消息,可能會給羣裏發大量消息,所以,慎用。

四、消息監聽回覆端

#!/usr/bin/env python  
# encoding: utf-8  
""" 
@version: v1.0 
@author: W_H_J 
@license: Apache Licence  
@contact: [email protected] 
@site:  
@software: PyCharm 
@file: qqRoboot.py 
@time: 2018/7/23 14:55 
@describe: qq機器人
"""
import random

import re
from qqbot import QQBotSlot as qqbotslot, RunBot

from dictList import dictList


@qqbotslot
def onQQMessage(bot, contact, member, content):
    res_url = '[^.*?[]]'
    link = re.findall(res_url, str(content), re.I | re.S | re.M)
    res_url2 = '/Emoji.*?'
    link2 = re.findall(res_url2, str(content), re.I | re.S | re.M)
    print('*****',link)
    if 'hello' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["niHao"])))
    elif '在' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["zai"])))
    elif '你好' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["niHao"])))
    elif '啊' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["a"])))
    elif '嗯' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["en"])))
    elif '哦' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif '沒事' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["everyThing"])))
    elif '/表情' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["everyThing"])))
    elif '/白眼' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["baiYan"])))
    elif '什麼' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["shenMe"])))
    elif '確' in str(content):
        bot.SendTo(contact,  str(random.choice(dictList["everyThing"])))
    elif '拜拜' in str(content):
        bot.SendTo(contact, '你確定要和我說再見了嗎?')
    elif len(link):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif '/偷笑' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif '..' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif '。。。' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif len(link2):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    elif '哈' in str(content):
        bot.SendTo(contact, str(random.choice(dictList["everyThing"])))
    #特殊標記字符,停止監聽
    elif '++' in content:
        bot.SendTo(contact, '晚安,好夢')
        bot.Stop()


if __name__ == '__main__':
    RunBot()

五、 消息自動回覆語料庫,數據來源《網易情話牆》

#!/usr/bin/env python  
# encoding: utf-8  
""" 
@version: v1.0 
@author: W_H_J 
@license: Apache Licence  
@contact: [email protected] 
@site:  
@software: PyCharm 
@file: dictList.py
@time: 2018/7/25 16:54 
@describe: 語料庫
"""
dictList = {
    "niHao": ['在想你呀!', '在靜靜的等你發消息!', '在呀,親,有什麼吩咐?', '在的,殿下,很高興爲您服務!', '您所呼叫的用戶尚在廁所中,稍後請拿廁紙給他!', '你終於來啦,我找你N年了,去火星幹什麼了?我現在去冥王星,回頭跟你說個事,別走開啊。' , '你好、我去殺幾個人,很快回來。', '想跟我聊天?我會的不多,就這一句了!', '你好,我是主人的美女祕書,有什麼事就跟我說吧,等他回來我會轉告他的。', '嗨——我現在不在,如果有事請在聽到“嘟”的一聲後留言……嘟!--請留言:嘟', '對不起!我已經死了!不過謝謝你來看我!今天晚上12點我也去看你!'],
    "zai": ['從此尋花問柳,閉口不談一生廝守。 從此紅燈綠酒,再也不想牽誰的手。 從此人海漂流,閉口不談愛到白頭。 從此單打獨鬥,再也不會徹夜淚流。 從此放下離愁,生生世世酒敬自由。', '我想,你我之間的關係比陌生人多一點兒,比好朋友少一點兒,比擦肩而過複雜點兒,比萍水相逢簡單點兒。', '八戒啊,爲師正與嫦娥仙子奔月中,待會兒去高老莊找你……', '對不起,由於服務器的原因,您剛纔發的信息丟失,請重發一次。', '對不起,你所聯繫的用戶因爲太過帥氣,已被騰訊公司刪除。詳情請諮詢110,謝謝,再見。', '我去吃飯了,如果你是帥哥,請一會聯繫我,如果你是美女……就算你是美女,我也要先吃飽肚子啊!', '洗澡中,請勿打擾,偷窺請購票,個體四十,團體八折,訂票電話:一般人我不告訴他!', '人有三急,若半分鐘以後回覆,說明我在噓噓,一分鐘以內回覆,說明我在便便,一小時之外未回覆,請幫我打120。', '你終於來啦,我找你N年了,去火星幹什麼了?我現在去冥王星,回頭跟你說個事,別走開啊。'],
    "a": ['“我想給你講一個很長的故事。”,“講。”,“我喜歡你。”','破例說個祕密。其實我不用看到你的臉才能喜歡你,也不用聽到你的聲音,不用知道你有什麼消息。我所知道的是,在生活中不多見的閃光的時刻我會想到你,煙花升起來,雪落下去,人們圍上來擁抱我,這樣的時刻。我猜你和世界上所有的美好連在一起。所以我想盡量去看一些好的東西,這就是我喜歡你的方式。', '你在屏幕裏 我卻抱不到你。', '哪裏有什麼突然好想你,你一直都在我心裏。', '我昨晚做了一個夢我穿越回到了一個陌生的學校上學,我到了班級門口,然後我回頭一看,看見了你也在,你梳着那時的馬尾,沒有戴眼鏡。可是那時你已經不認識我了,我上去問一句,你以前是漣中的吧。你說不是。我說你記得我嗎?你說不認識我。我笑了一下,摸摸你的頭,你也笑了一下,和我剛認識的你一樣。', '你是我的單曲循環 而我卻是你的隨機播放。', '我只有一點點喜歡你了,我很乖了。我沒有鬧了,我也沒有和別人提到你了。我想了一千遍一萬遍,我們在一起的樣子。又覺得,這輩子都不要和你在一起了。我喜歡你,死不悔改,認真又慫。', '春風十里 五十里 一百里 體測八百米 海底兩萬裏 德芙巧克力 香草味八喜 可可布朗尼 榴蓮菠蘿蜜 芝士玉米粒 雞汁土豆泥 黑椒牛裏脊 黃燜辣子雞 紅燒排骨醬醋魚 不如你 全都不如你'],
    "shenMe": ['扔過那麼多的東西, 離開過那麼多的人, 身邊的人來來往往, 忘記過那麼多熟悉的臉, 熬過無數個深夜和黎明, 義無反顧撞過那麼多南牆, 皆是黃粱一夢的空歡喜一場, 到頭來卻忘記自己是個極其念舊的人。', '但願你已經睡着 一覺醒來的時候是颯爽的早晨 而不是四下無人的夜,願你能早日擁有強大的內心,好抵禦未來那些未知的風雨,願你成爲自己的太陽,無需憑藉誰的光.但願你今後都好 獨闖的日子裏不得孤單堅持走完這一場.','我主動來找你 是因爲我太喜歡你 我已經不主動找你 因爲你每一句回覆都敷衍得那麼不走心 不是不喜歡你了 只是不敢再那樣喜歡了', '你看過《月亮與六便士》嗎?裏面有一句臺詞是:“我用盡全力,過着平凡的一生。”我當時覺得那是一句悲傷的臺詞。但只需要加上一個限定詞,就可以讓它堂而皇之的滿足我關於美好人生的所有幻想的,那就是——“和你。', '以前,給你的備註是十二,朋友十二畫戀人十二畫,愛人十二畫,家人十二畫。所以,十二的名字,叫做難忘。 後來,給你的備註是十一,愛人差一點,家人差一點,戀人差一點,朋友差一點,所以十一是遺憾,十二是愛你!', '“當初不加你好友, 就不會有後來那麼多事” ', '找一個成熟的男生 談一場成熟的戀愛吧 短信要發給能馬上回復你的人 電話要打給不猶豫馬上接起的人 說話要說給會給你反應的人 微笑留給親朋愛人 不需要熱臉貼冷屁股委屈自己 別爲他找藉口 忙算什麼 你永遠不知道等的滋味 在戀愛裏打動...', '走不通的路就回頭 愛而不得的人就放手 得不到迴應的熱情就適可而止 別把一廂情願當成滿腔孤勇 也別把厭倦當成欲擒故縱'],
    "en": ['這個世界上,從來就沒有最好的,只有最合適的。比如雲朵和天空,微風和草地,比如我眼中的你,以及,你眼中的我', '生活畫風濃烈,恰逢詩意如你', '如果你再聰明一點,就會知道我同你的徹夜長聊和插科打諢,都是拐着彎的在說愛你。別看那江水九曲迴腸,說到底,它們還不是奔向同一片汪洋。 不過糊塗些也好,畢竟很多心事晦澀隱祕,那些膽怯和斤斤計較,我也怕你知道。', '當你在深夜醒來,發現自己因想念某人而胸口發疼,你,把它叫做什麼?', '暑假過後到了新學校,我就再也見不到你了,終於可以心無旁騖的收起喜歡,收起面對你的時候那種卑微,如果三年前沒有遇見你,一年前不會那樣喜歡你,就不會老想那麼多以後以後。我想要收心了,再也不會喜歡你了,你高高在上的樣子讓我...', '“下輩子我想倒着活一回 ,第一步就是死亡 ,然後把它拋在腦後 .在敬老院睜開眼 ,一天比一天感覺好 ,直到太健康被踢出去 .開始領養老金 ,然後開始工作 .40年後 ,夠年輕了 ,和那個熟悉的人 ,從分手開始 ,越來越恩愛 ,直到第一次見面 ,相視一笑然後各自轉頭 .”', '嘿 你好哇 今天開始你的每一個笑都是因爲開心吧 每一次眼眶微紅都是因爲起風了吧 你偷偷流下的每一滴淚都會變成珍珠哦 在西伯利亞曠野的風吹起之前 蒙特利爾的楓葉一點點被染紅 北冰洋的白鯨正躍出海面 那座會發光會唱歌的瓷塔依然佇立在安徒生的童話裏這些,你要記得去看哦', '我好想咻地一下飛到你懷裏 可是那樣太醜了 我還是慢慢走到你面前 讓你仔細看看我 我再撲到你懷裏 我好想你'],
    "baiYan": ['“最甜的事情就是,他醒來後第一個找的人是我,睡覺前最後一個說話的人還是我,他的世界全都是我我我我我。”', "你盡然給我白眼!", '那天,路過煎餅果子攤,大叔照常笑着給我打招呼“兩套煎餅果子?都不放辣?” 我笑了笑,“不,一套,放辣。” 我吃了一口,真的好辣。 我都辣出淚了', '那個八面玲瓏 情商高 朋友多 陽光開朗 表現得什麼都無所謂的人真的不是我 那個在夜裏焦慮的爆炸的人是我 那個因爲一句話難過的不知所謂的人是我 那個自己嫌棄的人是我 其實我沒那麼強 只是不再習慣用臉表達 永遠笑着是我對這個世界的諷刺'],
    "everyThing":[ "十年前第一次和你說晚安,我激動的失眠了一整夜,十年後的今晚和你說晚安,不再失眠,但你的頭壓得我胳膊好酸。","我從未擁有過你一秒鐘,心裏卻失去過你千萬次。", "我在最沒有能力的年紀,碰見了最想照顧一生的人。", "你若安好  ,我備胎到老。", "不在一起就不在一起吧,反正一輩子也沒多長。", "18歲的時候可以爲了一個牽手激動地整夜睡不早覺,20歲的時候會爲了一個謊言流淚到深夜,而現在所有事情都顯得那麼無關緊要。", "我希望她三十歲沒嫁,我也不希望她三十歲沒嫁。", "一房兩人,三餐四季。", "當你老了,我也老了,平行而進,平行而盡。", "若是相互羈絆  ,不如各奔天涯。", "你別皺眉,我走就好。", "有個姑娘說,你聽的歌都太矯情,我說,你一定是愛情裏被愛的那一個。","等一個不愛自己的人,就像在機場等一艘船。", "燈泡滅了,我仔細檢查了下,鎢絲並沒有斷。我重新按下開關,  燈泡閃了兩下又滅了。我問,你怎麼了,不開心麼,燈泡回答,等會兒,有個蛾子在窗外看我好久了。我說,那不挺好,有人看得上你。燈泡說,我不是火,別讓她看錯了,誤了人一輩子。", "友情以上,戀人未滿,不甘朋友,不敢戀人。", "校服是我和她唯一穿過的情侶裝,畢業照是我和她唯一的合影。", "今天鼓起勇氣給他發了消息,我說了一長串話,他回了個嗯。","真羨慕他,這麼快就放下,哪像我這麼傻。", "她的手只有我的手四分之三那麼大,可我還是沒能抓住。", "手機上存滿了分手的歌,好像我談過戀愛似的。", "你那麼擅長安慰他人,一定度過了很多自己安慰自己的日子吧。", "確實,喜歡上一個人,第一感覺是自卑。", "高三語文老師在我一篇關於愛情的讀後感上寫下“愛過  ,就是一生一世”,後來我知道,錯過,纔是一生一世。", "你那麼善解人意,想必沒有人愛你。", "一個人久了,煮個餃子看見兩個粘在一起的也要給它分開。", "請在對不起中加兩個字使其更加悲傷—“對三,要不起”。", "好喜歡你啊可以和我在一起嗎不可以的話那我過會再來問吧  。",  "我不喜歡這世界,我只喜歡你。", "我想做一個能在你的葬禮上描述你一生的人。", "喜歡這種東西,捂住嘴巴,也會從眼睛裏跑出來。", "謝謝你陪我校服到禮服。", "“你還記得她嗎?”“早忘了,哈哈”“我還沒說是誰”。", "周杰倫把愛情比喻成龍捲風,我覺得特別貼切,因爲很多人像我,一輩子都沒見過龍捲風。", "如果有一天,我有機會碰上喜歡的男孩子,願意一起過一生的男孩子,就用這首作婚禮背景曲吧。","關於愛情,關於婚禮,我什麼都想好了,你要快點出現纔好。", "我聽過一萬首歌,看過一千部電影,讀過一百本書,卻從未俘獲一個人的心。", "你那麼孤獨,卻說一個人真好。", "多少人以朋友的名義默默地愛着。", "究竟有多喜歡纔會溫柔成這個樣子。", "祝你們幸福是假的,祝你幸福是真的。", "我喜歡我望向別處時你落在我身上的目光。",  "好懷念做早操時總是會偷看自己喜歡的人。", "不愛了  連回憶 都是負荷。","我說,我要用一生學這首歌,然後唱給她聽,問她願意陪我嗎?她說,她會陪我一起學 。","耳機裏面是喜歡但還不會唱的歌  手機屏幕上的照片是喜歡但還沒在一起的人。", "記得當年他沒說出的告白,卻成了那個年紀青澀的最美。", "“你知道深愛一個人是什麼感覺嗎”“就像房間裏黑了你不是先去找燈,而是先去找他。", "有時候聽歌被感動不是因爲旋律有多棒,歌詞有多好,而是因爲想起了以前聽這首歌時你做的事,你和誰聽了這首歌。", "體育課上帶你去小賣店買糖吃,你高興的馬尾蹦噠了一路。", "如果有一天你表白成功了  絕不是因爲你感動了我 而是我篤定我可以愛你更多。", "餘生好長,你好難忘。", "任他們多漂亮,未及你矜貴。", "初戀的味道,一人一隻耳機,倚在樹下,兩手慢慢靠近…… 。",  "多數人25歲就死了,但直到75歲才埋。", "今天去看了大聖歸來。我旁邊有個小孩兒問他媽媽 “這個不是動畫片麼?爲什麼有這麼多大人來看?” 他媽媽回答:  “因爲他們一直在等大聖歸來啊,等啊等啊,就長大了。",  "要麼榮歸故里,要麼客死他鄉。", "小時候想要快快長大,真正長大以後纔會懂得還是小時候最開心,可惜一旦錯過了就永遠都回不去了。", "你說少年明媚如昨,怎知年少時光如夢。", "一人北漂快兩年,成爲了我最不想成爲的人模狗樣,想想租過的地下室,洗了雙襪子,4天沒幹,而我無奈的笑了笑之後給穿上了。", "曾聽一個長者對我說,你看男人在外辛苦打拼,其實回家所求無多,只不過想下班回家有口熱飯吃,有口熱湯喝,有人在家等你,你累時有句寬慰的話。","所謂的高官厚祿、錦衣玉食、寶馬貂裘都比不上這個。","我深以爲然。,你那麼孤獨,卻說一個人真好。", "光陰似箭催人老,日月如移越少年。", "煢煢白兔,東走西顧,衣不如新,人不如故。", "年齡越來越大,朋友越來越多,兄弟越來越少。", "從小我就有一個夢想:戴着墨鏡,開着蘭博基尼,衣錦還鄉。經過三十年的努力,我,終於實現了夢想的一半:擁有了墨鏡。", "人生的出場順序太重要了。", "年輕時我想變成任何人,除了我自己。", "理想就是離鄉。", "世界如此廣闊,人類卻走進了悲傷的牆角。", "當你覺得孤獨無助時,想一想還有十幾億的細胞只爲你一個人而活。", "哭着吃過飯的人,是能夠走下去的。", "十年前你說生如夏花般絢爛,十年後你說平凡才是唯一的答案。", "最怕一生碌碌無爲,還說平凡難能可貴。", "別人剛一注意你,你就敞開心扉,你覺得這是坦率,其實這是孤獨。","小時候刮獎刮出“謝”字還不扔,非要把“謝謝惠顧”都刮的乾乾淨淨才捨得放手,和後來太多的事一模一樣。", "現在純種的殺馬特越來越少了,一定要頑強的活下去啊!不要讓白髮人送赤橙黃綠青藍紫發人啊。", "哭着吃過飯的人,是能夠走下去的。", "每個人的裂痕,最後都會變成故事的花紋。", "喜歡一個人孤獨的時刻  但不能喜歡太多。", "有多少人戴着耳機聽着自己情有獨鍾的音樂,孤獨的在擁擠的公交車上日日夜夜在不是自己的城市裏孤獨的生活着。", "等我嗨死後把我的骨灰撒到海里,不是怕有人在墳頭蹦迪,也不爲大海更寬廣,只是爲了我死了也能浪起來。", "成功的速度一定要快過父母老去的速度。", "馬上就要結束一年的單身生活,開始新一年的單身生活啦。",  "06年本科畢業,中午會餐,和人喝了一瓶白酒,而後稀裏糊塗睡了過去,一覺醒來,發現室友已走了大半,牀頭的手機響個不停,接通之後好兄弟邊哭邊罵“老子都上火車了,老子再也看不到你了”霎時,淚如雨下,也許因爲酒太多,鼻血也流個不停,平生第一次,感覺到心揪着痛,那種滋味一輩子也忘不了。", "畢業前的一個晚上,我們宿舍的6個人默默喝了20多瓶啤酒。,第二天起牀,誰也沒叫誰,誰先起來先靜靜離開,我閉着眼聽着他們5個人全部走了,默默起牀收拾衛生,打掃最後一次宿舍,下樓梯交鑰匙給阿姨的時候流眼淚了。", "那時候沒有手機沒有網絡,只能通過書信來往,纔會有這樣依依不捨,現在的人很難感受到那種離別後再無音訊的難捨了。", "最後的一節語文課,老師聽寫,聽寫的是全班人的名字。", "每當坐火車回家的時候我都會聽這首曲子,看着窗外一閃而過卻又綿綿不絕的田野,說不出的酸甜苦辣,講不出的思鄉之情。", "昨天上班時間,我裝着西服站在二樓窗前看着路上來來往往的人們,覺得城市裏天空太窄,忽然想回家種地,可是離我退休年齡還很遙遠,我的影子說想殺死我,然後替代我好好生活。", "女兒出嫁時父親對她說:“女兒,一定要尊重你的丈夫,你甚至可以崇拜他,但是要記住,你們之間矛盾和不高興的事情不要跟我講,因爲你終會原諒他,而我不會”。", "小時候,暑假都要去農村外婆家,外婆揹着我踏過麥田坎兒去一口淺井打水洗衣服,井裏好多小蝦,20多年過去了,她80歲了,得了抑鬱症和老年癡呆,再也背不動我了,還好,我能背得動她。", "1歲孩子把屎尿拉褲子裏往往被原諒,而80歲老人則會被責備,1歲的孩子不愁沒人餵養,80歲的老人卻擔心沒人贍養,孩子怎樣成長,老人就怎樣退化,他們沒有“癡呆”,只是迴歸孩子的狀態,當他們忘記往事,忘記如何吃飯,忘記如何說話,請耐心對待,這就是生命的輪迴。", "“媽,你爲什麼那麼愛笑啊?”  “因爲媽生了你啊” 。","爸爸媽媽問你智能手機怎麼用的時候,請不要不耐煩,因爲他們曾經不厭其煩的教你怎麼用筷子。",  "我離天空最近的一次,是你把我高高地舉過了你的肩頭。", "我已經過了餐桌上有隻雞就一定能吃到雞腿的年紀了。", "想對早起的室友說,醜八怪啊啊啊,能否別把燈打開。", "那年上初中,夏天是好漫長的,西瓜是吃不完的,作業是最後兩天才趕的。", "小時候總是騙爸媽自己沒錢了,現在騙他們自己還有錢。"]

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章