callback data не обрабатывается в telebot
Пишу код, который имеет обработку текстовых сообщений и кнопки в телеграме. Кнопки были и после обработки текста и всё работало. После того, как я обработал текст callback просто не реагирует. То ли он не поялвяется в handle_text, то ли просто код не идёт дальше. Прошу помочь и исправить мой код, сижу уже около 3 часов пытаюсь решить.
@bot.message_handler(func=lambda message: True)
def handle_text(message):
global txt
#Обработка кнопки выбора направления
direction = l[0]
print(direction)
markup = types.InlineKeyboardMarkup()
txt = message.text
# Получаем данные из веб-страницы
url = 'url'
r = requests.get(url)
soup = bs(r.text, "html.parser")
# Проверяем, является ли введенный номер числом и есть ли такой студент
if txt.isdigit() and if_misis(list_digits(soup), txt)[1] == True:
print(direction + '------------------------')
btn1 = types.InlineKeyboardButton('Плата', callback_data=f'plata-{direction}')
btn2 = types.InlineKeyboardButton('Бюджет', callback_data=f'budget-{direction}')
# Создание кнопки выбора варианта обучения
if str(markup).strip('{}').split("': ")[-1] == '[]':
markup.row(btn1, btn2)
bot.send_message(message.chat.id, 'Выбери вариант обучения', reply_markup=markup)
else:
bot.send_message(message.chat.id, 'Выбери вариант обучения', reply_markup=markup)
else:
bot.send_message(message.chat.id, "Некорректный номер, попробуй еще раз")
@bot.callback_query_handler(func=lambda callback_query: True)
def callback_message(callback_query: types.CallbackQuery, call):
#Обработка кнопки выбора вида обучения
if callback_query.data == 'plata-ivt':
print('plata-ivt')
print(callback_query.data)
# Получаем данные из веб-страницы МИСИС для платных мест
url = 'url'
r = requests.get(url)
soup = bs(r.text, "html.parser")
bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.id, text='Плата')
bot.send_message(callback_query.message.chat.id, 'Твое место: ' + printing_mesta(soup, txt))
bot.send_message(callback_query.message.chat.id,
'Если хочешь выбрать другой вариант обучения, то введи регистрационный номер еще раз')
# Обработка кнопки выбора вида обучения
elif call.data == 'budget-ivt':
print('budget-ivt')
# Получаем данные из веб-страницы МИСИС для бюджетных мест
url = 'url'
r = requests.get(url)
soup = bs(r.text, "html.parser")
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, text='Бюджет')
bot.send_message(call.message.chat.id, 'Твое место: ' + printing_mesta(soup, txt))
bot.send_message(call.message.chat.id, 'Всего мест на бюджет ' + '116')
bot.send_message(call.message.chat.id,
'Если хочешь выбрать другой вариант обучения, то введи регистрационный номер еще раз')
Ответы (2 шт):
Автор решения: Beneviento
→ Ссылка
в функции callback_message вы используете call вместо callback_query в условии elif. Также, у вас есть аргумент call в функции, который не используется
@bot.callback_query_handler(func=lambda callback_query: True)
def callback_message(callback_query: types.CallbackQuery):
# Обработка кнопки выбора вида обучения
if callback_query.data == 'plata-ivt':
print('plata-ivt')
print(callback_query.data)
# Получаем данные из веб-страницы МИСИС для платных мест
url = 'url'
r = requests.get(url)
soup = bs(r.text, "html.parser")
bot.edit_message_text(chat_id=callback_query.message.chat.id,
message_id=callback_query.message.id, text='Плата')
bot.send_message(callback_query.message.chat.id, 'Твое место: ' +
printing_mesta(soup, txt))
bot.send_message(callback_query.message.chat.id,
'Если хочешь выбрать другой вариант обучения, то введи
регистрационный номер еще раз')
# Обработка кнопки выбора вида обучения
elif callback_query.data == 'budget-ivt':
print('budget-ivt')
# Получаем данные из веб-страницы МИСИС для бюджетных мест
url = 'url'
r = requests.get(url)
soup = bs(r.text, "html.parser")
bot.edit_message_text(chat_id=callback_query.message.chat.id,
message_id=callback_query.message.id, text='Бюджет')
bot.send_message(callback_query.message.chat.id, 'Твое место: ' +
printing_mesta(soup, txt))
bot.send_message(callback_query.message.chat.id, 'Всего мест на бюджет '
+ '116')
bot.send_message(callback_query.message.chat.id,
'Если хочешь выбрать другой вариант обучения, то введи
регистрационный номер еще раз')
Автор решения: Ne Zur
→ Ссылка
Решил так: у меня до этих енопок были еще callback. Я просто вставил туда все необходимые мне callback и удалил callback_message. И всё заработало