電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>PyQQbot Python實(shí)現(xiàn)的QQ機(jī)器人

PyQQbot Python實(shí)現(xiàn)的QQ機(jī)器人

2022-05-27 | zip | 0.30 MB | 次下載 | 2積分

資料介紹

授權(quán)協(xié)議 MIT
開發(fā)語言 Python
操作系統(tǒng) 跨平臺(tái)
軟件類型 開源軟件

軟件簡(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 多行(不包括注釋)。程序采用單線程的方式運(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 來實(shí)現(xiàn):
* 監(jiān)控、收集 QQ 消息
* 自動(dòng)消息推送
* 聊天機(jī)器人
* 通過 QQ 遠(yuǎn)程控制電腦、智能家電

二、安裝方法
在 Python 2.7 下使用,用 pip 安裝,安裝命令:

$?pip?install?qqbot

也可以直接下載 [qqbot.py][code] 運(yùn)行,但需先安裝 [requests](https://pypi.python.org/pypi/requests) 庫。

三、使用方法
##### 1. 啟動(dòng) QQBot
在命令行輸入: **qqbot** ,或直接運(yùn)行 [qqbot.py][code] : **python qqbot.py** 。啟動(dòng)過程中會(huì)自動(dòng)彈出二維碼圖片(Linux下需安裝有 gvfs ,否則需要手動(dòng)打開圖片),需要用手機(jī) QQ 客戶端掃碼并授權(quán)登錄。啟動(dòng)成功后,會(huì)將本次登錄信息保存到本地文件中,下次啟動(dòng)時(shí),可以輸入: **qqbot qq號(hào)碼**,或:**python qqbot.py qq號(hào)碼** ,先嘗試從本地文件中恢復(fù)登錄信息(不需要手動(dòng)掃碼),只有恢復(fù)不成功或登錄信息已過期時(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** 類并重新實(shí)現(xiàn)此類中的消息響應(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 類中的主要方法、屬性
#### 1. 構(gòu)造方法、登錄方法、主要屬性

????>>>?bot?=?QQBot()
????>>>?bot.Login()
????...

構(gòu)造方法生成一個(gè) QQBot 實(shí)例,其實(shí)沒做任何工作。全部的登錄、獲取 好友/群/討論組 列表的工作在 **Login** 方法中完成。Login 方法會(huì)檢查命令行參數(shù) sys.argv 中是否提供了 qq 號(hào)碼。若沒有提供 qq 號(hào)碼,則需要手動(dòng)掃碼登錄。登錄后會(huì)將登錄信息保存在本地。若提供了 qq 號(hào)碼,則會(huì)先嘗試從本地恢復(fù)會(huì)話信息(不需要手動(dòng)掃碼),只有恢復(fù)不成功或登錄信息已過期時(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ù)器查詢消息,如果有未讀消息則會(huì)立即返回,返回值為一個(gè)四元 tuple :
? ? (msgType, from_uin, buddy_uin, message)
其中 **msgType** 可以為 **'buddy'** 、 **'group'** 或 **'discuss'**,分別表示這是一個(gè) **好友消息** 、**群消息** 或 **討論組消息** ; **from_uin** 和 **buddy_uin** 代表消息發(fā)送者的 **uin** ,可以通過 uin 向發(fā)送者回復(fù)消息,如果這是一個(gè)好友消息,則 from_uin 和 buddy_uin 相同,均為好友的 uin ,如果是群消息或討論組消息,則 from_uin 為該群或討論組的 uin , buddy_uin 為消息發(fā)送人的 uin ; **message** 為消息內(nèi)容,是一個(gè) **utf8** 編碼的 string 。
如果沒有未讀消息,則 **poll** 方法會(huì)一直等待兩分鐘,若期間沒有其他人發(fā)消息過來,則返回一個(gè)只含空值的四元 tuple :
? ? ('', 0, 0, '')
**send** 方法的三個(gè)參數(shù)為 **msgType** 、 **to_uin** 和 **message** ,分別代表 **消息類型** 、**接收者的 uin** 以及 **消息內(nèi)容** ,消息內(nèi)容必須是一個(gè) **utf8** 編碼的 string 。
如果發(fā)送消息的頻率過快, 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ì)在開頭附加一個(gè)隨機(jī)數(shù)字。
這里需要注意的是,當(dāng) poll 方法因等待消息而阻塞時(shí),不要試圖在另一個(gè)線程中調(diào)用 send 方法發(fā)送消息,也不要試圖用多線程的方式同時(shí)調(diào)用 send 方法,否則可能引起一些無法預(yù)料的錯(cuò)誤。
#### 3. 無限消息輪詢

????>>>?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ā)揮,重寫此方法,實(shí)現(xiàn)更智能的機(jī)器人。

六、參考資料
QQBot 參考了以下開源項(xiàng)目:

- [ScienJus/qqbot](https://github.com/ScienJus/qqbothttps://github.com/pandolia/qqbot/) (ruby)
- [floatinghotpot/qqbot](https://github.com/floatinghotpot/qqbot) (node.js

在此感謝以上兩位作者的無私分享,特別是感謝 ScienJus 對(duì) SmartQQ 協(xié)議所做出的深入細(xì)致的分析。

### 七、反饋

有任何問題或建議可以發(fā)郵件給我,郵箱: 。

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)