Python telebot создание многопользовательского бота
Подскажите пожалуйста, я написала бот с использованием reply кнопок. В начале человек должен ввести день, месяц и год рождения. С этими данными производятся математические операции и уже в зависимости от них, информация которая пишется на кнопках и в дальнейшем. Бот реализован весь по принципу, вначале приходит ответ на ввод данных с клавиатурой (Reply). На клавиатуре 4 основных подменю, и кнопка назад, которая ведет на старт. В подменю, тоже используются reply кнопки, и в зависимости от расчетов по первоначальной дате рождения, человек при нажатии получает свою информацию.
Вопрос простой, для тех у кого есть опыт. Если бот запускают с двух девайсов, и вводят разные данные, то первый пользователь уже видит данные второго. Как сделать, чтобы все данные уникальными для каждого пользователя, и не пересекались, не зависимо от того, кто еще использует бот? (пробовала с помощью классов и библиотеки не вышло) буду благодарна за подсказку Вот пример начала кода, функция matrix после вызова главного меню, показывает данные кторые ввел в это время другой пользователь на другом устройстве.
import telebot
from telebot import types
bot = telebot.TeleBot('token');
class User:
def __init__(self, user_id):
self.user_id = user_id
self.day = None
self.month = None
self.year = None
self.numbers = [''] * 9
def set_day(self, day):
self.day = day
def set_month(self, month):
self.month = month
def set_year(self, year):
self.year = year
def get_numbers(self):
return self.numbers
users = {}
@bot.message_handler(commands=['start'])
def start(message):
user_id = message.from_user.id
users[user_id] = User(user_id)
bot.send_message(user_id, "Введите день рождения:")
bot.register_next_step_handler(message, get_day_messages);
def get_day_messages(message):
user_id = message.from_user.id
users[user_id].set_day(message.text)
global day_str;
day_str=message.text;
bot.send_message(user_id, "введите номер месяца рождения:");
bot.register_next_step_handler(message, get_month_messages);
def get_month_messages(message):
user_id = message.from_user.id
users[user_id].set_month(message.text)
global month_str;
month_str=message.text;
bot.send_message(user_id, "введите год рождения:");
bot.register_next_step_handler(message, get_year_messages);
def get_year_messages(message):
user_id = message.from_user.id
users[user_id].set_year(message.text)
username = message.from_user.username # Получение ника пользователя (если доступно)
first_name = message.from_user.first_name # Получение имени пользователя
last_name = message.from_user.last_name # Получение фамилии пользователя
user = users[user_id]
day_str = user.day
month_str = user.month
year_str = user.year
#... вычесления с полученными переменными...
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
keyboard.add(*[types.KeyboardButton(name) for name in ['кнопка 1', 'кнопка 2', 'кнопка 3', 'кнопка 4', 'Расчитать новую дату']])
bot.send_photo(message.chat.id, 'https://bs.krok.edu.ua/fileadmin/user_upload/leader5advices2017.jpg',caption=' 🟢тектс ',reply_markup=keyboard, parse_mode="HTML")
# дальнейшие расчеты.....#
global numbers # объявление и вычисление переменной number(одна из основных для будущих кнопокк и данных
numbers=[]
for i in range(9): numbers.append('')
for i in range(9):
..... # вычисление number....#
def save_user_data(user_id, username, first_name, last_name, day_str, month_str, year_str):
# запись в файл данных
def main_menu(message):
user_id = message.from_user.id # Получаем идентификатор пользователя
if user_id not in users:
users[user_id] = User(user_id)
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
keyboard.add(*[types.KeyboardButton(name) for name in ['Кнопка 1', 'кнопка 2', 'кнопка 3', 'кнопка 4', 'Расчитать новую дату']])
bot.send_message(message.chat.id, "Прожолжайте делать выбор, или выбирайте расчитать новую дату", reply_markup=keyboard)
@bot.message_handler(func=lambda message: message.text == "Кнопка 1")
def matrix (message):
user_id = message.from_user.id
if user_id not in users:
users[user_id] = User(user_id)
user = users[user_id]
numbers = user.get_numbers() # Получаем список чисел пользователя
for i in range(9):
if numbers[i-1] == '':
numbers[i-1] = '<'+str(i)+'>'
keyboardM = types.ReplyKeyboardMarkup(row_width=3)
button_1 = types.KeyboardButton(numbers[0])
button_2 = types.KeyboardButton(numbers[1])
button_3 = types.KeyboardButton(numbers[2])
button_4 = types.KeyboardButton(numbers[3])
button_5 = types.KeyboardButton(numbers[4])
button_6 = types.KeyboardButton(numbers[5])
button_7 = types.KeyboardButton(numbers[6])
button_8 = types.KeyboardButton(numbers[7])
button_9 = types.KeyboardButton(numbers[8])
button_back = types.KeyboardButton('в главное меню')
keyboardM.row(button_1, button_4, button_7)
keyboardM.row(button_2, button_5, button_8)
keyboardM.row(button_3, button_6, button_9)
keyboardM.row(button_back)
bot.send_message(message.chat.id, 'текст определенный...', reply_markup=keyboardM)