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



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

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开发工具

在本地环境中,内置的input运行良好,因为您可以访问终端并提供输入。

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

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

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

最新更新