设备信息device.json怎么用啊?
-
有看到官网教程是
// Kotlin deviceInfo = { bot -> /* create device info */ } // Java setDeviceInfo(bot -> /* create device info */)
但是这里的
create device info
是怎么操作呢?
有尝试过手动去创建DeviceInfo这个类,但感觉很麻烦,而且DeviceInfo.Version这个类中还有个变量sdk,但是生成的json文件里边没有,如下图所示
最后还有一个问题,我能不能在登录失败时直接抛出异常,而不是现在的等待验证码?因为我想直接放在服务器上,如果失败直接告诉用户,然后让用户去操作
-
文档里已经有直接的例子
https://github.com/mamoe/mirai/blob/dev/docs/Bots.md#配置-botDeviceInfo 有个 random 方法随机生成
如果你想生成更好的设备信息可以看这个
https://github.com/cssxsh/mirai-device-generator -
@cssxsh 谢谢你的答复!
然后现在我大概明白了处理登录失败可以重写
LoginSolver
第一个问题不是很清楚,就是我现在有了device.json,我要怎么用呢?就是官方文档里边的// Kotlin deviceInfo = { bot -> /* create device info */ } // Java setDeviceInfo(bot -> /* create device info */)
里边的
create device info
这个怎么去创建?如果是新建一个类的话,我保存下来的json文件中
device.json[data][version]
下边是没有sdk值的,但是新建类需要这个值,截图贴在上边了 -
fileBasedDeviceInfo 可以指定路径
-
@cssxsh 我直接设置
fileBasedDeviceInfo();
代码 如下Bot bot = BotFactory.INSTANCE.newBot(qqId, qqPwd, new BotConfiguration() {{ fileBasedDeviceInfo(); }});
上午登录成功了,下午的时候换了台设备,同步了device.json,但是下午报错
2022-10-24 14:42:17 V/Net 2190915232: Send: wtlogin.login(9:password-login) 2022-10-24 14:42:17 W/Net 2190915232: Exception in resumeConnection. net.mamoe.mirai.internal.network.components.LoginFailedExceptionAsNetworkException: Error(bot=Bot(2190915232), code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo= ) at net.mamoe.mirai.internal.network.handler.CommonNetworkHandler$StateConnecting$startState$2.invokeSuspend(CommonNetworkHandler.kt:248) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:33) at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) 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) Caused by: net.mamoe.mirai.network.WrongPasswordException: Error(bot=Bot(2190915232), code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo= )
-
@404-Error 在 设备信息device.json怎么用啊? 中说:
net.mamoe.mirai.internal.network.components.LoginFailedExceptionAsNetworkException: Error(bot=Bot(2190915232), code=235, title=温馨提示, message=当前QQ版本过低,请升级至最新版本后再登录。点击进入下载页面, errorInfo= )
被腾讯检测风险了呗
换登录协议 PAD,然后 机器人手机端保持登录,应该会弹验证
(2.13.0-RC) -
@cssxsh 额,不太妙,本地修改登录协议为Android Pad,成功登录了,然后迁移到服务器的时候
- 忘了复制device.json,服务器提示下载最新版手机QQ,此时本地还能正常登录
- 复制device.json到服务器还是不行
- 隔了几个小时***
- 本地无法登录,提示下载最新版手机QQ
- 修改登录协议为iPad,提示下载最新版手机QQ
以上过程中手机QQ在线,没收到验证
版本是2.13.0-RC现在有办法解决这个问题吗?
-
@404-Error 搞定了,记录一下我的解决方案,比较佛系
- 手机QQ双开,在新的QQ上重新登录账号,会有一个滑动验证码和短信验证码的过程
- 在设备管理中删除之前的mirai设备
- 删除项目里边的device.json
- 重新登录,本地登录失败
- 看到手机QQ上有一个安全登录检查,处于没打开的状态→改成打开
- 电脑重新登录,成功
- device.json复制到服务器,尝试登录,失败
- 把cache文件夹下边的全复制过去(这一步感觉好像没啥用?)
- 隔了一会,服务器测试登录成功
我现在的心情:
这代码不能跑,为什么?
这代码能跑,为什么?稀里糊涂地就成功了
-