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

Пишу Telegram бота, встал вопрос, как запомнить, вводилась ли команда например сегодня? Мне нужно что-то вроде:

Юзер пишет: /start

Программа проверяет, писал ли сегодня этот юзер эту команду, если нет то отвечает:

Держи свою награду!

Если уже писал сегодня:

Приходи завтра!

Я понял что это нужно реализовать через БД, и привязывать к Telegram_id юзера, но как, не знаю, не работал с БД. Можете пожалуйста подсказать реализацию этому? (Желательно с использованием sqlite3 или MySQL) Использую pyTelegramBotApi


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

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

На самом деле для простейшей реализации такой логики достаточно использовать NoSQL БД (Например Redis), где ключ, это идентификатор пользователя, а значение – время введенного последнего сообщения. Например: '14324234' – '2020-01-02 13:55:44'.

При вводе нового сообщения "/start" из БД достается по ключу = msg.user_id, затем проверяется разница между временем в БД и текущим временем, если оно > 24 часов, отправить сообщение "Держи свою награду!" и обновить запись в БД по ключу на текущее время.

Пример добавления в БД (sqlite3 – https://docs.python.org/3/library/sqlite3.html):

import sqlite3
conn = sqlite3.connect('dbname.db')
c.execute('''CREATE TABLE user_msg_time (user_id text, msg_time text)''')
c.execute("INSERT INTO user_msg_time VALUES ('14324234', '2020-01-02 13:55:44')")
conn.commit()
conn.close()

Пример обновления:

...
c.execute("UPDATE user_msg_time SET column_name = '2020-01-03 16:35:13' WHERE user_id = '14324234'")
...

P.S. Важно, что бы время было всегда в едином часовом поясе

→ Ссылка