Почему при нажатии 2-ой раз на 2-ю кнопку инлайн клавиатуры, присылается повторно второе сообщение, а не третье?

Почему при нажатии второй раз на вторую кнопку inline-клавиатуры, присылается повторно второе сообщение, а не третье? Как правильно переписать код?

Ошибка из-за повтора @bot.callback_query_handler(func=lambda call: True), но я ума не приложу как всё переписать.

import telebot
from telebot import types

bot = telebot.TeleBot('___')

# создаем клавиатуру
keyboard = types.InlineKeyboardMarkup()

# добавляем на нее две кнопки
button1 = types.InlineKeyboardButton(text="ДА", callback_data="button1")
button2 = types.InlineKeyboardButton(text="НЕТ", callback_data="button2")
keyboard.add(button1)
keyboard.add(button2)


@bot.message_handler(commands=["start"])
def repeat_all_messages(message):

    # отправляем сообщение пользователю
    bot.send_message(message.chat.id, "Привет, ты зашёл сюда, потому что...", reply_markup=keyboard)

# функция запустится, когда пользователь нажмет на кнопку
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.message:
        if call.data == "button1":
            bot.send_message(call.message.chat.id, "Отлично! Администратор", reply_markup=keyboard)
        if call.data == "button2":
            bot.send_message(call.message.chat.id, "Неправильный ответ. Нажми ДА")

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.message:
        if call.data == "button1":
            bot.send_message(call.message.chat.id, "Добавление... напиши ...")
            if call.data == "button2":
                bot.send_message(call.message.chat.id, "Неправильный ответ. Нажми ДА")


bot.polling(none_stop=True)

Ответы (2 шт):

Автор решения: D. Violet
  • Не совсем ясна логика, зачем два хэндлера, раз.
  • Два, почему на одну и ту же кнопку button1 завязано два разных ответа?

А вообще используйте elif.

# функция запустится, когда пользователь нажмет на кнопку
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.data == "button1":
       bot.send_message(call.message.chat.id, "Отлично! Администратор", reply_markup=keyboard)
    elif call.data == "button2":
         bot.send_message(call.message.chat.id, "Неправильный ответ. Нажми ДА")
→ Ссылка
Автор решения: Наталья Кузнецова

Пробовала исправить ваш код, благодаря чему смогла найти ошибку в своём коде:

import telebot
from telebot import types

bot = telebot.TeleBot("6384382264:AAHcn9PptiZHEJgPSbHrMtG6EHrqoeXlopw")

# создаем клавиатуру
keyboard = types.InlineKeyboardMarkup()
keyboard1 = types.InlineKeyboardMarkup()

# добавляем на нее четыре кнопки
button1 = types.InlineKeyboardButton(text="ДА", callback_data="button1")
button2 = types.InlineKeyboardButton(text="НЕТ", callback_data="button2")
button3 = types.InlineKeyboardButton(text="ДА", callback_data="button3")
button4 = types.InlineKeyboardButton(text="НЕТ", callback_data="button4")
keyboard.add(button1)
keyboard.add(button2)
keyboard1.add(button3)
keyboard1.add(button4)



@bot.message_handler(commands=["start"])
def repeat_all_messages(message):

    # отправляем сообщение пользователю
    bot.send_message(message.chat.id, "Привет, ты зашёл сюда, потому 
что...", reply_markup=keyboard)


# функция запустится, когда пользователь нажмет на кнопку
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.data == "button1":
        bot.send_message(call.message.chat.id, "Отлично! Администратор", 
reply_markup=keyboard1)
    elif call.data == "button2":
        bot.send_message(call.message.chat.id, "Неправильный ответ. Нажми 
ДА")
    elif call.data == "button3":
    bot.send_message(call.message.chat.id, "Добавление... напиши ...")
    elif call.data == "button4":
        bot.send_message(call.message.chat.id, "Неправильный ответ. Нажми 
ДА")


bot.polling(none_stop=True)

Знаю, что уже не актуально, зато может помочь другим

→ Ссылка