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!,则表示运行成功

posted @ 2021-09-09 14:42  还没有女朋友的执念  阅读(3399)  评论(0编辑  收藏  举报