Telegram бот на Python на определённом этапе не продолжает работу. Кто знает подскажите почему, где ошибка?

Рейтинг: 0Ответов: 1Опубликовано: 22.04.2023

Telegram бот на Python на определённом этапе не продолжает работу. После нажатия на кнопку "Чай" ничего не происходит. Кто знает подскажите почему, гле ошибка?

import telebot
from telebot import types

bot = telebot.TeleBot('Token')


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Нажми чтобы выбрать напиток...")
    markup.add(btn1)
    bot.send_message(message.from_user.id,
                     "Привет! Здесь ты можешь заказать напиток по своему вкусу",
                     reply_markup=markup)


@bot.message_handler(content_types=['text'])
def get_text_messages(message):
    if message.text == 'Нажми чтобы выбрать напиток...':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)  # создание новых кнопок
        btn1 = types.KeyboardButton('Чай')
        btn2 = types.KeyboardButton('Кофе')
        btn3 = types.KeyboardButton('На главную')
        markup.add(btn1, btn2, btn3)
        bot.send_message(message.from_user.id, 'Какой напиток предпочитаете...?', reply_markup=markup)  # ответ бота


@bot.message_handler(content_types=['text'])
def sort_tee(message):
    if message.text == 'Чай':
        toock = types.ReplyKeyboardMarkup(resize_keyboard=True)  # создание новых кнопок
        btn1 = types.KeyboardButton('Зелёный')
        btn2 = types.KeyboardButton('Чёрный')
        btn3 = types.KeyboardButton('Красный')
        btn4 = types.KeyboardButton('На главную')
        toock.add(btn1, btn2, btn3, btn4)
        bot.send_message(message.from_user.id, 'Какой чай предпочитаете...?', reply_markup=toock)  # ответ бота

    elif message.text == 'Зелёный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/zelenyj-chaj/)',
                         parse_mode='Markdown')

    elif message.text == 'Чёрный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/chernyj-chaj/)',
                         parse_mode='Markdown')

    elif message.text == 'Красный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/krasnyj/)',
                         parse_mode='Markdown')

    elif message.text == 'На главную':
        bot.send_message(message.from_user.id, start(),
                         parse_mode='Markdown')


while True:
    bot.polling()  # обязательная для работы бота часть

Ответы

▲ 0Принят

Проблема заключается в том, что у вас два обработчика сообщений с типом text, и при получении любого текстового сообщения будет вызываться только первый из них (gettextmessages). Чтобы исправить это, нужно объединить обработчики в один, например, так:

@bot.message_handler(content_types=['text'])
def handle_text(message):
    if message.text == 'Нажми чтобы выбрать напиток...':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('Чай')
        btn2 = types.KeyboardButton('Кофе')
        btn3 = types.KeyboardButton('На главную')
        markup.add(btn1, btn2, btn3)
        bot.send_message(message.from_user.id, 'Какой напиток предпочитаете...?', reply_markup=markup)

    elif message.text == 'Чай':
        toock = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('Зелёный')
        btn2 = types.KeyboardButton('Чёрный')
        btn3 = types.KeyboardButton('Красный')
        btn4 = types.KeyboardButton('На главную')
        toock.add(btn1, btn2, btn3, btn4)
        bot.send_message(message.from_user.id, 'Какой чай предпочитаете...?', reply_markup=toock)

    elif message.text == 'Зелёный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/zelenyj-chaj/)',
                         parse_mode='Markdown')

    elif message.text == 'Чёрный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/chernyj-chaj/)',
                         parse_mode='Markdown')

    elif message.text == 'Красный':
        bot.send_message(message.from_user.id,
                         '[Ваш напиток здесь...](https://lavka-coffee-tea.ru/catalog/krasnyj/)',
                         parse_mode='Markdown')

    elif message.text == 'На главную':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Нажми чтобы выбрать напиток...")
        markup.add(btn1)
        bot.send_message(message.from_user.id,
                         "Привет! Здесь ты можешь заказать напиток по своему вкусу",
                         reply_markup=markup)

Также в функции "На главную" нужно использовать переменную markup, чтобы добавить кнопки выбора напитка.