Почему при нажатии 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)
Знаю, что уже не актуально, зато может помочь другим