Почему не обрабатываются кнопки? Telebot
question = ' '
def get_question(message):
global question;
question = message.text;
if question == '1':
keyboard = types.InlineKeyboardMarkup();
key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes');
keyboard.add(key_yes);
key_no = types.InlineKeyboardButton(text='Нет', callback_data='no');
keyboard.add(key_no);
question = 'С вашей карты снялись деньги?';
bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
if call.data == "yes":
bot.send_message(call.message.chat.id, 'Если в течение получаса на вашу почту не придет подтверждение, '
'то пишите менеджеру: ');
elif call.data == "no":
keyboard = types.InlineKeyboardMarkup();
key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes1');
keyboard.add(key_yes);
key_no = types.InlineKeyboardButton(text='Нет', callback_data='no1');
keyboard.add(key_no);
question = 'Проверьте мобильный банк и статус платежа. Статус «В ожидании оплаты»?';
bot.send_message(call.message.chat.id, text=question, reply_markup=keyboard
#не срабатывает этот метод, кнопки yes1 and no1 не обрабатываются.
@bot.callback_query_handler(func=lambda call: True)
def callback_worker1(call):
if call.data == "yes1":
bot.send_message(call.message.chat.id,
'Необходимо дождаться завершения оплаты. Если в течении часа не пройдет платеж, '
'то проверьте'
'исправность мобильного банка и напишите менеджеру: ');
elif call.data == "no1":
bot.send_message(call.message.chat.id, 'Обращайтесь к менеджеру: ');
bot.polling(none_stop=True, interval=0)
Помогите, пожалуйста, пишу бота на питоне и проблема с последним методом - кнопки не обрабатываются
Ответы (1 шт):
Автор решения: Aleksandr Fetisov
→ Ссылка
Ошибка тут падает потому что два обработчика callback_query_handler с одинаковым приоритетом и функцией-предикатом, применяемой ко всем входящим callback-запросам. Поэтому только первый обработчик будет срабатывать на все запросы + должны быть обработаны вторым обработчиком.
Можно исправить так
@bot.callback_query_handler(func=lambda call: call.data == 'yes' or call.data == 'no')
def callback_worker(call):
# ...
@bot.callback_query_handler(func=lambda call: call.data == 'yes1' or call.data == 'no1')
def callback_worker1(call):
# ...