Как защитить бота Telegram от спама?
Для этого нужно в боте отслеживать 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.

Единственный способ заспамить бота в таком случае это будет отправка сообщений с множества разных аккаунтов, что уже гораздо сложнее для злоумышленника.
Друзья, кому интересен реализованный код:

@bot.message_handler(func=lambda message: True)
def echo_all(message):
    if message.from_user.id not in last_message:
        last_message[message.from_user.id] = message.date - 5
        print(last_message)
    if message.date - last_message[message.from_user.id] > 5:
        bot.reply_to(message, message.text)
        last_message[message.from_user.id] = message.date
        print(last_message)

last_message = {}
bot.polling()