Задать вопрос
@AlexSn2020

Почему прерывается работа бота?

Здравствуйте! Проблема следующая: при запуске бот работает нормально некоторое время, но потом, когда к нему не обращаешься минут 10-15 вылетает ошибка:
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))

Не подскажете в чём проблема? Запускаю у себя на компе, может, если выложить на хостинг, не будет вылетать ошибка?
  • Вопрос задан
  • 7117 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
Это проблема на стороне библиотеки telebot'а. Выхода тут два:

1) Ставишь запуск программы с помощью systemd утилиты. В ней в настройке [service] укажи Restart=on-failure. В этом случае если скрипт завершится, то systemd его перезапустит. Ну или поставь перезапуск каждые 30-60 минут.

2) Переходишь и переписываешь на aiogram. В 2015-2017 годах, возможно, либа telebot была актуальна, но прогресс не стоит на месте. А telebot, увы, стоит. Кривая реализация поллинга, проблемный next_step_handler, медленная поддержка новых версий Bot API и т.д.

Аргументы для перехода на aiogram:

  1. это полноценный фреймворк, т.е. позволяет сделать больше полезных вещей;
  2. асинхронный, что делает его быстрее в некоторых задачах;
  3. поддерживается Python 3.7+ и выше, что сподвигнет обновить свой старенький интерпретатор и использовать новые возможности языка;
  4. множество встроенных «помощников» (синтаксический «сахар»), улучшающих читабельность кода;
  5. оперативные обновления (поддержка новых опросов появилась в тот же день, что и в самом Bot API);
  6. русскоязычный чат поддержки и обсуждений, где сидит, в том числе, и сам разработчик фреймворка;
  7. мой любимый пункт: нормально работающий поллинг.


(https://mastergroosha.github.io/telegram-tutorial/...

Лично я выбрал второй путь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@fanepka
Работаю на Python
Возьми в try/except и поставь таймер

try:
     #Твой код

except:
     time.sleep(10) # Таймер на 10 секунд
Ответ написан
Комментировать
@skilet16
while True:
    try:
        bot.polling(none_stop=True)

    except Exception as e:
        print(e) 
      
        time.sleep(15)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы