Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2019 00:15:31

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Telegram bot

Здравствуйте уважаемые форумчане!
Подскажите как решить такую проблему:
Написал небольшой бот для телеграма, который регистрирует данные об автомобиле, введенные пользователем. Бот работает, но только когда пользователи вводят по очереди, а когда одновременно то введеные данные перезаписываются, к примеру:
юзер 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)

Офлайн

#2 Авг. 26, 2019 05:19:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Telegram bot

philips2009
Получается что нужно для каждого юзера своя пременная
Вообще, для каждого юзера надо построить сессию общения с ним. Telegram'ом не занимался, но обычно это так делается в подобных системах. Когда пользователь начинает какую-то операцию, запоминается его идентификатор и признак начала сессии. Когда посылается сообщение от пользователя, с этим сообщением передаётся идентификатор пользователя. Таким образом система может понимать, что цепочка сообщений конкретного пользователя состоит из такой-то последовательности сообщений от него. При этом в последнем сообщении признак конца сессии приводит к завершению сессии и какой-то финализации по этой сессии. Когда всё сделано, сессия удаляется. Так система может следить за несколькими цепочками от разных пользователей и их сообщения не будут попадать в сессии друг друга.



Офлайн

#3 Авг. 26, 2019 18:37:24

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

Telegram bot

py.user.next
Идея хорошая, но как это реализовать

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version