环境:
- OS: Debian GNU/Linux 12 (bookworm) x86_64
- Java: openjdk version “11.0.18” 2023-01-17
- MCL: v2.1.2
- Mirai: v2.15.0
- fix-protocol-version: v1.9.9
- unidbg-fetch-qsign: v1.1.6
相信当你看到这篇文章的时候已经部署好了mirai,并且版本为最新稳定版v2.15.0,那么……
检查一下环境有没有问题
- 更新一下
1 | sudo apt update |
- 确认Java版本大于等于1.8
不装Java能用mirai吗?
1 | java -version |
- 确认已部署2.15.0及以上版本的mirai
安装fix-protocol-version插件,确认登录协议版本
关闭正在运行的mirai
下载fix-protocol-version,然后放入plugins文件夹
1 | cd mirai/plugins |
- 启动mirai
1 | cd .. |
- 在线同步协议
1 | protocol sync ANDROID_PHONE |
- 确认当前登录协议版本
1 | protocol info |
这样,咱们就知道了当前的登录协议是什么版本
部署unidbg-fetch-qsign
- 获取unidbg-fetch-qsign
1 | cd ~ |
- 解压 unidbg-fetch-qsign-1.1.6.zip
1 | unzip unidbg-fetch-qsign-1.1.6.zip |
- 配置
之前已经获知了我们的登录协议版本为8.9.63,所以我们配置8.9.63
编辑 ./unidbg-fetch-qsign-1.1.6/txlib/8.9.63/config.json
1 | nano unidbg-fetch-qsign-1.1.6/txlib/8.9.63/config.json |
默认的config.json长这样↓
1 | { |
大概有以下几个项目需要设置
key | value |
---|---|
host | 能够访问该服务的IP地址;0.0.0.0表示可以从任何位置访问该服务 |
port | 开放的端口;注意不要与正在使用的端口重复 |
key | 注册实例的密钥 |
dynarmic | 一个开源的动态ARM指令集模拟器(大概能提高效率?) |
编辑好config.json之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件
- 检查端口是否被占用
1 | sudo netstat -lntp |
如果之前在config.json中配置的端口在输出的列表中出现了,就换个端口
启动!
示例命令:
1 | /home/yourame/unidbg-fetch-qsign-1.1.6/bin/unidbg-fetch-qsign --basePath=/home/yourname/unidbg-fetch-qsign-1.1.6/txlib/8.9.63/ |
参数 | 说明 |
---|---|
/home/yourname/unidbg-fetch-qsign-1.1.6/bin/unidbg-fetch-qsign | 此目录指向unidbg-fetch-qsign的启动文件 |
–basePath=… | 指向之前配置的config.json所在的文件夹 |
你已经完全理解了启动命令的含义,该启动了
当出现23:50:23.781 [DefaultDispatcher-worker-1] INFO ktor.application - Responding at http://127.0.0.1:9080
时,启动就成功了
将unidbg-fetch-qsign注册为服务以实现后台运行或开机启动
当然,想要实现这两个功能并不一定要使用我在此提供的方法
使用Ctrl+C关闭刚刚启动的unidbg-fetch-qsign,然后创建服务
新建 /etc/systemd/system/qsign.service
1 | sudo nano /etc/systemd/system/qsign.service |
在文件中写入一下内容
1 | [Unit] |
大概有以下几个项目需要设置
key | value |
---|---|
Description | 简介 |
ExecStart | 写入之前运行成功的命令 |
编辑好qsign.service之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件
在此插入一点简单的systemctl
命令说明。更多的可以在此查看
命令 | 效果 |
---|---|
systemctl daemon-reload |
重新加载 systemd 守护进程的配置 |
systemctl start PATTERN... |
启动(activate)指定的已加载单元(无法启动未加载的单元)。 |
systemctl stop PATTERN... |
停止(deactivate)指定的单元 |
systemctl restart PATTERN... |
重新启动指定的单元。 |
systemctl status [PATTERN...|PID...] |
如果指定了单元,那么显示指定单元的运行时状态信息,以及这些单元最近的日志数据。 如果指定了PID,那么显示指定PID所属单元的运行时状态信息,以及这些单元最近的日志数据。 |
systemctl enable NAME..., enable PATH... |
启用指定的单元或单元实例(多数时候相当于将这些单元设为”开机时自动启动”或”插入某个硬件时自动启动”)。 |
systemctl disable NAME... |
停用指定的单元或单元实例(多数时候相当于撤销这些单元的”开机时自动启动”以及”插入某个硬件时自动启动”)。 |
刚才我们已经编辑了一个用于unidbg-fetch-qsign的qsign.service,
如果要后台运行
1 | sudo systemctl daemon-reload |
检查一下是否已经成功启动
1 | sudo systemctl status qsign.service |
可以看到已经成功启动了
想要停止unidbg-fetch-qsign,只需要执行sudo systemctl stop qsign.service
就行了
如果还想让它开机自动启动
1 | sudo systemctl enable qsign.service |
然后你又不想让它开机自动启动了
1 | sudo systemctl disable qsign.service |
配置fix-protocol-version
fix-protocol-version的配置文件在默认情况下会生成在mcl根目录,名称为KFCFactory.json
1 | cd mirai |
默认的config.json长这样↓
1 | { |
大概有以下几个项目需要设置
key | value |
---|---|
base_url | 还记得刚才config.json填的端口吗 |
key | 还记得刚才config.json填的密钥吗 |
按照默认文件中的格式编辑
编辑好KFCFactory.json之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件
终于,该启动bot了
1 | cd mirai |
期间提示需要进行短信验证,进行验证即可
好!Bot活了!-
参考
- cssxsh/fix-protocol-version/README.md: https://github.com/cssxsh/fix-protocol-version/blob/main/README.md
- mamoe/mirai/mirai-console/docs/BuiltInCommands.md: https://github.com/mamoe/mirai/blob/dev/mirai-console/docs/BuiltInCommands.md
- fuqiuluo/unidbg-fetch-qsign: https://github.com/fuqiuluo/unidbg-fetch-qsign/wiki/%E9%83%A8%E7%BD%B2%E5%9C%A8Linux
- systemctl(1) — Arch manual pages: https://man.archlinux.org/man/systemctl.1.zh_CN