python aiogram 3.x | Как разнести данные по кнопкам для telegram?
У меня есть код, который запрашивает данные с сайта в виде текстовых значений (всего 8 значений). Как сделать, чтобы получилось 1 кнопка = 1 значение (по порядку). Заранее извиняюсь за тупняк, я новичок
Данные приходят через код:
class Reg(StatesGroup):
name = State()
name1 = State()
@dp.message(StateFilter(Reg.name1))
async def processing_code(message: Message,
state: FSMContext,
) -> None:
await state.update_data(name1=message.text)
await state.set_state(None)
data = await state.get_data()
async with "" as api:
await api.update_assets()
try:
response = await api.fetch_***(data['name1'])
except .errors.PlayerDoesNotExistError:
return message.answer("")
except KeyError:
return message.answer("")
except .errors.GameMaintenanceError:
return message.answer("")
except ValueError:
return message.answer("")
for character in response.characters:
markup = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='аыпыке', callback_data='character1'), InlineKeyboardButton(text='кыпавпа', callback_data='character2')],
[InlineKeyboardButton(text='текст', callback_data='character3'), InlineKeyboardButton(text='текст12', callback_data='character4')],
[InlineKeyboardButton(text='текс3434т', callback_data='character5'), InlineKeyboardButton(text='текст232', callback_data='character6')],
[InlineKeyboardButton(text='теdft434т', callback_data='character7'), InlineKeyboardButton(text='тек3432', callback_data='character8')]],
resize_keyboard=True,
one_time_keyboard=True
)
return message.answer("Выберите персонажа", reply_markup=markup)
character.name
включает в себя 8 текстовых значений (имена персонажей)
Должно быть 8 кнопок соответствующих имени персонажа
Ответы (1 шт):
Автор решения: Dezmonder
→ Ссылка
У вас правильная идея, использовать цикл for
. Просто вы для каждого персонажа генерируете клавиатуру целиком (ещё похоже на ошибку отступа).
Вам нужна конструкция примерно такая
buttons = []
for character in response.characters:
buttons.append(InlineKeyboardButton(text=character.name, callback_data=character.num))
markup = InlineKeyboardMarkup(inline_keyboard=buttons, resize_keyboard=True, one_time_keyboard=True)
Главное, отправлять сообщение и формировать клавиатуру вне цикла