@silmar13

InlineKeyboard. Как отловить и передать значение кнопки при нажатии?

Просьба сильно не ругать. Делаю первого бота и застрял на одном месте.
Есть словарь, ключ(город) должна быть кнопкой. В зависимости от того, на какую кнопку(ключ) нажали, бот должен отправлять значение из словаря. Но не могу разобраться, как именно получить значение выбранной кнопки.
Собственно вопрос: как получить значение выбранной кнопки(name_project_btn) и передать в следующий handler?

data = {'Москва': {'1546949': 211.0}}

# Создание кнопок
@bot.message_handler(commands=['start'])
def start_programm(message):
    keyboard = telebot.types.InlineKeyboardMarkup()
    for name_project_btn in data:
        key = telebot.types.InlineKeyboardButton(
            text=name_project_btn, callback_data='get_mark')
        keyboard.add(key)

    bot.send_message(message.from_user.id, text='Выберите проект',
                     reply_markup=keyboard)

# Получение значения копки(ключа словаря)
@bot.callback_query_handler(func=lambda call: True)
def callback_btn(call):
    if call.data == 'get_mark':
        bot.answer_callback_query(call.id, text="Проект выбран")


# Получение ответа(баллов)
@bot.message_handler(content_types=['text'])
def get_id(id_msg):
    ids = int(id_msg.text)
    ans = f"Количество баллов - {data['Москва'][ids]}"
    bot.send_message(id_msg.chat.id, ans)
  • Вопрос задан
  • 862 просмотра
Пригласить эксперта
Ответы на вопрос 1
@kirillinyakin
@bot.callback_query_handler(func=lambda call: call.data == 'get_mark') 
def callback_btn(call): 
    answer = str(data[call.text])
    bot.answer_callback_query(call.id, text=answer)

Надеюсь, я правильно Вас понял
Ответ написан
Ваш ответ на вопрос

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

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