Кулдаун для всех сообщений и команд в Telegram-боте

Рейтинг: 1Ответов: 1Опубликовано: 07.08.2025

Хочу реализовать в Telegram-боте кулдаун (задержку) после любого входящего сообщения или команды.

Требуется, чтобы после ввода любой команды или текста бот не принимал ничего от пользователя в течение 4 секунд и отвечал сообщением с оставшимся временем ожидания, например: Подожди 3 сек...

Это касается как команд @bot.message_handler(commands=...), так и обычных текстовых сообщений @bot.message_handler(func=...).

Как лучше всего реализовать такую задержку?

Ответы

▲ 6

Как вариант, храните в словаре время следующего разрешённого запроса для каждого пользователя. При каждом сообщении сравнивайте текущее время с разрешённым — если пользователь ещё на "кулдауне", выводите оставшееся время ожидания.

И небольшой пример для вас:

import telebot
import time

API_TOKEN = "TOKEN"
bot = telebot.TeleBot(API_TOKEN)

# {user_id : time}, когда можно снова отправлять
user_access_time = {}

COOLDOWN_SECONDS = 4


@bot.message_handler(func=lambda message: True)
def handle_all(message):
    user_id = message.from_user.id
    now = time.time()

    access_time = user_access_time.get(user_id, 0)

    # Текущее время должно быть больше запретного (Условно 16:12 < 16:11)
    if now < access_time:
        remaining = int(access_time - now)
        bot.send_message(message.chat.id, f"Подожди {remaining} сек...")
        return

    # Новое время для следующего запроса
    user_access_time[user_id] = now + COOLDOWN_SECONDS

    bot.send_message(message.chat.id, f"Запрос обработан: {message.text}")


bot.infinity_polling()

введите сюда описание изображения