Как запоминать вводилась ли команда в течении времени?
Пишу Telegram бота, встал вопрос, как запомнить, вводилась ли команда например сегодня? Мне нужно что-то вроде:
Юзер пишет: /start
Программа проверяет, писал ли сегодня этот юзер эту команду, если нет то отвечает:
Держи свою награду!
Если уже писал сегодня:
Приходи завтра!
Я понял что это нужно реализовать через БД, и привязывать к Telegram_id юзера, но как, не знаю, не работал с БД. Можете пожалуйста подсказать реализацию этому? (Желательно с использованием sqlite3 или MySQL) Использую pyTelegramBotApi
Ответы (1 шт):
На самом деле для простейшей реализации такой логики достаточно использовать 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. Важно, что бы время было всегда в едином часовом поясе