MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    设备信息device.json怎么用啊?

    开发交流
    device.json 登录问题
    2
    9
    1326
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 4
      404-Error 最后由 编辑

      有看到官网教程是

      // Kotlin
      deviceInfo = { bot ->  /* create device info */   }
      
      // Java
      setDeviceInfo(bot -> /* create device info */)
      

      但是这里的create device info是怎么操作呢?
      有尝试过手动去创建DeviceInfo这个类,但感觉很麻烦,而且DeviceInfo.Version这个类中还有个变量sdk,但是生成的json文件里边没有,如下图所示
      3f15fe5c-5fd6-4832-9cea-13a751fc80f6-缺少变量.png

      最后还有一个问题,我能不能在登录失败时直接抛出异常,而不是现在的等待验证码?因为我想直接放在服务器上,如果失败直接告诉用户,然后让用户去操作

      1 条回复 最后回复 回复 引用 0
      • cssxsh
        cssxsh 最后由 cssxsh 编辑

        文档里已经有直接的例子
        https://github.com/mamoe/mirai/blob/dev/docs/Bots.md#配置-bot

        DeviceInfo 有个 random 方法随机生成

        https://github.com/mamoe/mirai/blob/1d6e6ea67d4c09bc2026c6c4f047491a579b7c36/mirai-core-api/src/commonMain/kotlin/utils/DeviceInfo.kt#L120

        如果你想生成更好的设备信息可以看这个
        https://github.com/cssxsh/mirai-device-generator

        4 1 条回复 最后回复 回复 引用 0
        • 4
          404-Error @cssxsh 最后由 编辑

          @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值的,但是新建类需要这个值,截图贴在上边了

          cssxsh 1 条回复 最后回复 回复 引用 0
          • cssxsh
            cssxsh @404-Error 最后由 编辑

            @404-Error

            fileBasedDeviceInfo 可以指定路径

            4 1 条回复 最后回复 回复 引用 1
            • 4
              404-Error @cssxsh 最后由 编辑

              @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= )
              
              cssxsh 1 条回复 最后回复 回复 引用 0
              • cssxsh
                cssxsh @404-Error 最后由 编辑

                @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)

                4 1 条回复 最后回复 回复 引用 1
                • 4
                  404-Error @cssxsh 最后由 编辑

                  @cssxsh 额,不太妙,本地修改登录协议为Android Pad,成功登录了,然后迁移到服务器的时候

                  1. 忘了复制device.json,服务器提示下载最新版手机QQ,此时本地还能正常登录
                  2. 复制device.json到服务器还是不行
                  3. 隔了几个小时***
                  4. 本地无法登录,提示下载最新版手机QQ
                  5. 修改登录协议为iPad,提示下载最新版手机QQ

                  以上过程中手机QQ在线,没收到验证
                  版本是2.13.0-RC

                  现在有办法解决这个问题吗?

                  4 1 条回复 最后回复 回复 引用 0
                  • 4
                    404-Error @404-Error 最后由 编辑

                    @404-Error 搞定了,记录一下我的解决方案,比较佛系

                    1. 手机QQ双开,在新的QQ上重新登录账号,会有一个滑动验证码和短信验证码的过程
                    2. 在设备管理中删除之前的mirai设备
                    3. 删除项目里边的device.json
                    4. 重新登录,本地登录失败
                    5. 看到手机QQ上有一个安全登录检查,处于没打开的状态→改成打开
                    6. 电脑重新登录,成功
                    7. device.json复制到服务器,尝试登录,失败
                    8. 把cache文件夹下边的全复制过去(这一步感觉好像没啥用?)
                    9. 隔了一会,服务器测试登录成功

                    我现在的心情:
                    这代码不能跑,为什么?
                    这代码能跑,为什么?

                    稀里糊涂地就成功了

                    cssxsh 1 条回复 最后回复 回复 引用 0
                    • cssxsh
                      cssxsh @404-Error 最后由 编辑

                      @404-Error 在 设备信息device.json怎么用啊? 中说:

                      把cache文件夹下边的全复制过去(这一步感觉好像没啥用?)

                      cache 文件夹里面有登录凭证

                      1 条回复 最后回复 回复 引用 1
                      • 1 / 1
                      • First post
                        Last post
                      Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact