Привязка данных к пользователю через словари
Предположим мы хотим сделать бота, которы будет запоминать какую-то фразу, а затем по просьбе пользователя напоминать ее ему. Чтобы решить эту задачу, нам понадобится где-то хранить последнее сообщение пользователя.
Если мы будем использовать переменную, то сможем сохранить сообщение только одного пользователя. Например, Вася попросил запомнить слово kitten
. Мы положим эту строку в переменную note
. А затем Петя, попросить запомнить слово puppy
, и мы снова положим это переменную note
. Когда Вася попросит нам напомнить его последнее сообщение, мы напишем ему puppy
вместо kitten
. Совершенно не годится!
Удобнее всего хранить все данные, которые привязаны к конкретному пользователю в словаре. Ключем в этом словаре будет id пользователя, а значением - произвольные данные.
Предположим, что наш словарь называется notes
- заметки. Теперь, когда Вася (id88000) пришлет слово kitten
мы положим его в notes[88000]
, а слово puppy
от Пети (id5300) - в notes[5300]
. Посколько теперь мы используем разные переменные для хранения слова, сообщения от разных пользователей не будут путаться.
Реализация:
import telebot
token = "ВАШ ТОКЕН"
bot = telebot.TeleBot(token=token)
notes = {}
@bot.message_handler(commands=['remind'])
def remind(message):
user_id = message.chat.id
if user_id not in notes:
bot.send_message(user_id, "Вы мне еще не писали.")
else:
bot.send_message(user_id, notes[user_id])
@bot.message_handler(content_types=['text'])
def remember(message):
user_id = message.chat.id
notes[user_id] = message.text
bot.send_message(user_id, "Я запомнил")
bot.polling(none_stop=True)