Как сделать команду ежедневной?

Как сделать так чтобы пользователь мог запускать эту команду раз в 24 часа? У меня есть бот и в нём есть валюта, я знаю как выдавать пользователям монеты, но не знаю как ограничить эту функцию по времени, чтобы его можно было активировать лишь раз в 24 часа:

async def bonus(message: types.Message):
    con = sqlite3.connect("users.db")
    cur = con.cursor()
    user = message.from_user.id
    sql = "UPDATE ids SET balance = balance + ? \
    WHERE user_id = ?"
    val = (15, user)
    cur.execute(sql, val)
    con.commit()
    await bot.send_message(message.chat.id, "Вам выдан бонус в качестве 15 монеток")
    cur.close()

Желательно сделайте объяснение с кодом пожалуйста.


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

Автор решения: vadimeche

Надеюсь достаточно подробно

from datetime import datetime #библиотека для работы с датами

#создаем класс для даты последнего полученя Бонуса
class previousDate:

    #устанавливаем нереальную дату для инициализации
    def __init__(self, Date = datetime(1900,1,1,1,1,1)):
         self._Date = Date
      
    # getter method
    def get_Date(self):
        return self._Date
      
    # setter method
    def set_Date(self, value):
        self._Date = value
  
#создаем переменную для проверки доступа к Бонусу
def bonusAccess(prev, cur):
    access = False
    #сравниваем сколько прошло времени с последнего получения Бонуса
    if (cur - prev._Date).total_seconds() > 86400: # 86400 секунд = 24 часа
        access = True
        #в случае, если прошло более 24 часов, устанавливаем новую последнюю дату
        prev.set_Date(cur) 
    return access

prevDate = previousDate()

#отправляем в нашу переменную доступа объект последней даты и текущую дату
if (bonusAccess(prevDate, datetime.now())):
    bonus()
→ Ссылка