Создаем Telegram бота

Привязка данных к пользователю через словари

Предположим мы хотим сделать бота, которы будет запоминать какую-то фразу, а затем по просьбе пользователя напоминать ее ему. Чтобы решить эту задачу, нам понадобится где-то хранить последнее сообщение пользователя.

Если мы будем использовать переменную, то сможем сохранить сообщение только одного пользователя. Например, Вася попросил запомнить слово 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)

Назад Вперед