Aiogram. Throttling. Как сделать так, чтобы таймер антифлуда aiogram не возобновлялся при повторном использовании команды?

Когда пользователь отправляет команду, у нее устанавливается указанная задержка (к примеру 10 секунд). Если пользователь повторно выполняет эту команду, то задержка в 10 секунд возобновляется и ему снова надо ждать 10 секунд. Я хочу сделать так, чтобы даже после нескольких раз использований команды, задержка не возобновлялась.

Попробовал это реализовать следующим образом, но rate не меняется, хотя, казалось бы, должен:

    try:
        await dispatcher.throttle(key, rate=limit) #устанавливаем задержку команды.
        print(limit, key)
    except Throttled as t:
        print('Old', t)
        t.rate = limit - t.delta  # обновляем задержку для указанной команды: 
                                  # изначальное время - прошедшее время = оставшееся 
                                  # время.
        print('New', t)
        # Execute action

        await self.message_throttled(message, t)

        # Cancel current handler
        raise CancelHandler()

Вывод: Limit (rate) не меняется

Old Rate limit exceeded! (Limit: 10 s, exceeded: 2, time delta: 2.707s)
New Rate limit exceeded! (Limit: 7.293191909790039 s, exceeded: 2, time delta: 2.707 s)
Old Rate limit exceeded! (Limit: 10 s, exceeded: 3, time delta: 3.131 s)
New Rate limit exceeded! (Limit: 6.869246006011963 s, exceeded: 3, time delta: 3.131 s)

Вот полный код анти-флуд системы айограма: https://docs.aiogram.dev/en/latest/examples/middleware_and_antiflood.html


Ответы (0 шт):