參考:開發 mirai QQ機器人起步教程_嘆之-CSDN部落格_mirai python
本篇文章參考了以上部落格,並對其中的失效內容和版本匹配問題進行了補充修改,實測能夠成功執行。部分步驟的執行截圖見該部落格,請互相參照閱讀。
0. 配置jdk,版本必須為OpenJDK>=11
OracleJDK未經測試,不保證能正常執行
1. 下載mirai-console-loader(mcl),版本必須為1.2.2
iTXTech/mirai-console-loader: 模組化、輕量級且支援完全自定義的 mirai 載入器。 (github.com)
mcl命令使用方法見下文件:mirai-console-loader/README.md at master · iTXTech/mirai-console-loader (github.com)
2. 新增mirai-api-http(mah)外掛,版本必須為1.12.0
project-mirai/mirai-api-http at 9628ab1767f088822f713c166eb127840a69de81 (github.com)
cd ./mcl-1.2.2
sh ./mcl --update-package net.mamoe:mirai-api-http --channel stable --type plugin --version 1.12.0
sh ./mcl --dry-run
如果自動下載出現corrupt報錯,可以手動下載mirai-api-http-v1.12.0.mirai.jar,並將其放入mcl-1.2.2/plugins
資料夾中
3. 禁用mcl的updater指令碼,防止自動升級
sh ./mcl --disable-script updater
4. 檢查版本對應
此時,注意檢查mcl-1.2.2/config.json
檔案內容應和以下相同,需要特別注意:mirai-console、mirai-console-terminal、mirai-core-all的版本為2.7.*,mirai-api-http的版本為1.12.0,"disabled_scripts": ["updater"]
!!
{
"js_optimization_level": -1,
"mirai_repo": "https://gitee.com/peratx/mirai-repo/raw/master",
"maven_repo": [
"https://maven.aliyun.com/repository/public"
],
"packages": [
{
"id": "org.bouncycastle:bcprov-jdk15on",
"channel": "stable",
"version": "1.64",
"type": "libs",
"versionLocked": false
},
{
"id": "org.itxtech:mcl-addon",
"channel": "c122",
"version": "1.2.2",
"type": "plugins",
"versionLocked": false
},
{
"id": "net.mamoe:mirai-console",
"channel": "stable",
"version": "2.7.0",
"type": "libs",
"versionLocked": false
},
{
"id": "net.mamoe:mirai-console-terminal",
"channel": "stable",
"version": "2.7.0",
"type": "libs",
"versionLocked": false
},
{
"id": "net.mamoe:mirai-core-all",
"channel": "stable",
"version": "2.7.0",
"type": "libs",
"versionLocked": false
},
{
"id": "net.mamoe:mirai-api-http",
"channel": "stable",
"version": "1.12.0",
"type": "plugins",
"versionLocked": false
}
],
"disabled_scripts": [
"updater"
],
"proxy": "",
"log_level": 1,
"script_props": {}
}
檢查mcl-1.2.2/libs
和mcl-1.2.2/plugins
中的jar包存在且與上述檔案中的版本匹配!!
參考:mirai更新到2.7M1後mirai-api-http外掛無法使用 | MiraiForum (mamoe.net)
5. 配置mah,必須按照1.x的文件進行配置
project-mirai/mirai-api-http at 9628ab1767f088822f713c166eb127840a69de81 (github.com)
修改mcl-1.2.2/config/net.mamoe.mirai-api-http/setting.yml
檔案,可直接複製以下配置
## 該配置為全域性配置,對所有Session有效
# 可選,預設值為0.0.0.0
host: '0.0.0.0'
# 可選,預設值為8080
port: 8080
# 可選,預設由外掛第一次啟動時隨機生成,建議手動指定
authKey: 1234567890
# 可選,快取大小,預設4096.快取過小會導致引用回覆與撤回訊息失敗
cacheSize: 4096
# 可選,是否開啟websocket,預設關閉,建議通過Session範圍的配置設定
enableWebsocket: true
# 可選,配置CORS跨域,預設為*,即允許所有域名
cors:
- '*'
## 訊息上報
report:
# 功能總開關
enable: false
# 群訊息上報
groupMessage:
report: false
# 好友訊息上報
friendMessage:
report: false
# 臨時訊息上報
tempMessage:
report: false
# 事件上報
eventMessage:
report: false
# 上報URL
destinations: []
# 上報時的額外Header
extraHeaders: {}
## 心跳
heartbeat:
# 功能總開關
enable: false
# 啟動延遲
delay: 1000
# 心跳間隔
period: 15000
# 心跳上報URL
destinations: []
# 上報時的額外資訊
extraBody: {}
# 上報時的額外頭
extraHeaders: {}
6. 安裝MiraiAndroid
mirai-login-solver-selenium和TxCaptchaHelper均無法正常工作(2021.9.9)!
參考:無法登入的臨時處理方案 | MiraiForum (mamoe.net)
github:mzdluo123/MiraiAndroid: QQ機器人 /(實驗性)在Android上執行Mirai-console,支援外掛 (github.com)
下載:https://install.appcenter.ms/users/mzdluo123/apps/miraiandroid/distribution_groups/release
使用前環境準備:
在
mirai
執行時中新增 JVM 屬性mirai.slider.captcha.supported
(新增引數-Dmirai.slider.captcha.supported
) 以確認手動完成滑動驗證上面的看不懂沒關係,直接看下面的操作操作步驟:對於
mirai-console-loader
, 開啟mcl(Linux)
或mcl.bat(Windows)
, 在java ..... -jar ....
命令中的-jar
前加入引數-Dmirai.slider.captcha.supported
,Linux修改後的結果如下:
#!/usr/bin/env sh export JAVA_BINARY=java $JAVA_BINARY -Dmirai.slider.captcha.supported -jar mcl.jar $*
- 如果執行於
mirai-console
, 需要在plugins
內刪除mirai-login-solver-selenium
外掛- 如果直接基於
mirai-core
開發, 需要刪除mirai-login-solver-selenium
依賴
使用方法:
下載之後安裝到你的手機上,並且完成登入;登入方法在主螢幕右上角的設定自動登入裡,登入過程中需要驗證請在通知欄內點選通知完成驗證。
登入成功後到左邊選單內找到高階功能(工具),選擇你的賬號(選擇一個bot)之後匯出裝置檔案(device.json)傳送到電腦,並覆蓋電腦版檔案(Linux下路徑為mcl-1.2.2/bots/qq號/device.json)。
再執行mcl指令碼
cd ./mcl-1.2.2 sh ./mcl
等待mcl開啟後輸入以下命令即可成功登陸:
> login qq號 qq密碼
7. 安裝graia-application-mirai,注意需要降級版本才能正常執行
參考配置:安裝並配置開發環境 | Graia Document (graia-document.vercel.app)
GraiaProject/Application: 一個設計精巧, 協議實現完備的, 基於 mirai-api-http 的即時聊天軟體自動化框架. (github.com)
cannot import name 'BaseDispatcher' · Issue #161 · GraiaProject/Application (github.com)
pip install graia-application-mirai==0.18.4
建立bot.py檔案,修改bot.py中的host、authKey與mirai-api-http的配置相同,修改account,websocket改為true
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(loop=loop)
app = GraiaMiraiApplication(
broadcast=bcc,
connect_info=Session(
host="http://localhost:8080", # 填入 httpapi 服務執行的地址
authKey="graia-mirai-api-http-authkey", # 填入 authKey
account=****, # 你的機器人的 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()
執行bot.py
python bot.py
然後向你的QQ機器人,隨便傳送一條訊息,如果它回覆你Hello, World!,則表示執行成功