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