Взаимодействие с клавиатурой
Помогите пожалуйста решить проблему с записью бота на айограмму. Сама суть в следующем. Есть меню настроек, в котором вы можете выбрать валюту из представленного списка (скриншот приложу ниже). При нажатии любой из кнопок значение выбранной валюты должно передаваться на обычную кнопку меню. Если можно то с примерами буду признателен, или подскажите, в каком направлении двигаться .. В итоге должны получить 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()