資料介紹
軟件簡(jiǎn)介
一、介紹
QQBot 是一個(gè)用 python 實(shí)現(xiàn)的、基于騰訊 SmartQQ 協(xié)議的簡(jiǎn)單 QQ 機(jī)器人,可運(yùn)行在 Linux 和 Windows 平臺(tái)下,所有代碼均集成在一個(gè) [qqbot.py][code] 文件中,代碼量?jī)H 400 多行(不包括注釋?zhuān)?。程序采用單線程的方式運(yùn)行,且盡可能的減少了網(wǎng)絡(luò)和登錄錯(cuò)誤(特別是所謂的 103 error )發(fā)生的概率。
[code]: https://raw.githubusercontent.com/pandolia/qqbot/master/qqbot.py
本項(xiàng)目 github 地址: https://github.com/pandolia/qqbot/
你可以用 QQBot 來(lái)實(shí)現(xiàn):
* 監(jiān)控、收集 QQ 消息
* 自動(dòng)消息推送
* 聊天機(jī)器人
* 通過(guò) QQ 遠(yuǎn)程控制電腦、智能家電
二、安裝方法
在 Python 2.7 下使用,用 pip 安裝,安裝命令:
$?pip?install?qqbot
也可以直接下載 [qqbot.py][code] 運(yùn)行,但需先安裝 [requests](https://pypi.python.org/pypi/requests) 庫(kù)。
三、使用方法
##### 1. 啟動(dòng) QQBot
在命令行輸入: **qqbot** ,或直接運(yùn)行 [qqbot.py][code] : **python qqbot.py** 。啟動(dòng)過(guò)程中會(huì)自動(dòng)彈出二維碼圖片(Linux下需安裝有 gvfs ,否則需要手動(dòng)打開(kāi)圖片),需要用手機(jī) QQ 客戶(hù)端掃碼并授權(quán)登錄。啟動(dòng)成功后,會(huì)將本次登錄信息保存到本地文件中,下次啟動(dòng)時(shí),可以輸入: **qqbot qq號(hào)碼**,或:**python qqbot.py qq號(hào)碼** ,先嘗試從本地文件中恢復(fù)登錄信息(不需要手動(dòng)掃碼),只有恢復(fù)不成功或登錄信息已過(guò)期時(shí)才會(huì)需要手動(dòng)掃碼登錄。
##### 2. 操作 QQBot
QQ 機(jī)器人啟動(dòng)后,用另外一個(gè) QQ 向本 QQ 發(fā)送消息即可操作 QQBot 。目前提供以下命令:
? ? 1) 幫助:
? ? ? ? -help
? ? 2) 列出 好友/群/討論組:
? ? ? ? -list buddy/group/discuss
? ? 3) 向 好友/群/討論組 發(fā)送消息:
? ? ? ? -send buddy/group/discuss uin message
? ? ? ? 其中 uin 是臨時(shí) qq 號(hào),利用 -list 命令查看好友等的臨時(shí) qq 號(hào)。? ?
? ? 4) 停止 QQBot :
? ? ? ? -stop
四、實(shí)現(xiàn)你自己的 QQ 機(jī)器人
實(shí)現(xiàn)自己的 QQ 機(jī)器人非常簡(jiǎn)單,只需要繼承 [qqbot.py][code] 中提供的 **QQBot** 類(lèi)并重新實(shí)現(xiàn)此類(lèi)中的消息響應(yīng)方法 **onPullComplete** 方法。示例代碼:
????from?qqbot?import?QQBot???? ????class?MyQQBot(QQBot): ????????def?onPollComplete(self,?msgType,?from_uin,?buddy_uin,?message): ????????????if?message?==?'-hello': ????????????????self.send(msgType,?from_uin,?'你好,我是QQ機(jī)器人') ????????????elif?message?==?'-stop': ????????????????self.stopped?=?True ????????????????self.send(msgType,?from_uin,?'QQ機(jī)器人已關(guān)閉') ???? ????myqqbot?=?MyQQBot() ????myqqbot.Login() ????myqqbot.PollForever()
以上代碼運(yùn)行后,用另外一個(gè) QQ 向本 QQ 發(fā)送消息 **“-hello”**,則會(huì)自動(dòng)回復(fù) **“你好,我是 QQ 機(jī)器人”**,發(fā)送消息 **“-stop”** 則會(huì)關(guān)閉 QQ 機(jī)器人。
五、 QQBot 類(lèi)中的主要方法、屬性
#### 1. 構(gòu)造方法、登錄方法、主要屬性
????>>>?bot?=?QQBot() ????>>>?bot.Login() ????...
構(gòu)造方法生成一個(gè) QQBot 實(shí)例,其實(shí)沒(méi)做任何工作。全部的登錄、獲取 好友/群/討論組 列表的工作在 **Login** 方法中完成。Login 方法會(huì)檢查命令行參數(shù) sys.argv 中是否提供了 qq 號(hào)碼。若沒(méi)有提供 qq 號(hào)碼,則需要手動(dòng)掃碼登錄。登錄后會(huì)將登錄信息保存在本地。若提供了 qq 號(hào)碼,則會(huì)先嘗試從本地恢復(fù)會(huì)話信息(不需要手動(dòng)掃碼),只有恢復(fù)不成功或登錄信息已過(guò)期時(shí)才會(huì)需要手動(dòng)掃碼登錄。
QQBot 登錄完成后,可以進(jìn)行消息收發(fā)了,且 好友/群/討論組 的列表保存在 **buddy, buddyStr, group, groupStr, discuss, discussStr** 屬性當(dāng)中。
????>>>?bot.buddy ????((1880557506,?'Jack'),?(2776164208,?'Mike'),?...,?(2536444957,?'Kebi')) ????>>>?print?bot.buddyStr
? ? 好友列表:
? ? ? ? 0, Jack (2348993434)
? ? ? ? 1, Mike (348093248)
? ? ? ? ...
#### 2. 消息收發(fā)
????>>>?bot.poll() ????('buddy',?207353438,?207353438,?'hello') ????>>>?bot.poll() ????('',?0,?0,?'') ????>>>?bot.send('buddy',?45789321,?'hello')
向buddy45789321發(fā)送消息成功
**poll** 方法向 QQ 服務(wù)器查詢(xún)消息,如果有未讀消息則會(huì)立即返回,返回值為一個(gè)四元 tuple :
? ? (msgType, from_uin, buddy_uin, message)
其中 **msgType** 可以為 **'buddy'** 、 **'group'** 或 **'discuss'**,分別表示這是一個(gè) **好友消息** 、**群消息** 或 **討論組消息** ; **from_uin** 和 **buddy_uin** 代表消息發(fā)送者的 **uin** ,可以通過(guò) uin 向發(fā)送者回復(fù)消息,如果這是一個(gè)好友消息,則 from_uin 和 buddy_uin 相同,均為好友的 uin ,如果是群消息或討論組消息,則 from_uin 為該群或討論組的 uin , buddy_uin 為消息發(fā)送人的 uin ; **message** 為消息內(nèi)容,是一個(gè) **utf8** 編碼的 string 。
如果沒(méi)有未讀消息,則 **poll** 方法會(huì)一直等待兩分鐘,若期間沒(méi)有其他人發(fā)消息過(guò)來(lái),則返回一個(gè)只含空值的四元 tuple :
? ? ('', 0, 0, '')
**send** 方法的三個(gè)參數(shù)為 **msgType** 、 **to_uin** 和 **message** ,分別代表 **消息類(lèi)型** 、**接收者的 uin** 以及 **消息內(nèi)容** ,消息內(nèi)容必須是一個(gè) **utf8** 編碼的 string 。
如果發(fā)送消息的頻率過(guò)快, qq 號(hào)碼可能會(huì)被鎖定甚至封號(hào)。因此每發(fā)送一條消息,會(huì)強(qiáng)制 sleep 3 秒鐘,每發(fā)送 10 條消息,會(huì)強(qiáng)制 sleep 30 秒鐘。同一條消息重復(fù)發(fā)送多次也可能被鎖號(hào)或封號(hào),因此每條消息發(fā)送之前都會(huì)在開(kāi)頭附加一個(gè)隨機(jī)數(shù)字。
這里需要注意的是,當(dāng) poll 方法因等待消息而阻塞時(shí),不要試圖在另一個(gè)線程中調(diào)用 send 方法發(fā)送消息,也不要試圖用多線程的方式同時(shí)調(diào)用 send 方法,否則可能引起一些無(wú)法預(yù)料的錯(cuò)誤。
#### 3. 無(wú)限消息輪詢(xún)
????>>>?bot.PullForever()
**PullForever** 方法會(huì)不停的調(diào)用 poll 方法,并將 poll 方法的返回值傳遞給 **onPullComplete** 方法,直到 stopped 屬性變?yōu)?True 。如下:
????def?PollForever(self): ????????self.stopped?=?False ????????while?not?self.stopped: ????????????pullResult?=?self.poll() ????????????self.onPollComplete(*pullResult)
onPollComplete 方法是 QQ 機(jī)器人的靈魂。你可以自由發(fā)揮,重寫(xiě)此方法,實(shí)現(xiàn)更智能的機(jī)器人。
六、參考資料
QQBot 參考了以下開(kāi)源項(xiàng)目:
- [ScienJus/qqbot](https://github.com/ScienJus/qqbothttps://github.com/pandolia/qqbot/) (ruby)
- [floatinghotpot/qqbot](https://github.com/floatinghotpot/qqbot) (node.js)
在此感謝以上兩位作者的無(wú)私分享,特別是感謝 ScienJus 對(duì) SmartQQ 協(xié)議所做出的深入細(xì)致的分析。
### 七、反饋
有任何問(wèn)題或建議可以發(fā)郵件給我,郵箱:
- qq群聊機(jī)器人如何接入ChatGPT
- 瞳步迎賓講解機(jī)器人
- 了解機(jī)器人電子教材下載 19次下載
- 基于深度學(xué)習(xí)的機(jī)器人示教系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 77次下載
- 機(jī)器人無(wú)線充電電路設(shè)計(jì) 47次下載
- 基于Matlab的機(jī)構(gòu)與機(jī)器人分析資料下載 11次下載
- 基于DSP和PC的農(nóng)業(yè)機(jī)器人控制系統(tǒng) 17次下載
- 基于DSP的排險(xiǎn)機(jī)器人車(chē)體控制系統(tǒng) 14次下載
- 基于DSP芯片的足球機(jī)器人實(shí)現(xiàn)與設(shè)計(jì) 26次下載
- 機(jī)器人PID控制概述 27次下載
- 如何使用Matlab和VR技術(shù)實(shí)現(xiàn)移動(dòng)機(jī)器人的建模和仿真 13次下載
- 如何實(shí)現(xiàn)雙足機(jī)器人的步態(tài)規(guī)劃與仿真研究 15次下載
- 如何使用Python實(shí)現(xiàn)QQ號(hào)碼測(cè)吉兇API調(diào)用代碼實(shí)例免費(fèi)下載 12次下載
- 使用Matlab和VR技術(shù)實(shí)現(xiàn)移動(dòng)機(jī)器人的建模及仿真的方案說(shuō)明 10次下載
- 基于Scratch和ROS的教育機(jī)器人編程與實(shí)現(xiàn) 10次下載
- 機(jī)器人技術(shù)中常用的路徑規(guī)劃算法的開(kāi)源庫(kù) 839次閱讀
- MOTOMAN機(jī)器人實(shí)現(xiàn)對(duì)產(chǎn)品的精確控制設(shè)計(jì) 2160次閱讀
- 面對(duì)疫情 醫(yī)療機(jī)器人能幫上什么忙? 2126次閱讀
- 工業(yè)機(jī)器人編程入門(mén)_工業(yè)機(jī)器人的編程要求 9570次閱讀
- 醫(yī)用機(jī)器人的定義_醫(yī)用機(jī)器人發(fā)展 3122次閱讀
- 醫(yī)用機(jī)器人的功能_醫(yī)用機(jī)器人分類(lèi) 2227次閱讀
- 機(jī)器人控制器有哪些類(lèi)型_機(jī)器人控制器發(fā)展 1.1w次閱讀
- 協(xié)作機(jī)器人的起源_為什么需要協(xié)作機(jī)器人 8127次閱讀
- 手把手教你用Python創(chuàng)建微信機(jī)器人 3476次閱讀
- 機(jī)器視覺(jué)的機(jī)器人取代四臺(tái)傳統(tǒng)的火焰處理機(jī)器人 3270次閱讀
- 如何區(qū)分機(jī)器人、協(xié)作機(jī)器人和移動(dòng)機(jī)器人? 6828次閱讀
- 軟體機(jī)器人 前所未見(jiàn)的機(jī)器人 3692次閱讀
- 機(jī)器人離線編程與機(jī)器人編程趨勢(shì) 6064次閱讀
- 機(jī)器人的最佳編程語(yǔ)言是什么?機(jī)器人十大流行編程語(yǔ)言匯總 3.4w次閱讀
- Python+樹(shù)莓派實(shí)現(xiàn)的微信拍攝機(jī)器人 1w次閱讀
下載排行
本周
- 1Keysight B1500A 半導(dǎo)體器件分析儀用戶(hù)手冊(cè)、說(shuō)明書(shū) (中文)
- 19.00 MB | 4次下載 | 免費(fèi)
- 2使用TL431設(shè)計(jì)電源
- 0.67 MB | 2次下載 | 免費(fèi)
- 3BT134雙向可控硅手冊(cè)
- 1.74 MB | 2次下載 | 1 積分
- 4一種新型高效率的服務(wù)器電源系統(tǒng)
- 0.85 MB | 1次下載 | 1 積分
- 5LabVIEW環(huán)形控件
- 0.01 MB | 1次下載 | 1 積分
- 6PR735,使用UCC28060的600W交錯(cuò)式PFC轉(zhuǎn)換器
- 540.03KB | 1次下載 | 免費(fèi)
- 751單片機(jī)核心板原理圖
- 0.12 MB | 1次下載 | 5 積分
- 8BP2879DB支持調(diào)光調(diào)滅的非隔離低 PF LED 驅(qū)動(dòng)器
- 1.44 MB | 1次下載 | 免費(fèi)
本月
- 1開(kāi)關(guān)電源設(shè)計(jì)原理手冊(cè)
- 1.83 MB | 54次下載 | 免費(fèi)
- 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊(cè)
- 8.45 MB | 23次下載 | 免費(fèi)
- 3DMT0660數(shù)字萬(wàn)用表產(chǎn)品說(shuō)明書(shū)
- 0.70 MB | 13次下載 | 免費(fèi)
- 4UC3842/3/4/5電源管理芯片中文手冊(cè)
- 1.75 MB | 12次下載 | 免費(fèi)
- 5ST7789V2單芯片控制器/驅(qū)動(dòng)器英文手冊(cè)
- 3.07 MB | 11次下載 | 1 積分
- 6TPS54202H降壓轉(zhuǎn)換器評(píng)估模塊用戶(hù)指南
- 1.02MB | 8次下載 | 免費(fèi)
- 7STM32F101x8/STM32F101xB手冊(cè)
- 1.69 MB | 8次下載 | 1 積分
- 8基于MSP430FR6043的超聲波氣體流量計(jì)快速入門(mén)指南
- 2.26MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評(píng)論
查看更多