简介

Mirai 是一个在全平台下运行,提供 QQ 协议支持的高效率机器人库。mirai-console 是一个高效率 QQ 机器人框架,机器人核心来自 mirai

Nonebot是一个基于 OneBot 标准(原 CQHTTP) 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。

通过 mirai-console 加载相关插件我们可以使用 ws 协议与 Mirai-console 通信,从而搭建使用 Nonebot 框架的QQ机器人。

搭建环境

本文仅实践了在 Windows 环境下搭建,至于 Linux 环境能否搭建成功本文概不介绍,也不负责。

Mirai-cosole 本身支持在 JRE 8+ / JDK 8+ 环境下手动运行,但是我们可以使用自启动工具来启动,这样运行较为方便。其中官方文档推荐自动启动工具有两款:

官方: https://github.com/iTXTech/mirai-console-loader
第三方: https://github.com/LXY1226/MiraiOK

由于第三方这款近半年没有维护了,所以这里我们使用 mirai-console-loader。

mirai-console-loader 需要 Java 版本大于等于 11,所以我们需要前往 Oracle 官网下载 Java。官网下载时可能需要登录 Oracle 账号才能下载。这种行为十分恶心。于是在某 404 网站找到了相应解决办法。

例如我们安装 JDK 11,打开网址 https://www.oracle.com/java/technologies/javase-jdk11-downloads.html,选择 Windows x64 安装包,点击下载,弹出以下对话框。

勾选同意后,右键复制红框处的下载地址。

image-20210118101822639

格式类似下面:

https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/11.0.9%2B7/<key>/jdk-11.0.9_windows-x64_bin.exe

将其编辑修改为:

https://download.oracle.com/otn-pub/java/jdk/11.0.9%2B7/<key>/jdk-11.0.9_windows-x64_bin.exe

即将 nexturl= 后面复制,并将原来的 otn 修改为 otn-pub ,这样就无需登录可以直接下载了。

如果你的电脑上安装了其他版本的 Java 而你又不想卸载,那么可能产生冲突。默认 Java 应该不会设置环境变量。所以我们可以使用虚拟环境的方式来启动 Java。查询了网上一些介绍可以使用 Conda 或者 jenv 来管理。前者不知道能不能支持 Java 11,示例给的 Java 7 和 Java 8,后者则是在 Linux 和 Macos 上运行。

这里我们使用虚拟环境脚本的方式来使用 Java 11,当然读者如果有更好的方法欢迎留言。

新建一个 bat 脚本,命名为 activate.bat (本脚本来源于 Python 的 virtualenv 的环境激活脚本,并略作修改)

注意请将 VIRTUAL_ENV 替换为你的 Java 的 bin 路径, PROMPT=(JDK 11) 括号中的内容替换为你想要的提示词。

@echo off

set "VIRTUAL_ENV=C:\Program Files\Java\jdk-11.0.9\bin"

if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
    if not defined PROMPT (
        set "PROMPT=$P$G"
    )
    if not defined VIRTUAL_ENV_DISABLE_PROMPT (
        set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
    )
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
    set "PROMPT=(JDK 11) %PROMPT%"
)

REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
    set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
    set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2

set "PATH=%VIRTUAL_ENV%;%PATH%"

然后shift + right-click打开 powershell 或者 cmd。前者按照下图操作即可,后者无需再启动 cmd。当然你也可以自行修改virtualenv 的 ps1 脚本达到直接在 powershell 启动的目的。

image-20210118103621339

现在我们的 Java 环境已经安装完毕,接下来就是启动 mirai-console 了。

启动mirai-console

首先前往 releases 下载 mirai-console-loader 。我们下载最新版 mcl-1.0.3 并解压。

image-20210118142751052.png

之后进入解压目录,并运行.\mcl.cmd。首次运行他会自动下载一些运行所必须的文件,并生成一些文件和文件夹,运行结果展示如下:

10:43:34 [INFO] Mirai Console Loader version 1.0.3-6e34f43
10:43:34 [INFO] https://github.com/iTXTech/mirai-console-loader
10:43:34 [INFO] This program is licensed under GNU AGPL v3
10:43:34 [DEBUG] Loading script: boot.js
10:43:34 [DEBUG] Loading script: config.js
10:43:34 [DEBUG] Loading script: repo.js
10:43:34 [DEBUG] Loading script: updater.js
10:43:35 [INFO] Verifying "net.mamoe:mirai-console" version
10:43:35 [INFO] "net.mamoe:mirai-console:" is corrupted. Start downloading...
Downloading mirai-console-2.0.0.jar [==============================] 1.68 MB
Downloading mirai-console-2.0.0.sha1 [==============================] 40 B
10:43:40 [INFO] Verifying "net.mamoe:mirai-console-terminal" version
10:43:40 [INFO] "net.mamoe:mirai-console-terminal:" is corrupted. Start downloading...
Downloading mirai-console-terminal-2.0.0.jar [==============================] 1.24 MB
Downloading mirai-console-terminal-2.0.0.sha1 [==============================] 40 B
10:43:41 [INFO] Verifying "net.mamoe:mirai-core-all" version
10:43:41 [INFO] "net.mamoe:mirai-core-all:" is corrupted. Start downloading...
Downloading mirai-core-all-2.0.0.jar [==============================] 28.79 MB
Downloading mirai-core-all-2.0.0.sha1 [==============================] 40 B
2021-01-18 10:43:54 I/main: Starting mirai-console...
2021-01-18 10:43:54 I/main: Backend: version 2.0.0, built on 2021-01-15 18:20:03.
2021-01-18 10:43:54 I/main: Frontend Terminal: version 2.0.0, provided by Mamoe Technologies
2021-01-18 10:43:55 I/main: Prepared built-in commands: autoLogin, help, login, permission, status, stop
2021-01-18 10:43:55 I/main: 0 plugin(s) enabled.
2021-01-18 10:43:55 I/main: mirai-console started successfully.

当你看到 mirai-console started successfully 说明已经 mirai-console 成功启动了。

接下来你可以使用 /help 查看相关命令,更多命令介绍请查看 https://github.com/mamoe/mirai-console/blob/master/docs/BuiltInCommands.md#mirai-console---builtin-commands

你可以使用/autologin命令来设置自动登录。

/autoLogin add <qq> <passwd>

image-20210118104937051.png

首次登录可能需要如图的设备锁验证,点击设备锁验证然后扫码即可验证,成功后关闭弹窗即可。

image-20210118105137438.png

之后便是登录成功字样。后续登录可能会遇到调用浏览器输入验证码。

OneBot Mirai 插件安装

mirai 为我们提供了很多可供选择的插件,这里我们选用 OneBot Mirai (原cqhttp-mirai)来与 nonebot 通信。

CQHTTP 插件在 2020 年 8 月后已经无法使用。目前推荐使用功能和配置方式类似的 go-cqhttp 来与 NoneBot 协同工作。

其余支持 OneBot (旧 CQHTTP) 的方式有:

此表并不完整,你可以选择合适的替代并且按照相应文档完成配置。

OneBot Mirai releases 页面下载 onebot-mirai-0.3.4-all.jar 。下载完成后将其置于 mcl 的 plugins 文件夹中,之后运行重新 mirai-console , 此后 mirai-console 将在 config/OneBot 文件夹中自动生成样本配置文件 settings.yml 。编辑配置文件, 按照以下配置给出的注释修改保存。注意修改时请关闭 mirai-console ,否则 mirai-console 退出后,配置文件将还原为运行时加载的配置文件。修改完成后,再次启动配置文件即可加载。具体的配置文件介绍可以查看这里

下面给出一个示例:

proxy: ''
bots: 
  # 将下面这个替换为你的机器人的 QQ 号。
  1234567890: 
    cacheImage: false
    cacheRecord: false
    heartbeat: 
      enable: false
      interval: 1500
    http: 
      enable: false
      host: 0.0.0.0
      port: 5700
      accessToken: ''
      postUrl: ''
      postMessageFormat: string
      secret: ''
      # 上报超时时间, 单位毫秒, 须大于 0 才会生效
      timeout: 0
    ws_reverse: 
      # 将这里改为 true
      - enable: true
        postMessageFormat: string
        reverseHost: 127.0.0.1
        reversePort: 8080
        accessToken: ''
        reversePath: '/ws'
        reverseApiPath: '/api'
        reverseEventPath: '/event'
        useUniversal: true
        useTLS: false
        reconnectInterval: 3000
    ws: 
      enable: false
      postMessageFormat: string
      wsHost: 0.0.0.0
      wsPort: 6700
      accessToken: ''

修改完配置文件,再次启动(首次启动也会显示),注意我们可以看到插件已经加载完毕,如果你已经登录了 QQ ,到这里你就无需再对 mirai-console 修改。

2021-01-18 10:59:37 I/plugin: Successfully loaded plugin OneBot
2021-01-18 10:59:38 I/main: Prepared built-in commands: autoLogin, help, login, permission, status, stop
2021-01-18 10:59:38 I/OneBot: Plugin loaded! 0.3.4
2021-01-18 10:59:38 I/OneBot: 插件当前Commit 版本: 75a84ee
2021-01-18 10:59:38 I/main: 1 plugin(s) enabled.

Nonebot

接下来我们来配置 Nonebot。事实上,官方的 docs 已经很具体详尽,此处就做个简单说明。

首先你需要确保你的 Python 版本 >= 3.7。然后运行如下命令即可,建议使用 virtualenv 、poetry 或者 Conda 等工具来管理依赖包或者虚拟环境。

pip install nonebot

如果你需要使用最新的(可能尚未发布的)特性,可以克隆 Git 仓库后手动安装:

git clone https://github.com/nonebot/nonebot.git
cd nonebot
python setup.py install

以上命令中的 pippython 可能需要根据情况换成 pip3python3

之后安装官方文档的介绍,我们需要配置 CQHTTP 插件。事实上,我们刚才配置的 OneBot Mirai 就是这个插件。不过配置到这里,我发现好像还可以用基于 MiraiGogo-cqhttp 似乎简单些,有兴趣的读者可以尝试。

最后,你只需要按照官方文档给出的教程就可以编写自己的机器人了,这里就不再赘述了。

更新

2021.1.21

发现已经有新版的 nonebot2 了,官方文档可以在这里找到。
需要注意的是,你需要将 onebot 的 settings.yml 中的 reversePath: '/ws' 改为 reversePath: 'cqhttp/ws'

标签: qqbot, 机器人, nonebot, mirai

已有 2 条评论

  1. 博主的文章非常好用,谢谢博主

  2. next next

    博主的文章非常好用,谢谢博主

添加新评论