Напишем простейший телеграм бот используя язык програмирования Python и асинхронную библиотеку aiogram 3.*
Запустим наш бот и убедимся в его работоспособности, бот реагирует на каждую команду /start, отправляя приветственное сообщение пользователю ,
таких сообщений мы можем отправить очень много в короткий промежуток времени.
Если мы не ограничим отправку таких сообщений мы становимся уязвимы, так как обрабатываем множество запросов впустую.
А если в боте еще есть и база данных в которую также постоянно будут отправляться запросы, нагрузка на сервер увеличится еще больше.
Что бы уменьшить возможную нагрузку на нашего бота, сделаем так, что бы пользователь мог отправлять сообщение боту только один раз в 10 секунд.
Для реализации поставленной задачи используем redis.
Напишем соответствуюший middleware, перед этим импортируем все ненобходимые зависимости.
Напишем класс ThrottlingMiddleware, он должен наследоваться от класса BaseMiddleware, в конструктор будем предавать объект RedisStorage c использованием автовызываемого метода __call__(),а в переменную user сформируем строку с id user и префиксом user.
В переменную check_user получаем значение ключа user, если значение есть - проверяем его, если его значение равно 1, отправляем пользователю уведомление, что он попал под действие спам-фильтра.
Если значение не равно 1 , игнорируем сообщения пользователя.
Если в переменной check_user ничего нет то добавляем данные о пользователе в redis.
После чего продолжаем взаимодействие с пользователем.
Теперь мы имеем рабочий шаблон для защиты от спама, который можно использовать во всех проектах.
Исходники данного кода и огромное колличество полезных скриптов на Python можно найти в нашем телеграм канале Python_Scripts. Подписывайтесь и пользуйтесь!