Python+mirai開發QQ機器人起步教程(2021.9.9測試有效)


參考:開發 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/libsmcl-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-seleniumTxCaptchaHelper均無法正常工作(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="1234567890", # 填入 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!,則表示運行成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM