clansty / Q2TG

QQ 与 Telegram 群相互转发的 bot
https://t.me/Q2TGbot
GNU Affero General Public License v3.0
748 stars 77 forks source link

针对TG新的验证码防泄漏逻辑导致q2tg无法登录的临时解决方案 #80

Closed ERR0RPR0MPT closed 3 months ago

ERR0RPR0MPT commented 1 year ago

一样的问题,更换了两个服务器也无法解决问题。

[2023-01-03T20:20:05.809] [ERROR] SetupService - 0 - RPCError: 400: PHONE_CODE_EXPIRED (caused by auth.SignIn)
    at RPCMessageToError (/app/node_modules/telegram/errors/index.js:28:12)
    at MTProtoSender._handleRPCResult (/app/node_modules/telegram/network/MTProtoSender.js:485:58)
    at MTProtoSender._processMessage (/app/node_modules/telegram/network/MTProtoSender.js:410:15)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async MTProtoSender._recvLoop (/app/node_modules/telegram/network/MTProtoSender.js:386:17) {
  code: 400,
  errorMessage: 'PHONE_CODE_EXPIRED'
}

经过一段时间的研究,发现此问题是 Telegram 对验证码检查做了升级,貌似也会检查目前 q2tg 的使用内联键盘输入验证码的方案?总之,可以通过以下的解决方案临时解决该问题。

临时解决方案

下载修改版本代码

假设 /root/q2tg 为运行目录,将文件解压到 /root/q2tg/SetupService.js

Snipaste_2023-01-04_09-04-06

删除所有已经构建好的容器:docker-compose down

修改 docker-compose.yaml,在 q2tg 的 volumn 中添加一行:

- ./SetupService.js:/app/build/services/SetupService.js

例如:

q2tg:
    ...

    volumes:
          - ./data:/app/data
          - ./SetupService.js:/app/build/services/SetupService.js

使用 docker-compose up -d 构建容器。

成功后,使用 docker exec -it q2tg /bin/sh 进入容器,之后执行 yarn start ,这时不要关闭 Shell 窗口。

此时会弹出 /setup 安装提示,在 Telegram 客户端上按照提示正常登录 QQ,一直到登录 TG UserBot 并需要接收验证码时,

如图所示:

Snipaste_2023-01-04_09-09-35

此时回到 Shell 窗口,输入获取到的验证码,回车。

Snipaste_2023-01-04_09-58-06

之后再输入两次验证密码就可以成功登录了。

Originally posted by @ERR0RPR0MPT in https://github.com/Clansty/Q2TG/issues/76#issuecomment-1370392669

76 #78

magisk317 commented 1 year ago

登录确实好使了,想问下这个终端怎么退出呢,总这样挂着会断吧

Seele-Vollerei32 commented 1 year ago

登录确实好使了,想问下这个终端怎么退出呢,总这样挂着会断吧

直接退出后docker compose up就好了, 已验证的数据会放到psql的 似乎题主的方法不能让docker shell退出后保持登陆状态, 可以在关闭shell后重新用原来方式登陆, 此时telegram便不需要验证码.

magisk317 commented 1 year ago

登录确实好使了,想问下这个终端怎么退出呢,总这样挂着会断吧

~ 直接退出后docker compose up就好了, 已验证的数据会放到psql的 ~ 似乎题主的方法不能让docker shell退出后保持登陆状态, 可以在关闭shell后重新用原来方式登陆, 此时telegram便不需要验证码.

嗯,登录现在没问题了,想问下怎么切换账号啊,好像没有退出机制,除了删除配置文件,还有其他办法吗?

ccmuyuu commented 1 year ago

在rainbowcat中由于使用nix似乎进不去容器了) 可以使用我修改过的仓库进行以上登录操作 登录操作同上,只需要将上面的docker exec -it main_q2tg /bin/sh改为docker exec -it main_q2tg /nix/store/avi27afmqm6a7494jafnmih4q8fa6bzl-start即可(nix具体路径可通过docker inspect main_q2tg中的cmd项查看)

ERR0RPR0MPT commented 1 year ago

~ 直接退出后docker compose up就好了, 已验证的数据会放到psql的 ~

我这边在 docker shell 退出之后重启容器就可以保持登录状态,没做其他操作(

clansty commented 1 year ago

我今天试了一下,完全没有问题。不知道为什么你们不行

VEWION commented 1 year ago

我今天试了一下,完全没有问题。不知道为什么你们不行

完全全新安装依然是不行,是过了QQ登录后到TG验证码这一步才报错,TG直接没收到任何验证码

main_q2tg        | [2023-02-23T17:16:32.472] [INFO] - [Running gramJS version 2.15.0]
main_q2tg        | [2023-02-23T17:16:32.472] [DEBUG] TelegramSession - undefined - Session 不存在,创建
main_q2tg        | [2023-02-23T17:16:35.607] [ERROR] Main - UnhandledException:  Error: Auth key unset
main_q2tg        |     at MTProtoState.encryptMessageData (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/network/MTProtoState.js:142:19)
main_q2tg        |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
main_q2tg        |     at async MTProtoSender._sendLoop (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/network/MTProtoSender.js:327:20)
main_q2tg        | [2023-02-23T17:16:51.361] [ERROR] - [Error: Not connected]
main_q2tg        | [2023-02-23T17:16:51.361] [WARN] - [Connection closed while receiving data...]
main_q2tg        | [2023-02-23T17:16:52.716] [ERROR] - [Error while trying to reconnect]
main_q2tg        | RPCError: 401: AUTH_KEY_UNREGISTERED (caused by users.GetUsers)
main_q2tg        |     at RPCMessageToError (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/errors/index.js:28:12)
main_q2tg        |     at MTProtoSender._handleRPCResult (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/network/MTProtoSender.js:517:58)
main_q2tg        |     at MTProtoSender._processMessage (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/network/MTProtoSender.js:442:15)
main_q2tg        |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
main_q2tg        |     at async MTProtoSender._recvLoop (/nix/store/d51ysfyzxym4lqakl0qch1i3fciwnwaj-q2tg/libexec/q2tg/node_modules/telegram/network/MTProtoSender.js:418:17) {
main_q2tg        |   code: 401,
main_q2tg        |   errorMessage: 'AUTH_KEY_UNREGISTERED'
main_q2tg        | }
kpzhao commented 1 year ago

新安装依然是不行,是过了QQ登录后到TG验证码这一步才报错,TG直接

同问

hsabbjkf commented 1 year ago

更换新版本时 未在其他设备上登录Telegram,现在导致无法接收到验证 怎么处理这事情?未在其他地方或设备上登录 ,每次登入提示是代码发其他登入设备上

clansty commented 1 year ago

那你和 bot 发消息的这个帐号呢 让你登录的就是这个帐号

hsabbjkf commented 1 year ago

那你和 bot 发消息的这个帐号呢 让你登录的就是这个帐号

登录的86手机账号,就是没有短信验证码,说发送至设备上,现在是没有在其他设备上登录,有啥好办法