Задать вопрос
@crjkmrj

Не выполгяется последняя часть кода @bot.callback_query_handler(func=lambda call:True) def callback2(call): почему и как исправить?

import telebot
from telebot import types
bot = telebot.TeleBot('5780965558:AAGqFh7GEhNfg13rZ1_6q9PnbE')

@bot.message_handler(commands=['start'])
def button(message):

markup = types.InlineKeyboardMarkup(row_width=1)
gotov = types.InlineKeyboardButton('Готов', callback_data='gotov')
markup.add(gotov)
bot.send_message(message.chat.id, 'Привет, этот бот подсчтывает насколько ты хорош. Если готов жми на кнопку.', reply_markup=markup)

@bot.callback_query_handler(func=lambda call:True)
def callback(call):
if call.data == 'gotov':

markup = types.InlineKeyboardMarkup(row_width=2)
item = types.InlineKeyboardButton('4', callback_data='question1')
item2 = types.InlineKeyboardButton('3', callback_data='question2')
markup.add(item, item2)

bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=markup,
text='Вопрос_1: 2+2:')

@bot.callback_query_handler(func=lambda call:True) не работает
def callback2(call):
if call.data == 'question1':

markup = types.InlineKeyboardMarkup(row_width=2)
yes = types.InlineKeyboardButton('10', callback_data='yes')
no = types.InlineKeyboardButton('9', callback_data='no')
markup.add(yes, no)

bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=markup,
text='Вопрос_2: 5+5')
else:

markup = types.InlineKeyboardMarkup(row_width=2)
yes = types.InlineKeyboardButton('10', callback_data='yes')
no = types.InlineKeyboardButton('9', callback_data='no')
markup.add(yes, no)

bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=markup,
text='Вопрос_2: 5+5')

bot.polling()
  • Вопрос задан
  • 843 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
@bot.callback_query_handler(func=lambda call:True)
func говорит боту, когда вызывать обработчик. Бот вызывает только ОДИН обработчик (первый подходящий).
func=lambda call:True означает, что обработчик должен вызываться для ВСЕХ кнопок.
Научись различать обработчики по call.data. Например, пусть у одной группы кнопок data начинается с "foo.", а у другой - с "bar.".
item = types.InlineKeyboardButton('4', callback_data='foo.question1')
item2 = types.InlineKeyboardButton('3', callback_data='foo.question2')

gotov = types.InlineKeyboardButton('Готов', callback_data='bar.gotov')

Тогда ты сможешь прописать два обработчика:
@bot.callback_query_handler(func=lambda call:call.data.startswith('foo.'))

и
@bot.callback_query_handler(func=lambda call:call.data.startswith('bar.'))


Разумеется, вместо foo и bar можно придумать свои префиксы, в том числе многоуровневые (типа callback_data='questions.q1.answer1').
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nki
@nki
bezkart.ru готовая система лояльности
У вас два обработчика
@bot.callback_query_handler(func=lambda call:True)
Какой из них должен срабатывать и при каких условиях?

P.S. просто ради интереса - сколько по времени вы изучаете python?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы