Форум сайта python.su
0
Здравствуйте уважаемые форумчане!
Подскажите как решить такую проблему:
Написал небольшой бот для телеграма, который регистрирует данные об автомобиле, введенные пользователем. Бот работает, но только когда пользователи вводят по очереди, а когда одновременно то введеные данные перезаписываются, к примеру:
юзер 1 вводит:
рег. номер - 123
марка - AUDI
модель - 100
юзер 2 вводит:
рег. номер - 456
марка - ВАЗ
модель - 2101
результат может быть:
рег. номер - 456
марка - AUDI
модель - 2101
сам код:
import telebot import config from time import sleep from telebot.types import Message bot = telebot.TeleBot(config.TOKEN) markup_menu = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True) btn_new = telebot.types.KeyboardButton('Запись нового авто') btn_verify = telebot.types.KeyboardButton('Проверка авто') markup_menu.add(btn_new, btn_verify) car_plate = '' car_make = '' car_model = '' @bot.message_handler(commands=['start']) def start(message: Message): bot.send_message(message.from_user.id, 'Для начала нажмите необходимую кнопку', reply_markup=markup_menu) @bot.message_handler(content_types=['text']) def new_verify(message: Message): if message.text.lower() == 'запись нового авто': begin_new_car = bot.send_message(message.from_user.id, 'Введите регистрационный номер:') bot.register_next_step_handler(begin_new_car, get_car_plate) def get_car_plate(message: Message): global car_plate car_plate = message.text.upper() bot.send_message(message.from_user.id, 'Введите марку авто:') bot.register_next_step_handler(message, get_car_make) def get_car_make(message: Message): global car_make car_make = message.text.upper() bot.send_message(message.from_user.id, 'Введите модель авто:') bot.register_next_step_handler(message, get_car_model) def get_car_model(message: Message): global car_model car_model = message.text.upper() res = """ Р/Н: {} Марка: {} Модель: {} -----------\n\n""" with open('cars.txt', 'a', encoding='utf8') as car_file: car_file.write(res.format(car_plate, car_make, car_model)) bot.send_message(message.from_user.id, 'Записано!') while True: try: bot.polling(none_stop = True) except: sleep(20)
Отредактировано philips2009 (Авг. 26, 2019 02:32:14)
Офлайн
857
philips2009Вообще, для каждого юзера надо построить сессию общения с ним. Telegram'ом не занимался, но обычно это так делается в подобных системах. Когда пользователь начинает какую-то операцию, запоминается его идентификатор и признак начала сессии. Когда посылается сообщение от пользователя, с этим сообщением передаётся идентификатор пользователя. Таким образом система может понимать, что цепочка сообщений конкретного пользователя состоит из такой-то последовательности сообщений от него. При этом в последнем сообщении признак конца сессии приводит к завершению сессии и какой-то финализации по этой сессии. Когда всё сделано, сессия удаляется. Так система может следить за несколькими цепочками от разных пользователей и их сообщения не будут попадать в сессии друг друга.
Получается что нужно для каждого юзера своя пременная
Офлайн
0
py.user.nextИдея хорошая, но как это реализовать
Офлайн