Для этого нужно в боте отслеживать user_id и timestamp последнего сообщения.
Можно завести в БД таблицу c 2-мя колонками: user_id (unique), last_message_time.
Когда от пользователя приходит новое сообщение, вы достаёте last_message_time для текущего user_id и смотрите сколько секунд прошло между последним сообщением и текущим временем.
Если прошло меньше 5 секунд, то шлёте предупреждение и считаете что произошло нарушение от user_id, если прошло больше 5 секунд, то считаем сообщение валидным и не забываем обновить last_message_time для user_id.
Единственный способ заспамить бота в таком случае это будет отправка сообщений с множества разных аккаунтов, что уже гораздо сложнее для злоумышленника.