@aygumov

Что делать если юзер-бот получает очень много сообщений?

Есть обычный юзер бот (на библиотеке pyrogram) который выполняет какую-то специально заданную ему задачу, а именно в качестве примера обычную обработку сообщений:

@app.on_message()
async def messages(client, message):
    print(message.text)


Всё бы вроде хорошо, и код реально выводит все полученные сообщения. Но, проблема начинается с того момента как юзер-бот начинает получать очень много сообщений и следовательно начинает спамить в консоль socket.send() raised exception. или [10] Retrying "updates.GetChannelDifference" due to: Request timed out.

В принципе понятно что проблема возникает в самой библиотеки pyrogram в методе GetChannelDifference(), ведь на сколько я знаю он не может обрабатывать больше 100 сообщений в минуту для аккаунта пользователя.

Как можно решить эту проблему? Может быть нужно установить специальный счётчик который будет перезапускать сам клиент если в минуту было отправлено больше положенного сообщений. Но и тут возникает проблема, ведь после перезапуска клиента app.restart() бот просто перестаёт реагировать на какие-либо события.
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@rPman
разум подсказывает что можно модифицировать код client.py таким образом, чтобы не каждый update генерировал вызов GetChannelDifference, пропускать если с предыдущего раза прошло не меньше X миллисекунд (например секунда) то запускать/обновлять асинхронный таймер запуска этого update принудительно, чтобы обновление все же было вызвано

так же GetChannelDifference вызывает метод MessageRange(min_id=update.message.id,max_id=update.message.id) очивидно сделано неправильно, этот метод грузит только ОДНО сообщение, а нужно сохранять id старого сообщения и делать min_id равным им.

в результате обновления будут запаздывать на секунду, если они слишком частые, но вызываться будут не чаще

p.s. в этом сила опенсорс, есть ошибка, ее можно найти, понять исправить и по возможности отправить патч в менйстрим
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы