@Ribachok

Как получить из сообщения кнопки?

Боту пересылают сообщение с кнопками, из него нужно получить текст и ссылку этих кнопок. Как?
  • Вопрос задан
  • 1259 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Makaroffka
Любитель
Делаем класс с состоянием
class Form(StatesGroup):
    primer = State()

#далее создаем кнопку
primer = types.InlineKeyboardMarkup()
primerr.add(types.InlineKeyboardButton(text="Текст кнопки ", callback_data="click"))

#действие с запоминанием введенных данных
@dp.callback_query_handler(text="click)
async def vkanale_def(message: types.Message):
	await message.reply("Введите текст")
	await Form.primer.set()
#Ловим ответ пользователя
@dp.message_handler(state=Form.tovara)
@dp.throttled(anti_flood,rate=3, )
async def tovarset(message: types.Message, state: FSMContext):
text = message.text
message.answer("Вы ввели:" + text)
#заканчиваем работу с состоянием
await state.finish()


Надеюсь помог! С отступами беда, но думаю разберетесь, если неправильно понял ответ - скажите об этом в комментарии.
Статься для аиограма: https://surik00.gitbooks.io/aiogram-lessons/content/chapter3.html
Ответ написан
@treketerer
Не уверен, что можно вытащить текст из пересланных кнопок, можно легко вытащить из собственных кнопок:

Решение на aiogram:
При создании кнопки мы записываем текст кнопки в CallBackData, потом при нажатии на кнопку просто в отдельном хендлере вытаскиваем текст:

#Создаю CallbackDat-у:
cb = CallbackData('post', 'msg_text')

#Handler, который активируется при нажатии на кнопку:
@dp.callback_query_handler(cb.filter())
async def callbacks(call: types.CallbackQuery, callback_data: dict,):
    await call.answer()
    #Вытаскиваю текст из CallbackData:
    message_text = callback_data['msg_text']

#Хендлер, который активируется по команде test:
@dp.message_handler(commands="test")
async def but(message: types.Message):
    #Создаю клавиатуру и кнопки:
    button = (types.InlineKeyboardButton(text="Привет", callback_data=cb.new(msg_text ="Привет")))
    keyboard = types.InlineKeyboardMarkup(row_width=3).add(button)
    #Отправляю сообщение с прикрепленной клавиатурой:
    await message.answer("Hi",reply_markup = keyboard)


Так же можно вывести список всех кнопок прикрепленных к сообщению:
@dp.callback_query_handler(cb.filter())
async def callbacks(call: types.CallbackQuery, callback_data: dict,):
    await call.answer()
    print(call) """Выведет json, где под его конец будет список всех кнопок. Вряд ли получиться вытащить текст нужной кнопки, но возможно вам и поможет.... Обратиться к списку можно так: call["message"]["reply_markup"]["inline_keyboard"]['Тут номер строки']['Тут номер кнопки в строке']['text'] """
Ответ написан
Ваш ответ на вопрос

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

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