Задать вопрос
@artgin

Python (aiogram): Как сделать несколько сменяющихся страниц inline-кнопок?

имеется больше 100 inline-кнопок. Для лучшего восприятия хочу сделать несколько что-то вроде страниц inline-кнопок с добавлением в каждую кнопок вперед(Next) и назад(Back), соответственно, чтобы можно было листать эти страницы вперед и назад. Нигде не нашел ответа и где бы можно было почитать гайд и пр...
  • Вопрос задан
  • 3431 просмотр
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Fallervood
@Fallervood
На aiogram не подскажу конкретного решения. Но как бы сделал я на примере pytelegrambotapi.
Думаю структура будет понятна, и сможешь сделать на aiogram.

Словарь хранящий в себе user_id : Страница на которой находиться
user_page = dict
Список inline кнопок
buttons = list

Для удобства, отдельная функция для клавиатуры, куда передаем user_id
def inline_keyboard(user_id):
    markup = InlineKeyboardMarkup()
    # Достаем страницу. Будет идти с 0
    page = user_page[user_id]
    # Кол-во кнопок которые будем менять, по сути индекс. 
    step = 2
    for i in range(page, page+2):
        markup.add(buttons[i+]
    btn_next = InlineKeyboardButton(text='>', callback_data = 'next')
    btn_back = InlineKeyboardButton(text='<', callback_data = 'back')
    return markup


Соответственно в обработке колбеков на next прибавляем к странице step, на back отнимаем.
После, редактируем уже существующее сообщение.
Пишем проверку, чтобы пользователь не мог выйти за рамки массива.

Вызываем где нужно
reply_markup = inline_keyboard(message.user_id)

Должно быть все просто. Удачи!
Ответ написан
Комментировать
Buchachalo
@Buchachalo
Два способа.
1) Через fsm. И через хэндлеры ловим нужное состояние. Можно прикрутить генератор кнопок и контекст передавать колбэки которые будут висеть на кнопках ну и стэйдж.

2) Ну если клавиатуры уже созданы то каждой клавиатуре дать уникальный идентификатор и опять же в колбэке передавать этот идентификатор. Написать функцию которая через хэндлер ловит все колбэки, смотрит идентификатор внутри и вызывает нужную функцию по идентификатору.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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