Как реализовать таймер в телеграм боте?

Создал телеграм бота для записи на химчистку. И вопрос как можно реализовать чтобы записаться на химчистку можна было раз в 30 минут . Вот код:

import telebot
from telebot import types

light = '''Хімчистка салону (Light) 

Седан: від 2000 грн
Джип (і більше): від 2500 грн

Комплекс робіт:
-> Чистка ковроліну
-> Чистка сидінь 
-> Чистка дверних карт
-> Багажний відділ
-> Торпеда
-> Стеля'''

hard = '''Хімчистка салону (Hard)

Седан: від 2800 грн
Джип (і більше): від 3500 грн

Комплекс робіт:
-> Опція (Light)
-> Демонтаж сидінь
-> Чистка важкодоступних місць
-> Чистка ущільнювачів
-> Чистка вікон
-> Мийка дверних стійок 
-> бробка кондиціонером/поліроль для пластику
 Чистка окремих елементів від 300 гривень'''

somet = '''
-------------------------------------------
Мийка авто: від 300 грн
Нанесення воску: від 300 грн
Нанесення захистного покриття: від 600 грн
Нанесення антидощу: від 800 грн
Нанесення керамічного покриття: від 150$
-------------------------------------------
Оптика: 
Бронювання оптики: від 800 грн
Полірування фар: від 600 грн (за пару)
Тонування фар: від 600 грн (за пару)
-------------------------------------------
Плівочні роботи:
Поклейка авто плівкою в круг (кольорова/бронеплівка): від 600$ 
Поклейка авто плівкою за елемент (кольорова/бронеплівка): від 75$'''

token = '' # Это токен бота для тестов
bot = telebot.TeleBot(token)
admin_id = 
 # ID Админов которые будут получать заявки
global user_name
global user_phone


@bot.message_handler(commands=['start'])
def button(message):
    chat_id = message.chat.id
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    bt1 = types.KeyboardButton('⏰Записатися на хімчистку')
    bt3 = types.KeyboardButton('?Розробник')
    bt4 = types.KeyboardButton('??Контактна адреса')
    bt5 = types.KeyboardButton('?Прайс')
    markup.add(bt1, bt4, bt3,  bt5)
    bot.send_message(chat_id, f'<b>Привіт {message.from_user.first_name}?!</b> <b>Що бажаєш обрати?</b>',
        parse_mode='html', reply_markup=markup)


@bot.message_handler(content_types=['text'])
def main(message):
    chat_id = message.chat.id
    if message.chat.type == 'private':
        if message.text == '⏰Записатися на хімчистку':
            msg = bot.send_message(chat_id, "Напиши свій ПІБ")
            bot.register_next_step_handler(msg,regist_1)
        elif message.text == '?Розробник':
            bot.send_message(chat_id, '@l1nk00ln')
        elif message.text == '?Прайс':
            bot.send_message(chat_id, light)
            bot.send_message(chat_id, hard)
            bot.send_message(chat_id, somet)
        elif message.text == '??Контактна адреса':
            bot.send_message(chat_id, '?Контакти: \n  - Влад \n  - Іван ')

def regist_1(message):
    global user_name
    user_name = message.text
    msg = bot.send_message(message.chat.id, "?Напиши свій номер телефону для зв'язку.\n(Наш менеджер тобі передзвонить для уточнення інформації)")
    bot.register_next_step_handler(msg, regist_2)
def regist_2(message):
    global user_phone
    global user_name
    global kyzov
    user_phone = message.text
    msg2 = bot.send_message(message.chat.id, "?Який кузов т/з на якому буде проводитися роботи?\n (Седан, універсал, бус, інше...)")
    bot.register_next_step_handler(msg2, regist_3)
def regist_3(message):
    global user_phone
    global user_name
    global kyzov
    kyzov = message.text
    bot.send_message(message.chat.id,"?Дякую, ваша заявка прийнята і буде передана спеціалістам. Очікуйте дзвінка")
    bot.send_message(admin_id, f"?Нова заявка:\n ПІБ: {user_name}\n Номер телефону: {user_phone} \n Кузов т/з: {kyzov}")

bot.polling(none_stop=True, interval=0)


Ответы (1 шт):

Автор решения: Алексей Мейер

В прошлом вопросе Вам дали направление как это можно реализовать.

from datetime import datetime, timedelta
from time import sleep

clickIdTimes = {}


def checkClick(chat_id, timer_dict, timeout):
    if chat_id not in timer_dict or timer_dict[chat_id] < datetime.now() - timedelta(seconds=timeout):
        timer_dict[chat_id] = datetime.now()
        return True
    return False

# для примера установлена 1 секунда (в вашем случае 60*30)
print(checkClick(10, clickIdTimes, timeout=1))
print(checkClick(10, clickIdTimes, timeout=1))
sleep(2)
print(checkClick(10, clickIdTimes, timeout=1))
print(checkClick(10, clickIdTimes, timeout=1))
if message.text == '⏰Записатися на хімчистку':
    if not checkClick(chat_id, clickIdTimes, 30*60):
        bot.send_message(chat_id, "Попробуйте позже")
        return
    msg = bot.send_message(chat_id, "Напиши свій ПІБ")
    bot.register_next_step_handler(msg,regist_1)
→ Ссылка