Как записать в sqlite время?
Есть игра, реализованная в виде Telegram бота с БД на sqlite3. В игре добавлена кнопка "Бонус", которая по задумке должна выдавать рандомное количество игровой валюты раз в 5 минут, к примеру.
Реализация примерно такая:
from time import time
from datetime import datetime as dt
# время ожидания в секундах
wait = 300
# храним время получения бонуса, 0 - не получал еще
t = 0
while True:
if (message.text == 'Получить бонус'):
timeleft = time()-t
if t == 0 or (timeleft == waits):
t = time()
else:
print(f'Подождите еще {round((waits-timeleft)/60)} минут')
Но вот вопрос: каким образом можно записывать в базу данных sqlite время получения бонуса, чтобы можно было в дальнейшем выдачу бонуса осуществлять отталкиваясь от времени последнего получения бонуса. К примеру, выдавать бонус через 10 часов после последнего получения (время последнего получения бонуса + 10 часов).
Ответы (1 шт):
Вы наверняка храните в базе данных профиль пользователя.
Добавьте в профиль ещё одно поле, например last_bonus_dt.
При запросе бонуса делайте проверку.
from datetime import datetime, timedelta
...
def your_message_handler(message):
if datetime.now() - last_bonus_dt > timedelta(seconds=300):
# выдать бонус, записать новое значение `last_bonus_dt`
else:
# приходите через N минут
Хранить datetime в sqlite можно в формате ISO
# для сохранения в текстовый формат
string = datetime.isoformat(dt)
# для получения datetime из строки
dt = datetime.fromisoformat(string)