@antinatalismmm

Почему падает бот?

Сам бот представляет из себя простой скрипт по удалению фотографий определенного размера. Без хостинга, запускаю со своего IP. Сам код:

import telebot
import time
import types
import requests
import os, sys
from requests.exceptions import ConnectionError, ReadTimeout

bot = telebot.TeleBot('token')

@bot.message_handler(content_types=['photo'])
def check_image_size(message):
    chat_id = message.chat.id
    photo = message.photo[-1]
    if photo.width == 800 and photo.height == 494:
        bot.delete_message(chat_id, message.message_id)

@bot.channel_post_handler(content_types=['photo'])
def check_channel_image_size(message):
    chat_id = message.chat.id
    photo = message.photo[-1]
    if photo.width == 800 and photo.height == 494:
        bot.delete_message(chat_id, message.message_id)

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, "Ok go")

bot.infinity_polling(timeout=10, long_polling_timeout = 5))

Через несколько часов бот перестает функционировать и выдает ошибку в несколько десятков строк формата:

File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 533, in send
    raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.telegram.org', port=443): Read timed out. (read timeout=10)


Пробовал менять
bot.infinity_polling(timeout=10, long_polling_timeout = 5))
на bot.polling(none_stop=true, interval=0) и на стандартный bot.polling(). Итог один - это прекращение работы через несколько часов. В чем может быть причина этой ошибки?
  • Вопрос задан
  • 812 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Рвётся коннект до телеграмма. Сеть - штука ненадёжная, может у провайдера админ пьяный, может, контакт плохой, может, РКН балуется.
Допиши скрипт, чтобы при ошибке соединения бот перезапускался.
Я бы начал с чего-то типа
import time
from requests.exceptions import RequestException

while True:
    try:
        bot.infinity_polling(timeout=10, long_polling_timeout = 5))
    except RequestException as err:
        print(err)
        print('* Connection failed, waiting to reconnect...')
        time.sleep(15)
        print('* Reconnecting.')
Ответ написан
@maximq
QA Engineer
Оставьте первый вариант, изменив таймаут на 1.5 мин:
bot.infinity_polling(timeout=90, long_polling_timeout = 5))

+ не помешает добавить обработку исключения

Ошибка существует давно и связана с нагрузкой сети вашего оператора/телеграмма
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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