@Qayin

Как сделать ветку ReplyKeyboardMarkup?

# def keyboards_start():
#     keyboards_start = types.ReplyKeyboardMarkup(resize_keyboard=True)
#     Button1 = types.KeyboardButton("Картиночка")
#     keyboards_start.add(Button1)
#     return keyboards_start

# def choise_picture_keyboard():
#     keyboards_choise_picture = types.ReplyKeyboardMarkup(resize_keyboard=True)
#     Button1 = types.KeyboardButton("М")
#     Button2 = types.KeyboardButton("П")
#     Button3 = types.KeyboardButton("Назад")
#     keyboards_choise_picture.add(Button1,Button2,Button3)
#     return(keyboards_choise_picture)

@bot.message_handler(commands=['start'])

def start(message):
    bot.send_message(message.chat.id, "Что желаете?", reply_markup=keyboards.keyboards_start())
   
@bot.message_handler(content_types=['text'])

def choise_picture(message):
    if message.text == "Картиночка":
        bot.send_message(message.chat.id, "Какую желаете?", reply_markup=keyboards.choise_picture_keyboard())

@bot.message_handler(content_types=['text'])

def back_from_pictures(message):
    if message.text == "Назад":
        bot.send_message(message.chat.id, "Хорошо", reply_markup=keyboards.keyboards_start())
        
bot.infinity_polling()


Под комментами сами 2 клавиатуры.
Логика должна быть такой: нажал "картиночка"(появилась choise_picture_keyboard) - нажал назад(Появилась keyboards start), но ничего не появляется, а в чем причина - уже все варианты перепробовал, что на ум шли.
И будет ли это работать?
Я думаю, что проблема в @bot.message_handler(content_types=['text']), но я пробовал менять его на commands=['start' or 'Назад']
PS закоменченные клавиатуры у меня в другом файле, который импортирован
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
@bot.message_handler(content_types=['text'])

Да. Из нескольких одинаковых декораторов срабатывает всегда только верхний. Так что функция back_from_pictures никогда не выполняется.

Объедините все условия под один декоратор, или сделайте более гибкие через lambda функцию
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Forward1232
Потому-что твои хендлеры отлавливают просто любой текст, а надо что-бы они отлавливали конкретные слова, вот твой код в исправленном виде

# def keyboards_start():
#     keyboards_start = types.ReplyKeyboardMarkup(resize_keyboard=True)
#     Button1 = types.KeyboardButton("Картиночка")
#     keyboards_start.add(Button1)
#     return keyboards_start

# def choise_picture_keyboard():
#     keyboards_choise_picture = types.ReplyKeyboardMarkup(resize_keyboard=True)
#     Button1 = types.KeyboardButton("М")
#     Button2 = types.KeyboardButton("П")
#     Button3 = types.KeyboardButton("Назад")
#     keyboards_choise_picture.add(Button1,Button2,Button3)
#     return(keyboards_choise_picture)

@bot.message_handler(text=["Назад"])
@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, "Что желаете?", reply_markup=keyboards.keyboards_start())
   
@bot.message_handler(text=["Картиночка"])
def choise_picture(message):
    bot.send_message(message.chat.id, "Какую желаете?", 
    reply_markup=keyboards.choise_picture_keyboard())

        
bot.infinity_polling()
Ответ написан
Ваш ответ на вопрос

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

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