2024.7.4 目前可用的mirai登陆全过程含安装插件
-
RT
其实本来我的bot已经因为自己手贱登陆qq nt直接报废了,但是论坛里有佬提供了新的协议库,那这不赶紧复活bot都对不起这个新的协议库。
由于存在下载障碍,所以这里也搞了个存档,本帖中的相关标星*资源无法下载均可以从这里拿走,由于本帖不会进行版本跟进,若年代过于久远请以最新为准,本帖中的一些配置可能需要后续随着引用贴的更新进行调整。
https://orisland.lanzoul.com/b0maqsrkj
密码:53cs
本帖使用xshell+xftp
作为ssh连接软件 *。特别感谢: @zhaodice
相关项目更新感谢 @MrXiaoM
本帖适用于
- 刚刚接触mirai不知道如何登录的新手
- 因为安全问题不想使用整合包的选手
- 已经知晓你的账户登录信息和收发的信息会全部被注册服务器知晓的选手
- 稍微有一些Linux基础或乐于折腾的选手
- 对使用协议库登陆bot可能造成的后果有心理承受力的选手
- ....
过程中需要使用的项目
必须安装
- https://mirai.mamoe.net/topic/2673/试图复活qsign-基于9-0-56版本-再捞一把 @zhaodice
- https://github.com/iTXTech/mcl-installer
- https://github.com/cssxsh/fix-protocol-version
https://github.com/MrXiaoM/fpv (平替上面的fix-protocol-version,解决一些登录问题),本文基于fix-protocol-version官方版本进行配置,如果使用这个版本,可省略导入协议库和配置KFCFactory.json的过程,安装启动后直接进入登陆验证部分。
- https://github.com/KasukuSakura/mirai-login-solver-sakura
- 任意手机模拟器(本教程以雷电为例,海外版没有广告,广告ptsd可以选海外版)
- ..
可选安装(插件)
- https://github.com/project-mirai/chat-command
- https://mirai.mamoe.net/topic/68/luckperms-mirai-高级权限服务插件
- https://mirai.mamoe.net/topic/2645/今日运势插件
- ...
详细步骤
注册一个qq号
需绑定手机,非常不推荐使用一些批量注册的qq号,或者来源不明的qq号,这些账号被风控的可能性会更高,而且不安全,容易被杀。
准备一台服务器或vps
请注意,为了bot能长期稳定运行考虑,应尽可能避免海外云主机。
阿里云,腾讯云,等等各大云服务厂商提供了各种型号的学生机供你选择。
从省钱划算的角度考虑,推荐考虑的配置为1c或2c配置,内存在1g到2g即可满足bot的运行需要,甚至还能再挂个宝塔,个人推荐最低使用轻量级云服务器即可,ecs或者类似的服务器也可以,这个没有特别大的区别。
当然因为bot本身不需要公网环境,所以如果你自己有闲置的服务器或者低功耗设备(比如nas,软路由等等),也可以在自己的服务器或者设备上进行bot搭建,相同网络环境下,机器人被搞的概率和频率会小的多。
系统选择
使用
centos8
或者ubuntu/debian
等。
本文以目前比较常用的Ubuntu22
作为bot的搭建平台,且相同网络环境下进行(HomeLab,结尾有HomeLab相关硬件说明)。
如果你的bot搭建在云服务厂商的设备中,你可能需要使用vpn的方式将自己用来验证的设备链接到目标网络中避免错误代码237等错误。初始系统配置
本文默认你已经对ubuntu的
apt源
进行了更换,已经对ubuntu做了基本的初始配置,例如挂载磁盘,update
等操作。如果你是在消费级硬件上进行搭建,请注意ubuntu时区可能有误,需要使用命令进行调整。
timedatectl set-timezone Asia/Shanghai安装mirai
由于本文在进行编撰的过程中,mirai论坛本身处于被墙状态,mcl安装的必要资源package.json会出现问题,所以本文选择通用的安装方式,不使用mcl一键安装。若之后论坛网络访问恢复,更推荐考虑mcl一键安装更为省事,使用mcl一键安装可以跳转到下一章节--必要插件安装。
这里引用mcl项目提供的安装方案。
https://github.com/iTXTech/mcl-installer为服务器安装java,不同系统以当前系统为准。
apt install openjdk-17-jre-headless -y
安装完成后检查版本。
java -verison
手动下载mcl压缩包
https://maven.aliyun.com/repository/public/org/itxtech/mcl/2.1.2/mcl-2.1.2.zip
解压到需要安装的mirai目录中,省事考虑可以对mirai文件夹整体给777权限。
本文默认mirai目录为/root/mirai
,如果懒得对命令进行修改,请创建到相同目录。chmod -R 777 /root/mirai
启动
mcl.jar
对mirai进行安装。java -jar mcl.jar
安装过程中你必须完整的看完mirai的用户须知,
不可取消和跳过
,这对于之后的排错和处理非常重要。2024-07-04 07:36:14 I/main: mirai-console started successfully.
mirai本体基本安装完成。
ctrl + c
或exit
退出mirai进行后续安装。必要插件/软件安装
安装手机模拟器(本帖以雷电为例)
前往github
,
下载fix-protocol-version
*
https://github.com/cssxsh/fix-protocol-version/releases/download/v1.13.0/fix-protocol-version-1.13.0.mirai2.jar
下载mirai-login-solver-sakura
*
https://github.com/KasukuSakura/mirai-login-solver-sakura/releases/download/v0.0.12/apk-release.apk打开雷电模拟器,安装
mirai-login-solver-sakura
,打开备用。
将
fix-protocol-version
上传到mirai目录
下的plugins
目录内,此时plugins
内应包含三个文件。
前往下面的地址,本页后续还需要使用,不要关闭。
https://mirai.mamoe.net/topic/2673/试图复活qsign-基于9-0-56版本-再捞一把
复制协议配置文件
在mirai的根目录中输入命令nano android_pad.json
在控制台中右击屏幕,粘贴配置。
进行保存退出。
ctrl + x
y
回车
忘掉之前启动mirai的方式,之后使用
./mcl -u
进行启动。协议配置
使用
./mcl -u
启动mirai。
等待加载完成后输入命令protocol load ANDROID_PAD
出现如下提示时协议信息导入完成。
检查当前的协议库中的协议版本。
退出mirai。回到刚才的页面,复制该部分。
来到mirai根目录输入命令,
mv KFCFactory.json KFCFactory.json.bak nano KFCFactory.json
将刚才复制的文本在这里粘贴并和之前一样进行保存,
注意删除结尾的逗号
。
使用命令重新启动mirai。
启动完成无报错后,则协议库配置完毕。登陆账号
./mcl -u
请注意,下面的过程可能需要一些手速
,过慢的验证您可能需要反复
进行下面的步骤,过多的重试可能会增加账号冻结的风险性
,请注意。若在本阶段登录时出现了一些意料之外的错误和问题,请使用标头提到的1.13.1版本fix-protocol-version代替原本的1.13.0版本
登陆qq。
login botqq号 bot密码 ANDROID_PAD
若之前的配置全部没有问题,在mirai启动后登陆账号密码会提示注册成功。
2024-07-04 16:23:04 I/UnidbgFetchQsign: Bot(1145141919) register, 注册成功了您嘞!
之后可以在屏幕中找到下列类似地址,此时,需要尽可能快的将这串地址
https://ti.qq.com/....
复制到刚才开的模拟器中的框框中,并单击下一步.[SliderCaptcha] Captcha link:https://ti.qq.com/safe/tools/captcha/sms-verify-login....
在经过简单的图形验证后,会弹出ticket
,立即复制该ticket
回到ssh,在ticket
栏进行粘贴,并回车,如果一切顺利,你会看到下面图片中的显示,即确认发送手机验证码。
输入yes
后回车,将手机上收到的验证码填入对应栏目后回车,登陆完成。注意本阶段有一次发送短信前的确认步骤,手动输入yes,不要在上面步骤就开始傻等短信。
mirai测试登陆过程全部结束。
为bot添加自动登录,让mirai每次启动后自动登录。
退出mirai
,下面的步骤必须
在退出mirai之后才能进行
,下列命令的实际路径以你的本地mirai的为准。由于miria在退出时会
回写
配置,故所有的配置需在mirai关闭时进行。nano /root/mirai/config/Console/AutoLogin.yml
在编辑器中添加你的bot信息,注意箭头这里
必须修改
为刚才导入的ANDROID_PAD
,不能使用默认的ANDROID_PHONE
.
保存退出。
重新启动mirai,发现mirai自动登录完成。
非必须插件安装
本项目不是必须安装的,只作为安装演示。
有些插件支持使用mcl进行安装,有些只能手动下载jar包上传plugins目录安装
。
推荐安装Chat Command
,luckperms - Mirai
,前者为命令插件,后者为权限管理插件。
在mirai根目录执行此命令后,下次启动后
会自动安装下载
。./mcl --update-package net.mamoe:chat-command --channel maven-stable --type plugin ./mcl --update-package io.github.karlatemp:luckperms --channel nightly --type plugin
完成后
./mcl -u
,启动等待完成即可。配置启动
本文提供两种后台运行mirai的方式。
screen
screen为多重视窗管理程序
https://www.runoob.com/linux/linux-comm-screen.html输入命令,创建mirai窗口
screen -S mirai
在这个窗口中启动mirai.
使用这种方式方便随时管理和查看,以及sj(视奸)群友行为。systemctl
systemctl是 Systemd 的主命令,用于管理系统。
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html创建启动服务。
nano /etc/systemd/system/mirai.service
将下面的内容写入文件保存,注意对需要的部分进行修改。
如ExecStart
,WorkingDirectory
的变量。[Unit] Description=Mirai Bot After=network.target [Service] Type=simple ExecStart=/root/mirai/mcl ExecStop=/bin/kill -9 $MAINPID Restart=on-failure User=root WorkingDirectory=/root/mirai StandardOutput=append:/root/mirai/log.log StandardError=append:/root/mirai/log.log [Install] WantedBy=multi-user.target
重载systemctl。
systemctl daemon-reload
将bot启动设置为开机自启。
systemctl enable mirai.service
启动mirai。
systemctl start mirai.service
检查mirai状态。
systemctl status mirai.service
HomeLab相关推荐
本章节为彩蛋部分,只为想在自家运行bot的选手提供一些参考。
mirai运行需要的性能很低,当然这个也和你安装的插件数量以及插件的代码效率相关。
所以如果你想在家里配置一台设备运行mirai,配置自然是越低越好,功耗自然是越低越好,最理想的方式是插个网线放窗台,使用免费的
核聚变供电。
推荐硬件配置:- 树莓派(arm平台)
- e3 1265lv3 这个带集显tdp45w,可以关闭超线程
- e3 1220lv3 不带集显13w,可以配合超微C7Z97-MF板载集显实现超低功耗
- i3 6100t 带集显tdp只有35w
BV1JY4y117vH
- epyc系列
- j1900
- .....
推荐使用纯ECC / Regecc(如果支持,大部分家用设备不支持后者,d5平台消费级主板只能使用消费级内存条)。
电源必须使用一线或准一线品质对于设备本身的稳定性至关重要。
推荐软件配置:
proxmox
作为母鸡系统启动虚拟化。
目前测试该系统可以在消费级硬件无故障的情况下实现高负载400d+的使用,下图升级过版本,进行了一次停机,实际在线时间已经将近500d。
后日谈
2024.7.14 修复链接引用错误,添加其他更新版本的可用插件。
2024.7.26 补充了新版本fpv需要跳过的步骤。完成
好耶!
猛猛安装插件。
-
补充一下code=237的一个可能的解决方案:
ps:我用的是腾讯云新加坡的服务器
pps:感谢楼主大大的保姆级教程!我用楼主的方法登录mirai,在完成图形验证码之后没有弹手机验证码,而是报错code=237(在非常用地登录或网络状态不佳什么的),换了个朋友的qq号依然如此
于是我在服务器上搭了shadowsocksr server,用我的安卓平板连上shadowsocksr并在平板qq登录机器人账号,登录时弹了图形验证码和手机验证码,成功登录平板qq
然后我把Sakura Login Solver装在平板上,同样连着shadowsocksr,将解图形验证码的步骤搬到安卓平板上,重新按楼主的方法登录mirai,成功登录mirai
我也不知道是哪步起了作用,所以给大家做个参考吧~
-
@sedatemickey-0 滑块所在的浏览器ip被ban了就会237,所以你单独给浏览器设置代理一样成(通常登录频繁就会237,不换ip等几小时或许也行)
-
@zhaodice 可我第一次用家里宽带解图形验证码就237了 QAQ
-
@sedatemickey-0 那你运气不好呗那你那个ip段可能有人批量登录,被tx一锅端了,正常
-
@zhaodice ok那我下次直接换ip试试 thanks
-
快捷方法 https://github.com/MrXiaoM/fpv/tree/trpgbot
即装即用,无需额外配置,发布版在 releases 中
个人测试用浏览器抓 ticket 都能登录 -
赞
-
大佬您好 我是小白,我根据您的教程操作,在登录的时候出现了以下内容:
2024-07-11 15:33:41 W/EncryptService.alert: Encrypt service was loaded: KFCFactory(config=file:///F:/Mirai/KFCFactory.json) 2024-07-11 15:33:41 W/EncryptService.alert: All outgoing message may be leaked by this service. 2024-07-11 15:33:41 W/EncryptService.alert: Use this service if and only if you trusted this service and the service provider. 2024-07-11 15:33:41 W/EncryptService.alert: Service details: 2024-07-11 15:33:41 W/EncryptService.alert: `- Jvm Class: class xyz.cssxsh.mirai.tool.KFCFactory 2024-07-11 15:33:41 W/EncryptService.alert: `- ClassLoader: JvmPluginClassLoader{fix-protocol-version-1.13.0.mirai2.jar} 2024-07-11 15:33:41 W/EncryptService.alert: `- Source: file:/F:/Mirai/plugins/fix-protocol-version-1.13.0.mirai2.jar 2024-07-11 15:33:41 W/EncryptService.alert: `- Protected Domain: ProtectionDomain (file:/F:/Mirai/plugins/fix-protocol-version-1.13.0.mirai2.jar <no signer certificates>) JvmPluginClassLoader{fix-protocol-version-1.13.0.mirai2.jar} <no principals> java.security.Permissions@1c32ea8 ( ("java.io.FilePermission" "F:\Mirai\plugins\fix-protocol-version-1.13.0.mirai2.jar" "read") ) 2024-07-11 15:33:41 I/KFCFactory: create EncryptService(id=QQ号), protocol=ANDROID_PAD(9.0.56) by fuqiuluo/unidbg-fetch-qsign from file:///F:/Mirai/KFCFactory.json 2024-07-11 15:33:41 W/Bot.QQ号: KFCFactory(config=file:///F:/Mirai/KFCFactory.json) is not yet supported EncryptService with bot Bot(QQ号) java.lang.UnsupportedOperationException: repeated create EncryptService(id=QQ号) at fix-protocol-version-1.13.0.mirai2.jar//xyz.cssxsh.mirai.tool.KFCFactory.createForBot(KFCFactory.kt:81) at net.mamoe.mirai.internal.network.components.EncryptServiceHolderImpl.<init>(EncryptServiceHolder.kt:49) at net.mamoe.mirai.internal.QQAndroidBot.createBotLevelComponents(QQAndroidBot.kt:288) at net.mamoe.mirai.internal.QQAndroidBot$defaultBotLevelComponents$2.invoke(QQAndroidBot.kt:192) at net.mamoe.mirai.internal.QQAndroidBot$defaultBotLevelComponents$2.invoke(QQAndroidBot.kt:191) at net.mamoe.mirai.utils.LateinitMutableProperty.getValue(LateinitMutableProperty.kt:47) at net.mamoe.mirai.internal.QQAndroidBot.getDefaultBotLevelComponents(QQAndroidBot.kt:191) at net.mamoe.mirai.internal.QQAndroidBot.createNetworkLevelComponents(QQAndroidBot.kt:300) at net.mamoe.mirai.internal.QQAndroidBot$createNetworkHandler$1.invoke(QQAndroidBot.kt:312) at net.mamoe.mirai.internal.QQAndroidBot$createNetworkHandler$1.invoke(QQAndroidBot.kt:305) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelectorKt$KeepAliveNetworkHandlerSelector$1.createInstance(AbstractKeepAliveNetworkHandlerSelector.kt:277) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelector.refreshInstance(AbstractKeepAliveNetworkHandlerSelector.kt:249) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelector.getCurrentInstanceOrCreate(AbstractKeepAliveNetworkHandlerSelector.kt:57) at net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler.getContext(SelectorNetworkHandler.kt:51) at net.mamoe.mirai.internal.AbstractBot$network$2.invoke(AbstractBot.kt:139) at net.mamoe.mirai.internal.AbstractBot$network$2.invoke(AbstractBot.kt:137) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at net.mamoe.mirai.internal.AbstractBot.getNetwork(AbstractBot.kt:137) at net.mamoe.mirai.internal.QQAndroidBot.getComponents(QQAndroidBot.kt:189) at net.mamoe.mirai.internal.AbstractBot.login(AbstractBot.kt:156) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.doLogin$suspendImpl(LoginCommandImpl.kt:40) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.doLogin$mirai_console(LoginCommandImpl.kt) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.handle(LoginCommandImpl.kt:99) at net.mamoe.mirai.console.command.BuiltInCommands$LoginCommand.handle(BuiltInCommands.kt:203) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113) at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108) at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:159) at kotlin.reflect.full.KCallables.callSuspendBy(KCallables.kt:74) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invokeSuspend(CommandReflector.kt:339) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invoke(CommandReflector.kt) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invoke(CommandReflector.kt) at net.mamoe.mirai.console.command.descriptor.CommandSignatureFromKFunctionImpl.call$suspendImpl(CommandSignature.kt:84) at net.mamoe.mirai.console.command.descriptor.CommandSignatureFromKFunctionImpl.call(CommandSignature.kt) at net.mamoe.mirai.console.internal.command.CommandManagerImplKt.executeCommandImpl(CommandManagerImpl.kt:168) at net.mamoe.mirai.console.command.CommandManager.executeCommand$suspendImpl(CommandManager.kt:131) at net.mamoe.mirai.console.command.CommandManager.executeCommand(CommandManager.kt) at net.mamoe.mirai.console.command.CommandManager$INSTANCE.executeCommand(CommandManager.kt) at net.mamoe.mirai.console.terminal.ConsoleThreadKt$startupConsoleThread$3.invokeSuspend(ConsoleThread.kt:187) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) 2024-07-11 15:33:41 I/Bot.3611284414: Bot cancelled: Bot closed 2024-07-11 15:33:41 E/console: java.net.SocketException: Connection reset java.net.SocketException: Connection reset at java.base/sun.nio.ch.NioSocketImpl.implRead(Unknown Source) at java.base/sun.nio.ch.NioSocketImpl.read(Unknown Source) at java.base/sun.nio.ch.NioSocketImpl$1.read(Unknown Source) at java.base/java.net.Socket$SocketInputStream.read(Unknown Source) at java.base/sun.security.ssl.SSLSocketInputRecord.read(Unknown Source) at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(Unknown Source) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(Unknown Source) at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source) at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at java.base/java.net.URL.openStream(Unknown Source) at kotlin.io.TextStreamsKt.readBytes(ReadWrite.kt:149) at fix-protocol-version-1.13.0.mirai2.jar//xyz.cssxsh.mirai.tool.KFCFactory.createForBot(KFCFactory.kt:112) at net.mamoe.mirai.internal.network.components.EncryptServiceHolderImpl.<init>(EncryptServiceHolder.kt:49) at net.mamoe.mirai.internal.QQAndroidBot.createBotLevelComponents(QQAndroidBot.kt:288) at net.mamoe.mirai.internal.QQAndroidBot$defaultBotLevelComponents$2.invoke(QQAndroidBot.kt:192) at net.mamoe.mirai.internal.QQAndroidBot$defaultBotLevelComponents$2.invoke(QQAndroidBot.kt:191) at net.mamoe.mirai.utils.LateinitMutableProperty.getValue(LateinitMutableProperty.kt:47) at net.mamoe.mirai.internal.QQAndroidBot.getDefaultBotLevelComponents(QQAndroidBot.kt:191) at net.mamoe.mirai.internal.QQAndroidBot.createNetworkLevelComponents(QQAndroidBot.kt:300) at net.mamoe.mirai.internal.QQAndroidBot$createNetworkHandler$1.invoke(QQAndroidBot.kt:312) at net.mamoe.mirai.internal.QQAndroidBot$createNetworkHandler$1.invoke(QQAndroidBot.kt:305) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelectorKt$KeepAliveNetworkHandlerSelector$1.createInstance(AbstractKeepAliveNetworkHandlerSelector.kt:277) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelector.refreshInstance(AbstractKeepAliveNetworkHandlerSelector.kt:249) at net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelector.getCurrentInstanceOrCreate(AbstractKeepAliveNetworkHandlerSelector.kt:57) at net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler.getContext(SelectorNetworkHandler.kt:51) at net.mamoe.mirai.internal.AbstractBot$network$2.invoke(AbstractBot.kt:139) at net.mamoe.mirai.internal.AbstractBot$network$2.invoke(AbstractBot.kt:137) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at net.mamoe.mirai.internal.AbstractBot.getNetwork(AbstractBot.kt:137) at net.mamoe.mirai.internal.AbstractBot.login(AbstractBot.kt:147) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.doLogin$suspendImpl(LoginCommandImpl.kt:40) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.doLogin$mirai_console(LoginCommandImpl.kt) at net.mamoe.mirai.console.internal.command.builtin.LoginCommandImpl.handle(LoginCommandImpl.kt:99) at net.mamoe.mirai.console.command.BuiltInCommands$LoginCommand.handle(BuiltInCommands.kt:203) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method.callMethod(CallerImpl.kt:97) at kotlin.reflect.jvm.internal.calls.CallerImpl$Method$Instance.call(CallerImpl.kt:113) at kotlin.reflect.jvm.internal.KCallableImpl.call(KCallableImpl.kt:108) at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod$kotlin_reflection(KCallableImpl.kt:159) at kotlin.reflect.full.KCallables.callSuspendBy(KCallables.kt:74) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invokeSuspend(CommandReflector.kt:339) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invoke(CommandReflector.kt) at net.mamoe.mirai.console.internal.command.CommandReflector$findSubCommands$6$1.invoke(CommandReflector.kt) at net.mamoe.mirai.console.command.descriptor.CommandSignatureFromKFunctionImpl.call$suspendImpl(CommandSignature.kt:84) at net.mamoe.mirai.console.command.descriptor.CommandSignatureFromKFunctionImpl.call(CommandSignature.kt) at net.mamoe.mirai.console.internal.command.CommandManagerImplKt.executeCommandImpl(CommandManagerImpl.kt:168) at net.mamoe.mirai.console.command.CommandManager.executeCommand$suspendImpl(CommandManager.kt:131) at net.mamoe.mirai.console.command.CommandManager.executeCommand(CommandManager.kt) at net.mamoe.mirai.console.command.CommandManager$INSTANCE.executeCommand(CommandManager.kt) at net.mamoe.mirai.console.terminal.ConsoleThreadKt$startupConsoleThread$3.invokeSuspend(ConsoleThread.kt:187) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
请问这种情况怎么解决?谢谢大佬 ;w;
-
@AkinoowariQMJ https://github.com/MrXiaoM/fpv/tree/trpgbot 试试看这个呢,这是fix-protocol-version-1.13.0.mirai2.jar的分支,把原来的fix-protocol-version-1.13.0.mirai2.jar先禁用掉
-
@zhaodice 谢谢大佬,我去试试(
w
) -
@zhaodice 谢谢大佬,登录上了!十分感谢!
-
This post is deleted! -
大佬大佬,按照您的教程操作,在为bot添加自动登录后启动mirai,出现一下信息,怎么办啊
2024-07-17 02:47:48 I/main: Backend: version 2.16.0, built on 2023-10-20 06:28:10.
2024-07-17 02:47:48 I/main: Frontend Terminal: version 2.16.0, provided by Mamoe Technologies
2024-07-17 02:47:48 I/main: Welcome to visit https://mirai.mamoe.net/
2024-07-17 02:47:48 E/main: Failed to init MiraiConsole.
net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for 'accounts' in 'AutoLogin'
value: pwd
^ at line 8, column 17at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:154) at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:181) at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:533) at net.mamoe.mirai.console.internal.data.PluginDataImpl$updaterSerializer$1.deserialize(PluginDataImpl.kt:88) at net.mamoe.mirai.console.internal.data.PluginDataImpl$updaterSerializer$1.deserialize(PluginDataImpl.kt:51) at net.mamoe.yamlkt.Yaml.decodeFromString(Yaml.kt:162) at net.mamoe.mirai.console.internal.data.MultiFilePluginDataStorageImpl.load(MultiFilePluginDataStorageImpl.kt:49) at net.mamoe.mirai.console.internal.data.builtins.ConsoleDataScopeImpl.addAndReloadConfig(ConsoleDataScopeImpl.kt:45) at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:276) at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:512) at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:182) at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:181) at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:59) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.itxtech.mcl.Utility.bootJars(Utility.java:86) at org.itxtech.mcl.Utility.bootJars(Utility.java:76) at org.itxtech.mcl.Utility.bootMirai(Utility.java:98) at org.itxtech.mcl.module.builtin.Boot.boot(Boot.java:113) at org.itxtech.mcl.module.ModuleManager.phaseBoot(ModuleManager.java:123) at org.itxtech.mcl.Loader.lambda$start$4(Loader.java:196) at org.itxtech.mcl.Loader.tryCatching(Loader.java:151) at org.itxtech.mcl.Loader.start(Loader.java:196) at org.itxtech.mcl.Loader.main(Loader.java:84)
Caused by: net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for '0' in 'kotlin.collections.ArrayList'
...密码内容, PLAIN 时为密码文本, MD5 时为 16 进制
^ at line 7, column 41at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:154) at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:181) at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:533) at kotlinx.serialization.internal.CollectionLikeSerializer.readElement(CollectionSerializers.kt:80) at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51) at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36) at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43) at net.mamoe.mirai.console.data.SerializableValue$Companion$serializableValueWith$$inlined$map$1.deserialize(serializerHelper.kt:171) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:179) ... 22 more
Caused by: net.mamoe.yamlkt.YamlDecodingException: Top-level decoder: deserializing nested class for 'password' in 'net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account'
kind: PLAIN
^ at line 6, column 18at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:154) at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:181) at net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig$Account$$serializer.deserialize(AutoLoginConfig.kt:31) at net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig$Account$$serializer.deserialize(AutoLoginConfig.kt:31) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:179) ... 29 more
Caused by: net.mamoe.yamlkt.YamlDecodingException: There must be a COLON between class key and value but found STRING for 'net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.Password'
kind: PLAIN
^ at line 6, column 12at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException(ContextualException.kt:154) at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException(Unknown Source) at net.mamoe.yamlkt.internal.YamlUtils__ContextualExceptionKt.contextualDecodingException$default(ContextualException.kt:128) at net.mamoe.yamlkt.internal.YamlUtils.contextualDecodingException$default(Unknown Source) at net.mamoe.yamlkt.internal.YamlDecoder$BlockClassDecoder.decodeElementIndex(YamlDecoder.kt:294) at net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig$Account$Password$$serializer.deserialize(AutoLoginConfig.kt:47) at net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig$Account$Password$$serializer.deserialize(AutoLoginConfig.kt:47) at net.mamoe.yamlkt.internal.YamlDecoder$AbstractDecoder.decodeSerializableElement(YamlDecoder.kt:179) ... 32 more
-
@sides 你可能是autologin文件内容的格式写的不对,你可以把密码脱敏掉后贴出来我们雅俗共赏一下
-
accounts:
-
账号, 现只支持 QQ 数字账号
account: 3660940892
password: db8a086d14410b6136cd7c58a6099c04331e55825d6ca92cac42187cbebfd87c密码种类, 可选 PLAIN 或 MD5
kind: PLAIN密码内容, PLAIN 时为密码文本, MD5 时为 16 进制
value: pwd账号配置. 可用配置列表 (注意大小写):
protocol: ANDROID_PHONE / ANDROID_PAD / ANDROID_WATCH / MACOS / IPAD
device: device.json
enable: true
heartbeatStrategy: STAT_HB / REGISTER / NONE
configuration:
protocol: ANDROID_PAD
device: device.json
enable: true
heartbeatStrategy: STAT_HB
-
-
@zhaodice 大佬我问了一下gpt,现在搞明白了password是一个包含两个子字段的字典,kind是指定密码类型,value才是实际的密码内容对吗
-
@sides 对啊,password: 下面别写东西
password: kind: PLAIN value: 填写这里,PLAIN代表你将要在这里写纯密码
-
@zhaodice 谢谢大佬,现在解决了
-
大佬,又出现了新的问题,Mirai Console 尝试加载 LuckPerms 插件时失败了,插件文件损坏
22:38:24 [INFO] Verifying "net.mamoe:mirai-console" v2.16.0
22:38:25 [INFO] Verifying "net.mamoe:mirai-console-terminal" v2.16.0
22:38:25 [INFO] Verifying "net.mamoe:mirai-core-all" v2.16.0
22:38:25 [INFO] Verifying "org.itxtech:mcl-addon" v2.1.1
22:38:26 [INFO] Verifying "org.bouncycastle:bcprov-jdk15on" v1.64
22:38:26 [INFO] Verifying "net.mamoe:chat-command" v0.6.0
22:38:26 [INFO] Verifying "io.github.karlatemp:luckperms" v2.10.0-dev-6+null
22:38:26 [ERROR] "io.github.karlatemp:luckperms" is corrupted.
22:38:26 [INFO] Updating "io.github.karlatemp:luckperms" to v2.10.0-dev-6+null
Downloading luckperms-2.10.0-dev-6+null.jar [==============================] 84 Downloading luckperms-2.10.0-dev-6+null.jar [==============================] 84 B
Downloading luckperms-2.10.0-dev-6+null.jar.sha1 [============================= Downloading luckperms-2.10.0-dev-6+null.jar.sha1 [==============================] 84 B
22:38:27 [ERROR] The local file "io.github.karlatemp:luckperms" is still corrupted, please check the network.
2024-07-17 22:38:27 I/main: Starting mirai-console...
2024-07-17 22:38:27 I/main:===================================[ Mirai console 2.16.0 ]===================================
| \ / \ \ | / \ |
| ▓▓\ / ▓▓\▓▓ ______ ______ \▓▓ ▓▓▓▓▓▓\ ______ _______ _______ ______ | ▓▓ ______
| ▓▓▓\ / ▓▓▓ / \ | | \ ▓▓ \▓▓/ | \ / / | ▓▓/
| ▓▓▓▓\ ▓▓▓▓ ▓▓ ▓▓▓▓▓▓\ \▓▓▓▓▓▓\ ▓▓ ▓▓ | ▓▓▓▓▓▓\ ▓▓▓▓▓▓▓\ ▓▓▓▓▓▓▓ ▓▓▓▓▓▓\ ▓▓ ▓▓▓▓▓▓
| ▓▓\▓▓ ▓▓ ▓▓ ▓▓ ▓▓ \▓▓/ ▓▓ ▓▓ ▓▓ | ▓▓ | ▓▓ ▓▓ | ▓▓\▓▓ | ▓▓ | ▓▓ ▓▓ ▓▓ ▓▓
| ▓▓ \▓▓▓| ▓▓ ▓▓ ▓▓ | ▓▓▓▓▓▓▓ ▓▓ ▓▓/ \ ▓▓__/ ▓▓ ▓▓ | ▓▓_\▓▓▓▓▓▓\ ▓▓__/ ▓▓ ▓▓ ▓▓▓▓▓▓▓▓
| ▓▓ \▓ | ▓▓ ▓▓ ▓▓ \▓▓ ▓▓ ▓▓\▓▓ ▓▓\▓▓ ▓▓ ▓▓ | ▓▓ ▓▓\▓▓ ▓▓ ▓▓\▓▓
\▓▓ \▓▓\▓▓\▓▓ \▓▓▓▓▓▓▓\▓▓ \▓▓▓▓▓▓ \▓▓▓▓▓▓ \▓▓ \▓▓\▓▓▓▓▓▓▓ \▓▓▓▓▓▓ \▓▓ \▓▓▓▓▓▓▓2024-07-17 22:38:27 I/main: Backend: version 2.16.0, built on 2023-10-20 06:28:10.
2024-07-17 22:38:27 I/main: Frontend Terminal: version 2.16.0, provided by Mamoe Technologies
2024-07-17 22:38:27 I/main: Welcome to visit https://mirai.mamoe.net/
2024-07-17 22:38:27 E/main: Failed to init MiraiConsole.
java.util.zip.ZipException: zip END header not found
at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1695)
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1703)
at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1541)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1504)
at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.init0(JvmPluginClassLoader.kt:304)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.init1(JvmPluginClassLoader.kt:296)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.<init>(JvmPluginClassLoader.kt:291)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.<init>(JvmPluginClassLoader.kt)
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN$Companion.newLoader(JvmPluginClassLoader.kt:431)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.extractPlugins(BuiltInJvmPluginLoaderImpl.kt:258)
at net.mamoe.mirai.console.internal.plugin.BuiltInJvmPluginLoaderImpl.listPlugins(BuiltInJvmPluginLoaderImpl.kt:72)
at net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader$BuiltIn.listPlugins(JvmPluginLoader.kt)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.listAndSortAllPlugins(PluginManagerImpl.kt:207)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.findAndSortAllPluginsUsingBuiltInLoaders(PluginManagerImpl.kt:153)
at net.mamoe.mirai.console.internal.plugin.PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders$mirai_console(PluginManagerImpl.kt:163)
at net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge.doStart$mirai_console(MiraiConsoleImplementationBridge.kt:303)
at net.mamoe.mirai.console.MiraiConsoleImplementation$Companion.start(MiraiConsoleImplementation.kt:512)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon(MiraiConsoleTerminalLoader.kt:182)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.startAsDaemon$default(MiraiConsoleTerminalLoader.kt:181)
at net.mamoe.mirai.console.terminal.MiraiConsoleTerminalLoader.main(MiraiConsoleTerminalLoader.kt:59)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.itxtech.mcl.Utility.bootJars(Utility.java:86)
at org.itxtech.mcl.Utility.bootJars(Utility.java:76)
at org.itxtech.mcl.Utility.bootMirai(Utility.java:98)
at org.itxtech.mcl.module.builtin.Boot.boot(Boot.java:113)
at org.itxtech.mcl.module.ModuleManager.phaseBoot(ModuleManager.java:123)
at org.itxtech.mcl.Loader.lambda$start$4(Loader.java:196)
at org.itxtech.mcl.Loader.tryCatching(Loader.java:151)
at org.itxtech.mcl.Loader.start(Loader.java:196)
at org.itxtech.mcl.Loader.main(Loader.java:84)
Suppressed: java.lang.RuntimeException: Failed to initialize new JvmPluginClassLoader, file=D:\mirai\chmod -R 777\root\mirai\mcl-2.1.2\plugins\luckperms-2.10.0-dev-6+null.jar
at net.mamoe.mirai.console.internal.plugin.JvmPluginClassLoaderN.init1(JvmPluginClassLoader.kt:298)
... 25 more