mirai 登录全解


mirai-core 用户请自行查阅相关文档,我相信你们能做到
如果你不知道什么是 mirai-core,这篇文档是适合你的。

新手教程

不要尝试跳过新手教程玩 mirai。
https://docs.mirai.mamoe.net/ConsoleTerminal.htmlopen in new window

解决滑动验证码(滑块验证)不在本文档的范畴内,请自行想办法解决。

有问题加群 1047497524 问,本文档没有涉及到的问题将帮助我改进文档。

现状 (2024/09/28)

省流:两条可用路线

注意

以下信息提到的所有工具均已过时

现状 (2023年)

服务器大力推行 security sign、energy sign 等,目前 mirai 不添加外部签名服务的情况下已经非常难登录了。
对于纯粹的用户(非开发者)来说,部署和使用签名服务阻力稍大,
经常会出现让开发者头疼的反馈(用法错误、不看中文报错)。
本文尽可能列举出目前可用的方法以及注意事项,以供参考。

什么是签名服务?

2.15.0 正式版起,mirai 开放了 tlv544 加密以及 sso 签名的接口,
意味着可以通过对接外部服务对数据包进行加密,
以满足服务器要求,让机器人作为“正常QQ用户”登录并聊天。

对于一般通过的 mirai-console 用户来说,
外部签名服务要生效,就需要通过插件对接 mirai 的接口。

从下文选择一个插件,开始吧。

怎么使用其它协议登录?

这是玩 mirai 最基础的命令,避免有一些跳过新手教程的整合包用户不知道,这里解释一下。

login <账号> <密码> [协议]

不需要输入 <>[]

假如,我们在使用 fix-protocol-version + magic-signer-guide,需要使用 8.9.58 协议登录。

先在 mirai 启动的时候看看日志输出的各协议版本信息
找到 8.9.58 对应的协议,
如果没有这个协议版本,需要用命令下载更新协议,在下文 fix-protocol-version 部分有说明。

假如我们已经找到了,比如

2023-07-21 11:45:13 I/fix-protocol-version: 当前各协议版本日期:
ANDROID_PHONE  8.9.63.11390  2023-05-26T10:46:18+08:00
ANDROID_PAD    8.9.58.11170  2023-05-26T10:46:18+08:00

那么我们需要登录的协议就是 ANDROID_PAD
不要无脑抄,根据自己的日志输出情况决定!!!
不要无脑抄,根据自己的日志输出情况决定!!!
不要无脑抄,根据自己的日志输出情况决定!!!

假如我们要登录的机器人QQ号是 114514,密码是 sodayo,那么登录命令就是

login 114514 sodayo ANDROID_PAD

少用整合包

安装签名服务涉及到你的账号安全,
来源不明的整合包、签名服务有可能包含恶意软件
除非整合包来自你可信的来源,否则一律不要使用整合包

登录时的警告是警告,不是报错

这是签名服务已成功注册的标志。

2.15.0 正式版起,如果你安装了签名服务,
登录时将会使用日志记录器 EncryptService.alert 的警告等级,打印出签名服务的文件位置信息。

这是在告诉你,你正在使用签名服务,可能会有信息泄露的风险,请不要使用来源不明的签名服务。

仅此而已,并不是报错。

日志记录器是日志每行开头在时间后面的东西。 比如 2023-07-21 11:45:14 I/Logger: Hello World. Logger 是日志记录器,用来分辨日志是在什么地方打印的。 I 是日志等级,Info(信息) 的缩写,除此之外还有 W(arn)警告、E(rror)错误、V(erbose)详细、D(ebug)调试 等日志级别。

不是所有报错都需要上报

有的报错是提示你哪里做错了,要求你改正,
你应当先认真阅读报错开头的信息,
如果是英文的可以先翻译再阅读

当你判断这个问题不是你能解决的之后再上报给开发者。

比如【请检查签名服务可用性】,应该先看签名服务是不是开着的,签名服务的配置和插件的配置对不对得上等等。

装了签名服务还是 45

两种可能:

  • 一是签名服务没配置好
  • 二是冻结或者封号引起的 code=45,老实活跃聊天等状态解除,或者换号吧。

成功的迹象

如果在完成滑动验证码后出现短信验证,很大几率已经成功了。

提示

以下是签名服务相关插件

fix-protocol-version

临时协议修复。
https://mirai.mamoe.net/topic/2386open in new window
对接多个签名服务,自带协议版本更新。

优点是选择和备用方案比较多,更新跟进快,缺点是对用户来说配置稍微复杂。

相信很多用户已经用过了,这里先把注意事项写前面。

使用的签名服务版本必须要和协议版本相同,
比如 8.9.58 协议不能用 8.9.63 的签名服务,

登录之前必须检查这两个版本是否相同。

第一次安装这个插件后需要修改 KFCFactory.json 填入签名服务对应的

  • 协议版本 ("x.x.xx": {)
  • 类型 ("type": "类型")
  • 地址、端口 ("base_url": "http://地址:端口")
  • 密钥 (剩下名字带key的就是密钥)

等参数,不填写是没有用的。插件详细页有填写例子。

出现【请检查可用性】的报错时先不要反馈
先自己检查一遍你的签名服务是不是开着的,签名服务类型对不对,端口对不对……
通常就是这些问题,你去反馈也只能得到同样的答复。

如果签名服务和协议版本对不上,可以在 mirai 用
protocol fetch 协议类型 版本 命令下载更新你需要的协议,
protocol fetch ANDROID_PAD 8.9.63

安装这个插件从来不是复杂的,复杂的是安装签名服务,
以及把签名服务的参数写进配置 KFCFactory.json 里。

好,现在正式开始配置教学。

首先安装 fix-protocol-version 最新版本启动一遍,
然后选择一个签名服务。(下面两个选一个就行了)


假定你选择

magic-signer-guide (又名 KuimiVM)
优点: 架构良好,运行稳定
缺点: 支持协议版本单一

先安装 docker (请自行搜索教程)

然后在浏览器打开项目地址 https://github.com/kiliokuara/magic-signer-guideopen in new window

然后打开终端(Windows 是 CMD),执行项目地址【使用方法】里的命令(不需要$号),执行之前可按需修改命令中的相关参数,在命令下面的“环境变量”有说明,不懂可以不改。然后确认服务已经开启。


假定你选择

unidbg-fetch-qsign
优点: 支持协议版本较多
缺点: 架构较差,运行可能不稳定

该项目已跑路,你可以寻找相关的 fork 项目续命。

将发行版解压到任意文件夹,那个文件夹应该要能看到 binlibtxlib 三个文件夹,
然后在这个文件夹打开终端(或CMD)执行以下命令

bin/unidbg-fetch-qsign --basePath=txlib/8.9.78

可以把 8.9.78 改成任意协议版本来切换签名服务版本。
签名服务配置文件在 txlib/协议版本/config.json

在配置文件中,可以在 unidbg 切换后端,dynarmicunicornkvm 三个选项开启一个关闭两个即为切换后端,遇到崩溃可尝试更换后端。

关闭 debug 可一定程度减少日志输出。


确认服务已经开启后,复制粘贴 fix-protocol-version 项目地址open in new window 里找到的
KFCFactory.json 的示例到你的 KFCFactory.json 文件,然后修改相关参数。

配置说明
base_url服务地址,包括端口号,如 http://127.0.0.1:端口,端口换成你签名服务的端口
type服务类型,可以填 fuqiuluo/unidbg-fetch-qsignkiliokuara/magic-signer-guide,用什么填什么
server_identity_keymagic-signer-guide 服务器身份密钥,在上面要执行的命令里有这个参数(SERVER_IDENTITY_KEY),默认是 vivo50
authorization_keymagic-signer-guide 客户端身份密钥,在上面要执行的命令里有这个参数(AUTH_KEY),默认是 kfc
keyunidbg-fetch-qsign 的访问密钥,在 config.json 里有,默认是 114514

如果上面的命令你没改过,相关参数你可以不改,只要复制示例配置就行了,不改就是默认的。

你也应该注意到了 KFCFactory.json 是用来将登录的不同版本协议对接到不同的签名服务的,
所以,你部署了什么签名服务,就要用它对应的协议版本登录。

怎么给协议换版本前面说了,这里就不重复了。

完成

改好之后,使用相应的协议登录就行了。

qsign

签名服务移植。
https://mirai.mamoe.net/topic/2357open in new window
unidbg-fetch-qsign 移植到 mirai,省去 http api,直接对接。

优点是配置简单,缺点是签名服务类型单一,虽可支持多 bot,但对于多 mirai 实例无法复用服务导致整体内存占用更大。

大部分用户都是单 mirai 实例单 bot,影响应该不大。

只需要到 https://github.com/MrXiaoM/qsign/releasesopen in new window 下载zip解压到 mirai 所在目录就能用了。

详细配置详见插件介绍。

完成

即装即用,直接用 ANDROID_PHONEANDROID_PAD 协议登录即可。

MiraiSignHandler

签名服务适配。
https://mirai.mamoe.net/topic/2348open in new window
对接 unidbg-fetch-qsign 1.1.0 到 mirai。

该签名服务版本较旧,且该插件固定端口,
加上作者很久没有跟进更新和承诺开源,不推荐使用

后记

没想到论坛上发布的签名服务插件不多。也好,不用我写那么多文档。