@ivakhiv

Как сделать чтобы бот не реагировал на другой текст а только на тот что есть в кнопке?

как сделать чтобы бот не реагировал на другой текст а только на тот что есть в кнопке?

@bot.message_handler(commands=['Підтримка'])
def send_about(message):
    bot.send_message(message.chat.id, '<b>Вітаємо!{0.first_name},ви в розділі "‍ Служба підтримки"</b>'"\n\nЯкщо ви помітили несправність бота зафіксуйте це(скріншот/запис екрану),сповістіть про це розробника   @ivakhiv_off\n\n  З питань реклами та комерції   @ivakhiv_off ".format(message.from_user, bot.get_me()),
        parse_mode='html')

@bot.message_handler(commands=["Оформити_доставку"])
def user_reg(message):
       markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
       itembtn1 = types.KeyboardButton('Новояворівськ')
       itembtn2 = types.KeyboardButton('Шкло (р-н школи)')
       itembtn3 = types.KeyboardButton('Шкло (р-н Санаторія)')
       itembtn4 = types.KeyboardButton('Старичі')
       itembtn5 = types.KeyboardButton('Старичі (Яворівський полігон КПП №1)')
       itembtn6 = types.KeyboardButton('Когути')
       markup.add(itembtn1, itembtn2, itembtn3, itembtn4, itembtn5, itembtn6)

       msg = bot.send_message(message.chat.id, '<b>Виберіть на "кнопках" населенний пункт\n\nДоставка тільки в перечислених населених пунктах!!!</b>\n\nпо Новояворівську - 20 грн\nНовояворівськ - Шкло (р-н школи) - 60 грн\nНовояворівськ - Шкло (р-н Санаторія) - 80 грн\nНовояворівськ - Старичі (в межах села) - 80 грн\nНовояворівськ - Старичі (Яворівський полігон КПП №1) - 120 грн\nНовояворівськ - Когути - 50 грн', reply_markup=markup,parse_mode='html')
       bot.register_next_step_handler(msg, process_city_step)

def process_city_step(message):
    try:
        if message.text == ("Новояворівськ" "Шкло (р-н школи)" "Шкло (р-н Санаторія)" "Старичі" "Старичі (Яворівський полігон КПП №1)" "Когути"):
            pass
            chat_id = message.chat.id
            user_dict[chat_id] = User(message.text)

            # сховати клавіатуру
            markup = types.ReplyKeyboardRemove(selective=False)
        
            markup = types.ReplyKeyboardRemove(selective=False)
        
            msg = bot.send_message(chat_id, "Прізвище ім'я | ПІБ:", reply_markup=markup)
            bot.register_next_step_handler(msg, process_fullname_step)
        else:
            bot.send_message(chat_id, "Новояворівськ" "Шкло (р-н школи)" "Шкло (р-н Санаторія)" "Старичі" "Старичі (Яворівський полігон КПП №1)" "Когути", reply_markup=markup)

    except Exception as e:
        bot.reply_to(message, 'Ми працюємо тільки по вказаним населеним пунктам')
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
Reply кнопки имитируют отправку сообщения. Т.е. если вы нажмете на такую кнопку - это будет равносильно отправке текста вручную.
Поэтому если у вас есть какое-то количество кнопок, которые отвечают за какие-то определенные фразы, то просто в самом начале функции process_city_step проверяйте message.text на совпадение с нужными значениями. Если не совпадает ни с одним - удаляйте сообщение, либо сообщите пользователю об ошибке и еще раз вызывайте bot.register_next_step_handler(msg, process_fullname_step) , чтобы дать пользователю вторую попытку нажать на нужную кнопку, либо ввести нужное сообщение.

Но я бы на вашем месте рассмотрел вариант с Inline клавиатурой. Гораздо больше возможностей и не загромождает интерфейс. Да и проблемы с проверкой на доступные значения уже не будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы