Как задать разные действия telegram-боту для одинаковых условий?
Есть 2 условия для телеграмм бота. Первое:
if message.text.isdigit():
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
price.append(message.text)
item1 = types.KeyboardButton('Не учитывать сумму')
back = types.KeyboardButton('Назад')
markup.add(item1, back)
bot.send_message(message.chat.id, 'Введите минимальную сумму'.format(message.from_user), reply_markup=markup)
То есть юзер отправляет число и это число добавляется в список price
И второе условие:
if message.text.isdigit():
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
limit.append(message.text)
item1 = types.KeyboardButton('Всё верно. Отправить')
back = types.KeyboardButton('Начать заново')
markup.add(item1, back)
bot.send_message(message.chat.id, f'{price} ...... {limit} ....',
reply_markup=markup)
Здесь так же юзер отправляет число, но тут оно отправляется в список limit
Проблема в том, что когда на этапе price юзер пишет число, то оно одновременно отправляется и в список limit, так как условие одно и то же. Есть варианты это исправить?
Ответы (1 шт):
Мало знаком с Telegram-ботами, но предложу такое решение с точки зрения здравого смысла.
Судя по тексту в вопросе ваши условия являются "одинаковыми" только на том уровне, на каком вы их реализовали.
Имею в виду, что в коде у вас проверяется только то, что пользователь ввел цифру, а на деле он мог ввести эту цифру в разные моменты времени, то, что вы называете этапами.
Но самой реализации этапов внутри бота у вас просто нет, в этом и проблема. Если знакомы с теорией автоматов, то вам будет легко понять о чем я говорю.
К чему я веду:
- Вам нужно в логике бота реализовать хранение текущего этапа
current_stage, на котором сейчас находится пользователь в процессе взаимодействия. - Тогда уже, когда он будет вводить цифру дополнительно проверять на каком сейчас этапе находится пользователь и от этого отстраивать дальнейшую логику.
Эта строка if message.text.isdigit(): превратится в if message.text.isdigit() and current_stage == SOME_STAGE:, а второй if заменится на аналогичный, но только с проверкой другого этапа.
- Это позволяет реализовать внутри бота различное взаимодействие при одном и том же поведении пользователя в разных состояниях, что решит вашу проблему за счет того, что разные ветки логики работы будут изолированы друг от друга.