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

Почему callback_query_handler в telebot не работает?

Вот сам inline вызывается:
keyboard = InlineKeyboardMarkup()
keyboard.add(InlineKeyboardButton(text='Показать аномалии', callback_data="show_anom"))
keyboard.add(InlineKeyboardButton(text='Показать сотрудников', callback_data="show_empl"))
keyboard.add(InlineKeyboardButton(text='Показать предметы', callback_data="show_items"))
bot.send_message(message.from_user.id, f'Инвентарь: \nКоличество аномалий: {str(len(json.loads(log_info(message, 4))))}\nКоличество сотрудников: {str(len(json.loads(log_info(message, 3))))}\nКоличество амуниции: {str(len(json.loads(log_info(message, 5))))}', reply_markup=keyboard)
bot.delete_message(message.chat.id, message.message_id)


А вот декоратор, который почему то не работает (даже банальный print(1) не показывает):

@bot.callback_query_handler(func=lambda callback: True)
def callback_query_handler(callback):
    print(1)
    message: Message
    if callback.data == 'show_anom':
        bot.send_message(message.chat.id, f'Список аномалий: ...')
    elif callback.data == 'show_empl':
        bot.send_message(message.chat.id, f'Список сотрудников: ...')
    elif callback.data == 'show_items':
        bot.send_message(message.chat.id, f'Список предметов: ...')
    bot.answer_callback_query(callback.id)
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
@MCfun Автор вопроса
Возможно я не совсем корректно задал вопрос. У меня в callback_query_handler даже print(1) не работает. А насчет message: Message, я просто уже несколько способов перепробовал, что в гайдах, что у ии спрашивал, все без толку.

Upd 1. Крч, я смог это сделать. Первый вариант обратки хендлера у меня был верный:

@bot.callback_query_handler(func=lambda callback: True)
def callback_query_handler(callback):
    if callback.data == 'show_anom':
        bot.send_message(callback.message.chat.id, 'Список аномалий: ...')
    elif callback.data == 'show_empl':
        bot.send_message(callback.message.chat.id, 'Список сотрудников: ...')
    elif callback.data == 'show_items':
        bot.send_message(callback.message.chat.id, 'Список предметов: ...')
    bot.answer_callback_query(callback.id)

А ошибка была в bot.infinity_polling, что у меня в конце кода. К нему надо было добавить это:
bot.infinity_polling(
    allowed_updates=['message', 'callback_query']
)

И все заработает. Хвала китайскому ии!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Вот смотри:

message: Message

Чему равно message после такой инструкции? Как по-твоему оно должно работать? Попробуй его напечатать.

Программировать нужно не методом тыка, а понимая язык, на котором пишешь.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Потому что от того, что ты написал message: Message, у тебя в обработчике волшебным образом доступ к объекту message из совсем другой (и уже отработавшей) функции не появится.
Лучше разберись, что ещё лежит в объекте callback - там вполне достаточно информации для отправки ответа.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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