Heroku 上的 Telegram 机器人请求用户输入的问题

Posted

技术标签:

【中文标题】Heroku 上的 Telegram 机器人请求用户输入的问题【英文标题】:Issue with request for user input from Telegram bot on Heroku 【发布时间】:2021-09-09 13:02:35 【问题描述】:

我正在尝试在 Heroku 上部署这个 Telegram bot*:https://github.com/radinshayanfar/TGCopyBot。该机器人首先需要登录我的帐户,这需要一个登录代码发送到我已经登录的设备上。当从终端本地运行机器人时,它会请求用户输入,Enter code:,我在终端中输入登录代码并按 Enter,然后机器人继续工作。但是在 Heroku 上部署机器人并运行测功机后,它失败了,这显示在日志中:

2021-06-26T12:55:33.312544+00:00 app[worker.1]: Enter code:Traceback (most recent call last):
2021-06-26T12:55:33.312546+00:00 app[worker.1]:   File "/app/app/main.py", line 77, in <module>
2021-06-26T12:55:33.312729+00:00 app[worker.1]:     tg.login()
2021-06-26T12:55:33.312730+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/telegram/client.py", line 493, in login
2021-06-26T12:55:33.312946+00:00 app[worker.1]:     result = actions[authorization_state]()
2021-06-26T12:55:33.312948+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/telegram/client.py", line 585, in _send_telegram_code
2021-06-26T12:55:33.313163+00:00 app[worker.1]:     code = input('Enter code:')
2021-06-26T12:55:33.313168+00:00 app[worker.1]: EOFError: EOF when reading a line
2021-06-26T12:55:33.373308+00:00 heroku[worker.1]: Process exited with status 1
2021-06-26T12:55:33.427790+00:00 heroku[worker.1]: State changed from up to crashed

然后它可能会再次自动启动机器人,然后继续崩溃并输出与上述相同的错误。这里有什么问题,如何解决?

如果问题是它对登录代码的请求,那么我确实会在其他设备上收到登录代码,但是如何将登录代码提供给机器人?更一般地说,您如何响应部署在 Heroku 上的任何机器人的用户输入请求?

*不是真正的使用@BotFather 制作的 Telegram 机器人;它只是使用 Telegram API 开发工具

【问题讨论】:

【参考方案1】:

在您的本地环境中,内置的 input 可以正常工作,因为您可以访问终端并且可以提供输入。

在 Heroku 上没有这样的选项,因此该命令返回 EOFError 异常,因为该函数在未读取任何内容的情况下达到文件结束条件 (EOF)。

一种可能的解决方案可能是要求用户通过 Telegram Bot 输入login code,例如作为用户开始聊天后的第一步。

【讨论】:

【参考方案2】:

似乎问题在于用户输入请求,并且用户无法像在终端上那样直接在 Heroku 上输入任何内容。可以修改代码以接受在这种情况下作为环境变量输入的内容,例如使用会话字符串:https://docs.pyrogram.org/topics/storage-engines#session-strings、https://docs.telethon.dev/en/latest/concepts/sessions.html#string-sessions

【讨论】:

以上是关于Heroku 上的 Telegram 机器人请求用户输入的问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP telegram bot:错误的请求:找不到编辑消息

MAVEN 上的 Java BOT(带有 JDA 库)在 Heroku 上运行

如何向 Telegram bot API 发送请求?

Telegram 向 webhook 发送重复的 POST JSON 请求

Telegram Bot 收到“错误请求:消息文本为空”

Telegram bot api:错误代码 429,错误:请求太多:稍后重试