Когда дело доходит до публикации Telegram бота, одним из ключевых аспектов безопасности является защита от спама и автоматизированных атак. Проигнорирование этого аспекта может привести к перегрузке бота, его медленной работе, а в некоторых случаях и к блокировке в Telegram из-за подозрительной активности.
Вот простой пример реализации простейшей антиспам-системы на Python с помощью библиотеки python-telegram-bot:
from telegram
ext import Updater, MessageHandler, Filters
from time import time
# Класс контроля за частотой сообщений пользователей
class RateLimiter:
def init(self, max_messages, window_size):
# Максимальное количество сообщений
self.max_messages = max_messages
# Временное окно в секундах
self.window_size = window_size
# Словарь для хранения времени последних сообщений от пользователей
self.user_messages = {}
def limit(self, message):
user_id = message.from_user.id
current_time = time()
# Обновляем очередь сообщений пользователя
if user_id not in self.user_messages:
self.user_messages[user_id] = []
# Удаляем устаревшие сообщения с учетом временного окна
self.user_messages[user_id] = [msg_time for msg_time in self.user_messages[user_id] if current_time - msg_time < self.window_size]
# Добавляем время текущего сообщения
self.user_messages[user_id].append(current_time)
# Проверяем, не превышено ли количество сообщений
return len(self.user_messages[user_id]) <= self.max_messages
# Функция обработки сообщения
def handle_message(update, context):
update.message.reply_text("Ваше сообщение получено!")
# Токен вашего бота
TELEGRAM_BOT_TOKEN = 'YOUR_BOT_TOKEN'
# Инициализируем Updater и Dispatcher
updater = Updater(TELEGRAM_BOT_TOKEN, use_context=True)
dp = updater.dispatcher
# Создаем объект RateLimiter
rate_limiter = RateLimiter(max_messages=5, window_size=60) # Не более 5 сообщений в минуту на пользователя
# Добавляем обработчик сообщений с лимитированием
dp.add_handler(MessageHandler(Filters.text & (~Filters.command), handle_message, filters=rate_limiter.limit))
# Запускаем бота
updater.start_polling()
updater.idle()
В данном случае мы создали класс RateLimiter, который осуществляет контроль за частотой поступления сообщений от каждого конкретного пользователя. В примере пользователю разрешается отправлять не более пяти сообщений в течение одной минуты.