Как обойти блокировку бота flood control RetryAfter в aiogram?
Пишу бота для телеграм, который кидает картинки в группу. Иногда происходит ситуация, что картинок много и бот выхватывает ошибку "flood control". Я понимаю, что можно обработать ошибку try:except или dp.error_handler и бот не прекратит работу, но при возникновении этой ошибки он и прекратит отправлять картинки на время указанное в сообщении.
Можно ли как-то предотвратить вызов этой ошибки, к примеру поставив asyncio.sleep(1) или больше по времени? Есть ли какой-то способ?
Часть кода:
...
for i in photo_list:
photo = types.InputFile(i)
try:
await bot.send_photo(chat_id, photo=photo)
except RetryAfter:
await asyncio.sleep(1)
...
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
У исключения RetryAfter есть поле timeout
Я бы сделал задержку на значение этого поля
Пример:
for i in photo_list:
photo = types.InputFile(i)
try:
await bot.send_photo(chat_id, photo=photo)
except RetryAfter as e:
await asyncio.sleep(e.timeout)