@Jjran

@callback_query_handler, в чем я ошибаюсь?

Нужно сделать простой бот который делает опрос и сохраняет ответы в массив.
Делаю меняю с несколькими уровнями вложенности из кнопок, два уровня получается, а дальше не понимаю, не переходит на следующую функцию.
в конце второй функции ошибка, как переписать правильно bot.send_message(call.message.chat.id, mes_machine, reply_markup=buttons_machine) чтобы переносило на обработку третьей функции?

@bot.message_handler(commands=['start'])
def selects_an_employee(message):
    """Функция, которая отвчает за вывод кнопок с сотрудниками"""
    mes = 'Сотрудник'
    buttons_employee = get_buttons(list_of_employees)

    bot.send_message(message.chat.id, mes, reply_markup=buttons_employee) 

@bot.callback_query_handler(func=lambda call: True)
def selects_the_machine(call):
    """Функция, которая отвечает за выбор станка"""
    mes_machine = 'Станок'
    buttons_machine = get_buttons(list_of_machines)

    bot.send_message(call.message.chat.id, mes_machine, reply_markup=buttons_machine)  # вывод меню пользователю


@bot.callback_query_handler(func=lambda callback_data: True)
def selects_a_part(call):
    """Функиця которая принимает список с наваниями деталей, выводит их на экран, и возвращает выбранную"""
    mes_part = 'Деталь'
    buttons_parts = get_buttons(list_of_parts)

    # bot.send_message(message.chat.id, mes, reply_markup=buttons_machines)
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=mes_part,
                          reply_markup=buttons_parts)
  • Вопрос задан
  • 423 просмотра
Решения вопроса 1
@lob4Noff
Python считывает Ваш код сверху вниз, и он передаёт call в первый callback_handler (собственно, он должен быть единственным).

Ознакомьтесь более подробно с callback.data, чтобы использовать инлайн-клавиатуры и передавать функции в них.

Возможное решение Вашей проблемы:

...
@bot.message_handler(commands=['start'])
def selects_an_employee(message):
    """Функция, которая отвечает за вывод кнопок с сотрудниками"""
    mes = 'Сотрудник'
    buttons_employee = get_buttons(list_of_employees)

    bot.send_message(message.chat.id, mes, reply_markup=buttons_employee) 

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == 'stanok': # если callback кнопки равен этому значению
        mes_machine = 'Станок'
        buttons_machine = get_buttons(list_of_machines)

        bot.send_message(call.message.chat.id, mes_machine, reply_markup=buttons_machine)  # вывод меню пользователю

    if call.data == 'detal': # условие, аналогичное условию выше
        mes_part = 'Деталь'
        buttons_parts = get_buttons(list_of_parts)

        # bot.send_message(message.chat.id, mes, reply_markup=buttons_machines)
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=mes_part,
                          reply_markup=buttons_parts)
...

Также было бы интересно посмотреть на функцию get_buttons().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы