Skip to main content

一:在 Linux 上部署

想要让机器人全天候运行,整天开着电脑肯定是不太行的。这时候我们可以把机器人部署到一些可以持续运行的地方,比如服务器上。

不过,服务器一般是 Linux 系统(我尝试过用 Windows 建服务器的痛苦),要在 Linux 上部署 mirai 和 YiriMirai,和 Windows 上还是有些区别的。

本节我们使用 Debian 11.0 作为演示。其他 Linux 发行版,除去软件包安装会有所不同外,流程基本相同。

本节将全程使用终端,不涉及任何图形界面。

安装 mirai-console

我们依然使用 mcl-installer 来安装 mirai-console。

在此之前,mirai-console 运行在 JVM 上,我们需要先安装 Java。虽然 mcl-installer 可以自动安装 Java,不过,在 Linux 系统上,还是用系统的软件包管理器更方便。

在终端输入:

sudo apt install openjdk-11-jre

然后验证一下 Java 版本:

$ java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2)
OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2, mixed mode, sharing)

接下来下载 mcl-installer。

cd ~
mkdir mirai
cd mirai
wget https://github.com/iTXTech/mcl-installer/releases/download/v1.0.3/mcl-installer-1.0.3-linux-amd64
chmod +x mcl-installer-1.0.3-linux-amd64

运行 mcl-installer,会看到这样的输出:

$ ./mcl-installer-1.0.3-linux-amd64
iTXTech MCL Installer 1.0.3 [OS: linux]
Licensed under GNU AGPLv3.
https://github.com/iTXTech/mcl-installer

iTXTech MCL and Java will be downloaded to "/home/wybxc/mirai"

Checking existing Java installation.
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2)
OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2, mixed mode, sharing)

Would you like to install Java? (Y/N, default: Y)

因为我们已经安装了 Java,不需要重复安装,这里输入 N,回车继续。

Would you like to install Java? (Y/N, default: Y) N
Fetching iTXTech MCL Package Info from https://gitee.com/peratx/mirai-repo/raw/master/org/itxtech/mcl/package.json
Mirai Console Loader 公告栏

[mirai-console] 最近, 项目组发现了权限系统可能会被错误的提前加载导致的3rd权限系统无法正确加载

于是决定, 于 2.6 起, 超前访问权限系统将得到一个错误并中断插件加载, 请各开发者及时检查

影响范围: https://github.com/mamoe/mirai-console/pull/307


The latest stable version of iTXTech MCL is 1.2.2
Would you like to download it? (Y/N, default: Y)

这里直接回车,继续安装 mirai-console。

Would you like to download it? (Y/N, default: Y)
Start Downloading: https://github.com/iTXTech/mirai-console-loader/releases/download/v1.2.2/mcl-1.2.2.zip
Downloading: 1569577/1569577
Extracting [14/14] scripts/updater.jsjsjs
Use "./mcl" to start MCL.

Press Enter to exit.

回车,结束安装。

接下来,输入 ./mcl 启动 mirai-console-loader,首次启动时会下载 mirai-core 和 mirai-console。

如果提示“权限不够”,先执行命令,赋予 ./mcl 可执行权限:

chmod +x ./mcl

启动 mirai-console-loader,会看到这样的输出:

$ ./mcl
10:35:42 [INFO] iTXTech Mirai Console Loader version 1.2.2-60c67fb
10:35:42 [INFO] https://github.com/iTXTech/mirai-console-loader
10:35:42 [INFO] This program is licensed under GNU AGPL v3
10:35:43 [INFO] Verifying "net.mamoe:mirai-console" v2.7-RC
10:35:43 [ERROR] "net.mamoe:mirai-console" is corrupted.
Downloading mirai-console-2.7-RC.jar [==============================] 3.35 MB
(中间省略)
2021-08-24 10:36:19 I/MCL Addon: iTXTech MCL Version: 1.2.2-60c67fb
2021-08-24 10:36:20 I/main: 1 plugin(s) enabled.
2021-08-24 10:36:20 I/main: mirai-console started successfully.

输入 exit 回车退出 mirai-console。

这样,mirai-console 就安装完成了。

安装配置 mirai-api-http

和之前的教程一样,mirai-api-http 需要单独下载。

cd ~/mirai/plugins
wget https://github.com/project-mirai/mirai-api-http/releases/download/v2.2.0/mirai-api-http-v2.2.0.mirai.jar

重启 mirai-console。

cd ~/mirai
./mcl

可以看到控制台输出多了下面几行:

2021-08-03 22:02:08 W/net.mamoe.mirai-api-http: USING INITIAL KEY, please edit the key
2021-08-03 22:02:08 I/Mirai HTTP API: ********************************************************
2021-08-03 22:02:08 I/http adapter: >>> [http adapter] is listening at http://localhost:8080
2021-08-03 22:02:08 I/Mirai HTTP API: Http api server is running with verifyKey: INITKEYn7ussdck
2021-08-03 22:02:08 I/Mirai HTTP API: adaptors: [http]
2021-08-03 22:02:08 I/Mirai HTTP API: ********************************************************

这说明 mirai-api-http 安装成功了。

退出 mirai-console,在 config/net.mamoe.mirai-api-http 文件夹中找到 setting.yml,这是 mirai-api-http 的配置文件。

编辑这个文件:

cd ~/mirai/config/net.mamoe.mirai-api-http
vim setting.yml

将内容修改为:

setting.yml
adapters:
- ws
debug: true
enableVerify: true
verifyKey: yirimirai
singleMode: false
cacheSize: 4096
adapterSettings:
ws:
host: localhost
port: 8080
reservedSyncId: -1

重启 mirai-console。

cd ~/mirai
./mcl

看到这样的输出:

2021-08-03 22:46:18 I/Mirai HTTP API: ********************************************************
2021-08-03 22:46:18 I/ws adapter: >>> [ws adapter] is listening at ws://localhost:8000
2021-08-03 22:46:18 I/Mirai HTTP API: Http api server is running with verifyKey: yirimirai
2021-08-03 22:46:18 I/Mirai HTTP API: adaptors: [ws]
2021-08-03 22:46:18 I/Mirai HTTP API: ********************************************************

恭喜你,mirai-api-http 安装成功了。

登录 QQ

运行 mirai-console,在终端输入 login QQ号 密码,登录 QQ。

备份设备文件

如果你在其他地方的 mirai 已经成功通过设备锁验证,那么在 bots/QQ号 文件夹中可以找到 device.json 文件,这个文件保存了登录的虚拟设备信息。

你可以把这个 device.json 复制到 ~/mirai 文件夹中,这样相当于两次使用同一个设备登录,可以避免再次进行设备锁验证。

设备锁

如果你的账号开启了设备锁,在图形界面下会弹出这样的弹框:

device-verify

复制下面的 URL 框中的内容,在手机 QQ 中打开,然后使用另一台已登录此 QQ 号的手机扫码验证。

如果没有图形界面,会在终端输出这样的内容:

2021-08-25 10:43:22 I/Bot.748753384: [UnsafeLogin] 当前登录环境不安全,服务器要求账户认证。请在 QQ 浏览器打开 https://ti.qq.com/safe/verify?_wv=2&_wwv=128&envfrom=###### 并完成验证后输入任意字符。
2021-08-25 10:43:22 I/Bot.748753384: [UnsafeLogin] Account verification required by the server. Please open https://ti.qq.com/safe/verify?_wv=2&_wwv=128&envfrom=###### in QQ browser and complete challenge, then type anything here to submit.

同样,将这里的链接复制到手机 QQ 中打开,完成验证后,在终端输入任意字符,回车继续。

滑动验证码

有时候登陆账号还需要滑动验证码。这种情况可以使用 TxCaptchaHelper 处理。

在手机上安装 TxCaptchaHelper,打开后输入 mirai 给出的请求码,完成滑动验证即可。

使用 screen

用 Windows 时,我们可以开几个命令窗口,一个运行 mirai,一个运行 Python;但是在 Linux 上,尤其是连接到远程服务器时,断开与服务器的连接,当前的终端会被关闭,里面运行的任务不能继续运行。

有什么办法,让一个终端可以“后台运行”呢?一个简单的办法是使用 screen 命令。

如果你的 Linux 发行版没有安装 screen,可以使用以下命令安装:

sudo apt install screen

使用 screen -S <名字> 命令启动一个 screen。

screen -S mirai

每一个 screen 都是一个新的终端,这些终端由 screen 管理,可以随时放到后台。

在新的终端中,输入 ./mcl 运行 mirai-console,登录 QQ 账号。

mirai-console 运行成功后,按下 Ctrl+A Ctrl+D,将终端放到后台。

screen -r <名字> 命令重新连接到一个后台的终端。

screen -r mirai

同样,按下 Ctrl+A Ctrl+D 可以将终端再次放到后台。

使用 UTF-8 编码

如果 screen 导致了中文乱码,指定 screen 使用 UTF-8 编码(-U 参数)可能会解决问题:

screen -U -S mirai

使用 UTF-8 编码之后,每一条 screen 命令都要加上 -U 参数。

screen -U -r mirai

按照同样的方法,再建立用于运行 Python 的 screen。

screen -S python

这样,需要的时候就连接到不同的 screen,从服务器断开连接的时候,就可以把 screen 放到后台运行。