@nohoda_799

Как обрабатывать всю callback_data по id в определенной Inline меню?

Есть Inline меню, которая динамически меняется в зависимости от того, есть игрок в базе или нет. Я динамически создаю меню-список с игроками и присваиваю им уникальный айди и вывожу их имена.
async def listPlayers_command(callback: types.CallbackQuery):
    user = await db.users.find_one({"user_id": callback.from_user.id})
    array = len(user["playersList"])
    if array == 0:
        await callback.message.edit_text(text='<b>Список игроков</b>', reply_markup='')
        await callback.message.answer(text='Сейчас у вас нет ни одного игрока.', reply_markup=backReplyKeyboard)
    else:
        user = await db.users.find_one({"user_id": callback.from_user.id})
        playersList = user["playersList"]
        def genmarkup(data):
            markup = InlineKeyboardMarkup()
            markup.row_width = 1 # кол-во кнопок в строке
            for i in range(len(playersList)): # цикл для создания кнопок
                markup.add(InlineKeyboardButton(user["playersList"][i]["name"], callback_data=i)) #Создаём кнопки, i[1] - название, i[2] - каллбек дата
            return markup #возвращаем клавиатуру
        await callback.message.edit_text(text=f'Список игроков', reply_markup=genmarkup(playersList))


Как мне сделать callback хендлер, который будет обрабатывать callback_data этого меню.

Пишу на aiogram и использую регистры
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Желательно хоть как-то кнопки обозначить, чтобы потом не путать. Если сделать
InlineKeyboardButton(user["playersList"][i]["name"], callback_data=f'player_{i}')

То можно сделать хэндлер
@dp.callback_query_handler(func=lambda c: c.data.startswith('player_'))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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