Взаимодействие с клавиатурой

Помогите пожалуйста решить проблему с записью бота на айограмму. Сама суть в следующем. Есть меню настроек, в котором вы можете выбрать валюту из представленного списка (скриншот приложу ниже). При нажатии любой из кнопок значение выбранной валюты должно передаваться на обычную кнопку меню. Если можно то с примерами буду признателен, или подскажите, в каком направлении двигаться .. В итоге должны получить BTC / RUB, BTC / KZT и т. Д.

введите описание изображения здесь

обработчик кода:

      @dp.message_handler(Command(commands=['set']))
async def setting_menu(message: types.Message):
    await message.answer("⚙ Settings", reply_markup=staye)
    await message.answer(f"{message.from_user.first_name}, you are in the settings.\n\n"
                         f"Select the currency of interest in the menu below.\n"
                         reply_markup=set_menu)

код встроенной клавиатуры:

      set_menu = InlineKeyboardMarkup(row_width=1,
                                inline_keyboard=[
                                    [
                                        InlineKeyboardButton(
                                            text="RUB",
                                            callback_data='1'
                                        ),
                                        InlineKeyboardButton(
                                            text="UAH",
                                            callback_data='2'
                                        ),
                                        InlineKeyboardButton(
                                            text="USD",
                                            callback_data='3'
                                        ),
                                        InlineKeyboardButton(
                                            text="KZT",
                                            callback_data='4'
                                        ),
                                        InlineKeyboardButton(
                                            text="BYN",
                                            callback_data='5'
                                        ),
                                    ]
                                ])

код клавиатуры по умолчанию:

      staye = ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
course = KeyboardButton(text="BTC/....")
course1 = KeyboardButton(text="test1")
course2 = KeyboardButton(text="test2")
staye.add(course, course1, course2)

1 ответ

После того, как пользователь нажимает встроенную кнопку (рубли, доллары США и т. Д.), Вы должны отправить сообщение с новой отметкой ReplyMarkup. Невозможно изменить текст на клавиатуре без отправки нового сообщения или редактирования существующего. Чтобы реализовать другой текст на клавиатуре, вы можете сделать что-то вроде

      def get_reply_markup(currency: str) -> ReplyKeyboardMarkup:
    staye = ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
    course = KeyboardButton(text=currency)
    course1 = KeyboardButton(text="test1")
    course2 = KeyboardButton(text="test2")
    staye.add(course, course1, course2)

Эту «валюту» вы можете получить из встроенного обратного вызова клавиатуры. После этого:

      @dp.callback_query_handler(*Your filtering*)
async def handler(call: types.CallbackQuery, callback_data: dict):
    currency = callback_data.get('currency')
    keyboard = get_reply_markup(currency)
    await call.message.answer(text='Some text', reply=keyboard)
    await call.answer()
Другие вопросы по тегам