您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用Python開發QQ機器人”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Python開發QQ機器人”吧!
雖然該文最終是達到以python開發mirai機器人的目的,但起步教程,尤其是環境配置上仍然有大量的相同操作,對其他編程語言仍有借鑒之處
假設你已經安裝好了 Java、Python等運行必須的環境
mirai官方生態文檔[1]
要使用mirai開發QQ機器人,首先要對其生態有一定的了解,因為它太復雜了,坑特別多,所以多了解一點,遇到問題之后解決起來也會更快
mirai生態匯總圖
簡單來說,mirai生態的核心是Mirai框架,其中包含了mirai-core及mirai-core-api兩部分。
其中,前者負責協議相關的內容,而后者負責對外提供操作前者的接口。因此與程序員直接打交道的是mirai-core-api,而mirai-core,對我們是不可見的。
使用mirai-core-api就已經可以開發QQ機器人了,但對萌新來說難度還是太大,于是mirai官方開發組編寫了一個QQ機器人程序,mirai-console,它在 mirai 框架提供的基礎功能的基礎上進行了封裝并進一步提供了更方便的開放接口。
有了mirai-console,我們就不用直接去開發mirai的QQ機器人了,而是去開發mirai-console的插件,如下面的模式:
尷尬的是,開發mirai-console的插件,又需要使用java或者kotlin。如果你跟我一樣,對他們都不熟悉,那么官方的另一個插件mirai-api-http,則可以解決這個問題。
于是借助mirai-api-http開發QQ機器人,就成了下面這種模式:
可以看到,當我們使用了mirai-api-http后,我們就有了更多的開發語言選擇。此處我選擇python。
根據上面的介紹,要開發一個mirai的QQ機器人,我們首先需要將mirai-console給運行起來,而要做到這一步,可難。例如你需要準備mirai-core,mirai-console 和 mirai-console-terminal,然后還需要通過一大串指令來啟動它。
而官方顯然考慮到這一點,為了挽回被這一高難度操作勸退的萌新,官方又推出了mirai-console-loader(簡稱mcl) —— mirai-console 的官方一鍵啟動器。因此你僅需要下載它即可(第一步說的都不用管0.0)。github倉庫位置:mirai-console-loader[2]
下載完成mcl之后,解壓、打開cmd、切換到mcl所在目錄、運行mcl。如下圖:
不出意外的話,mirai-console就成功啟動了,如下圖:
然而,咱從官方下載的項目,運行時卻出錯了0.0 ( 如果你沒有出錯,忽略此步驟 )。原因是配置文件出錯 (太倒霉了 - -)。修改方式如圖:
然后再重新運行一下,mcl,不出意料的話,能成功運行。
第一個大坎就邁過了…接下來是另一個大坎
在成功啟動的mcl窗口,運行命令登錄qq:login 賬號 密碼
應該是會出錯的,因為mirai-console在登錄時,不能處理滑塊驗證:
于是我們需要mirai的另一個項目 mirai-login-solver-selenium[3] 來輔助登錄
mirai-login-solver-selenium安裝步驟 (需要先安裝 Chrome 瀏覽器)
先結束掉之前運行的 mirai-console, 然后在命令行運行如下命令,添加該包
mcl --update-package net.mamoe:mirai-login-solver-selenium --channel nightly --type plugin
然后再重新運行mcl,這樣mcl就會去嘗試下載mirai-login-solver-selenium。
然而,我這一步也出現問題了(如果你沒有問題,也請跳過)。因為它用到了selenium,所以就要用chromedriver。但是chromedriver總是下載失敗,所以這一步需要手動下載chromedriver,然后替換到對應目錄。步驟如下:
1. 查看cmd窗口,找到mcl正在下載的chromedriver是什么版本
2. 然后去chromedriver的另一個鏡像源下載,推薦:chromedriver[4]
3. 找到一個版本號相近的即可,例如我就下載 86.0.4240.22
4. 將下載好的文件解壓,再重命名成chromedriver-86.0.4240.198.exe,也就是剛剛我們在命令行窗口查看的文件名,一定要跟它想下載的文件名一致
5. 結束之前運行的mcl命令行程序,然后將準備好的chromedriver-86.0.4240.198.exe, 替換到以下目錄
6. 重新運行mcl程序,如果一切順利,就可以繼續之前的步驟,輸入命令:login 賬號 密碼 嘗試登錄。接下來會彈出一個瀏覽器窗口,你只需要傻瓜式的完成登錄驗證即可。如果登錄成功,以后的每次登錄,應該都是不需要再次驗證的。
又跨過一個坎…接下來就到了另外一個坎
前面一直在說 mirai-api-http,但是到目前為止,我們都還沒有用上它。前面的工作就做了兩個事情
1. 使用mcl運行mirai-console
2. 使用 mirai-login-solver-selenium 輔助通過滑塊驗證碼,完成登錄
那么接下來就開始用mirai-api-http,首先在mirai-api-http項目地址,下載mirai-api-http[5]
然后將下載到的jar包,放在plugin文件夾下,如圖
然后再重啟mcl,重新進行登錄。這樣準備工作就完成了,但是我出現了一些錯誤,看意思應該是簽名驗證的問題,錯誤如下:
四處咨詢后了解到,是oracle JDK的問題,因此只需要將orcaleJDK 替換成為 open JDK即可,步驟如下:
1. 下載 open JDK[6],例如我下載如圖所示的版本:
2. 解壓open JDK, 并放在你認為合適的位置,例如我放在如下圖所示的位置:
3. 添加 jdk 所在路徑到環境變量:此電腦 ->右鍵屬性 -> 高級系統設置 -> 高級 -> 環境變量, 再按下圖操作
前面的操作,直到該步為止,基本對所有使用除java/kotlin語言的程序員,都是通用的。而后面的操作,僅寫給使用python的程序員
graia-application-mirai官方文檔[7]
首先對mirai-api-http進行配置,如圖:
以下是參考,自己看著配就行
# file: mcl-1.0.3/config/net.mamoe.mirai.api.http/setting.yml authKey: graia-mirai-api-http-authkey # 你可以自己設定, 這里作為示范 # 可選,緩存大小,默認4096.緩存過小會導致引用回復與撤回消息失敗 cacheSize: 4096 enableWebsocket: true # 是否啟用 websocket 方式, 若使用 websocket 方式交互會得到更好的性能 host: '0.0.0.0' # httpapi 服務監聽的地址, 錯誤的設置會造成 Graia Application 無法與其交互 port: 8080 # httpapi 服務監聽的端口, 錯誤的設置會造成 Graia Application 無法與其交互
重啟mcl, 更新配置
接著,安裝 python 操作 mirai-api-http 接口的模塊:graia-application-mirai
pip install graia-application-mirai
將以下代碼復制到bot.py,按注釋提示,再結合剛剛對mirai-api-http的配置,稍作修改。然后運行
from graia.broadcast import Broadcast from graia.application import GraiaMiraiApplication, Session from graia.application.message.chain import MessageChain import asyncio from graia.application.message.elements.internal import Plain from graia.application.friend import Friend loop = asyncio.get_event_loop() bcc = Broadcast(looploop=loop) app = GraiaMiraiApplication( broadcast=bcc, connect_info=Session( host="http://localhost:8080", # 填入 httpapi 服務運行的地址 authKey="graia-mirai-api-http-authkey", # 填入 authKey account=5234120587, # 你的機器人的 qq 號 websocket=True # Graia 已經可以根據所配置的消息接收的方式來保證消息接收部分的正常運作. ) ) @bcc.receiver("FriendMessage") async def friend_message_listener(app: GraiaMiraiApplication, friend: Friend): await app.sendFriendMessage(friend, MessageChain.create([ Plain("Hello, World!") ])) app.launch_blocking()
然后向你的QQ機器人,隨便發送一條消息,如果它回復你Hello, World!,則表示運行成功
成功所示如下:
上面的全部操作,不過是使用mirai進行開發QQ機器人的起步教程而已,需要了解更多,還是去閱讀官方文檔,以學習更多的api。
感謝各位的閱讀,以上就是“怎么用Python開發QQ機器人”的內容了,經過本文的學習后,相信大家對怎么用Python開發QQ機器人這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。