Запуск Telethon на Heroku

Я пытаюсь создать приложение, которое будет работать постоянно (т.е. каждую минуту отправлять мне информацию на мою учетную запись Telethon), и выяснил, что лучший способ сделать это - разместить его на heroku. Я также использую Flask - и я новичок во всех трех инструментах. Вот что у меня есть:

from twx.botapi import TelegramBot, ReplyKeyboardMarkup
from telethon import TelegramClient
from telethon.tl.types.input_peer_chat import InputPeerChat
import time
from flask import Flask, render_template, request, redirect

app = Flask(__name__)
chat_id = 40398****
api_id = '10****'
api_hash = 'bae9b**********************'

client = TelegramClient('ID_1', api_id=api_id, api_hash=api_hash)
client.connect()
chat = InputPeerChat(chat_id)

@app.route('/')
def starting_page():
    global client

    if not client.is_user_authorized():
        client.send_code_request('+1234567890') # this is a phone number

    return render_template('index.html', author=author)
.
.
.
#if __name__ == '__main__': # this seems to run automatically on heroku so I commented it out
#    app.run()

Дело в том, что этот код создает две ошибки, и я не понимаю, почему. 1. telethon.errors.rpc_errors_303.PhoneMigrateError: (PhoneMigrateError(...), 'Телефонный номер, который пользователь пытается использовать для авторизации, связан с DC 4.') 2. telethon.errors.rpc_errors_420.FloodWaitError: (FloodWaitError(...), "Требуется ожидание 68533 секунд")

Я понятия не имею, как решить оба из них, тем более, что скрипт работает при запуске независимо и через локальный сервер. Проблема в том, когда пытаешься привезти геройку.

Спасибо!

Полный список ошибок:

2017-08-19T13:00:39.644337+00:00 app[web.1]: [2017-08-19 13:00:39,641] ERROR in app: Exception on / [GET]
2017-08-19T13:00:39.644346+00:00 app[web.1]: Traceback (most recent call last):
2017-08-19T13:00:39.644349+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_client.py", line 205, in invoke
2017-08-19T13:00:39.644350+00:00 app[web.1]:     request, updates=updates
2017-08-19T13:00:39.644351+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_bare_client.py", line 276, in invo
2017-08-19T13:00:39.644352+00:00 app[web.1]:     self._sender.receive(request, updates=updates)
2017-08-19T13:00:39.644352+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 109, in ree
2017-08-19T13:00:39.644354+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 207, in _pss_msg
2017-08-19T13:00:39.644354+00:00 app[web.1]:     return self._handle_rpc_result(msg_id, sequence, reader)
2017-08-19T13:00:39.644353+00:00 app[web.1]:     remote_msg_id, remote_seq, reader, updates)
2017-08-19T13:00:39.644356+00:00 app[web.1]:     raise error
2017-08-19T13:00:39.644357+00:00 app[web.1]: telethon.errors.rpc_errors_303.PhoneMigrateError: (PhoneMigrateError(...), 'The phone number a user is tryin use for authorization is associated with DC 4.')
2017-08-19T13:00:39.644358+00:00 app[web.1]:
2017-08-19T13:00:39.644355+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 355, in _he_rpc_result
2017-08-19T13:00:39.644359+00:00 app[web.1]: During handling of the above exception, another exception occurred:
2017-08-19T13:00:39.644359+00:00 app[web.1]:
2017-08-19T13:00:39.644360+00:00 app[web.1]: Traceback (most recent call last):
2017-08-19T13:00:39.644360+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
2017-08-19T13:00:39.644361+00:00 app[web.1]:     response = self.full_dispatch_request()
2017-08-19T13:00:39.644362+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
2017-08-19T13:00:39.644362+00:00 app[web.1]:     rv = self.handle_user_exception(e)
2017-08-19T13:00:39.644363+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
2017-08-19T13:00:39.644363+00:00 app[web.1]:     reraise(exc_type, exc_value, tb)
2017-08-19T13:00:39.644364+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
2017-08-19T13:00:39.644365+00:00 app[web.1]:     raise value
2017-08-19T13:00:39.644365+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
2017-08-19T13:00:39.644366+00:00 app[web.1]:     rv = self.dispatch_request()
2017-08-19T13:00:39.644367+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
2017-08-19T13:00:39.644367+00:00 app[web.1]:     return self.view_functions[rule.endpoint](**req.view_args)
2017-08-19T13:00:39.644368+00:00 app[web.1]:   File "/app/telegram_bot_working.py", line 33, in starting_page
2017-08-19T13:00:39.644368+00:00 app[web.1]:     client.send_code_request('+1234567890')
2017-08-19T13:00:39.644369+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_client.py", line 259, in send_codeuest
2017-08-19T13:00:39.644370+00:00 app[web.1]:     SendCodeRequest(phone_number, self.api_id, self.api_hash))
2017-08-19T13:00:39.644370+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_client.py", line 222, in invoke
2017-08-19T13:00:39.644371+00:00 app[web.1]:     return self.invoke(request)
2017-08-19T13:00:39.644372+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_client.py", line 205, in invoke
2017-08-19T13:00:39.644372+00:00 app[web.1]:     request, updates=updates
2017-08-19T13:00:39.644373+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/telegram_bare_client.py", line 276, in invo
2017-08-19T13:00:39.644374+00:00 app[web.1]:     self._sender.receive(request, updates=updates)
2017-08-19T13:00:39.644375+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 109, in ree
2017-08-19T13:00:39.644375+00:00 app[web.1]:     remote_msg_id, remote_seq, reader, updates)
2017-08-19T13:00:39.644376+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 207, in _pss_msg
2017-08-19T13:00:39.644376+00:00 app[web.1]:     return self._handle_rpc_result(msg_id, sequence, reader)
2017-08-19T13:00:39.644377+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/telethon/network/mtproto_sender.py", line 355, in _he_rpc_result
2017-08-19T13:00:39.644378+00:00 app[web.1]:     raise error
2017-08-19T13:00:39.644383+00:00 app[web.1]: telethon.errors.rpc_errors_420.FloodWaitError: (FloodWaitError(...), 'A wait of 68533 seconds is required.')

1 ответ

Я думал, что этот способ запуска на Heroku был немного грязным. Вместо этого я создал AlchemySession, чтобы Telethon сохранял свои данные в базе данных Heroku Postgres.

Вы можете получить Heroku DATABASE_URL или вставьте его вместе и передайте в AlchemySessionContainer, Была ошибка, которая мешала этому работать, но это было только что исправлено.

Другие вопросы по тегам