Как установить ограничение по времени на выполнение команды?

Как сделать так, чтобы после использования команды "промокод" на человека накладывалось ограничение в 7 дней перед повторным использованием этой команды? 

@bot.message_handler(content_types=['text'])
def work_command(message):
    user_id = message.from_user.id
    if message.text.lower() == 'промокод':
        if points.get(user_id):
            points[user_id] += 5

        else:
            points[user_id] = 5

        bot.send_message(user_id, "Спасибо за активацию. Вы сможете повторно использовать промокод через 7 дней.")
  • 14 февраля 2024 г. 12:58
Ответы на вопрос 4
Для установки ограничения по времени на выполнение команды можно использовать модуль `datetime` в Python. 

Вам понадобится добавить в код следующую проверку перед активацией промокода:

```python
import datetime

@bot.message_handler(content_types=['text'])
def work_command(message):
    user_id = message.from_user.id
    if message.text.lower() == 'промокод':
        if user_id in points:
           last_activation = points[user_id]['last_activation']
           current_time = datetime.datetime.now()
           time_difference = current_time - last_activation

           if time_difference.days >= 7:
               points[user_id]['points'] = 5
               points[user_id]['last_activation'] = current_time
               bot.send_message(user_id, "Спасибо за активацию. Вы сможете повторно использовать промокод через 7 дней.")
           else:
               bot.send_message(user_id, "Вы уже использовали промокод. Повторное использование будет доступно через {} дней.".format(7 - time_difference.days))
        else:
           current_time = datetime.datetime.now()
           points[user_id] = {'points': 5, 'last_activation': current_time}
           bot.send_message(user_id, "Спасибо за активацию. Вы сможете повторно использовать промокод через 7 дней.")
```

В примере выше добавляется новый словарь в `points` для каждого пользователя, который содержит количество очков и время последней активации промокода. При повторном использовании команды "промокод" проверяется, прошло ли уже 7 дней с последней активации. Если прошло, очки обнуляются и время последней активации обновляется. Если не прошло, отправляется сообщение с оставшимся временем до повторного использования команды.

Обратите внимание, что вам также понадобится импортировать модуль datetime, если его еще нет в вашем коде:

```python
import datetime
```
1. Писать в бд дату последнего выполнения команды. 
2. При попытке воспользоваться командой > сверять настоящую дату и дату из бд.
3. Разрешать или запрещать выполнение команды на основание п2.
ну так сохрани дату и время когда она была выполнена, и проверяй при следующих вызовов
При активации команды проверять, хранится ли для пользователя дата и время последней активации. Если хранится - проверять, достаточно ли далеко в прошлом эта дата. 

При успешном выполнении команды сохранять текущие дату/время для данного пользователя.

Я не знаю, что у тебя за хранилище (просто словарь?) но наверняка его можно приспособить под это.
Похожие вопросы