@ex_corpse

Как осуществить пагинацию aiogram?

@dp.callback_query_handler()
async def call_data_process(call: types.CallbackQuery):
    global COUNT
    with open("test_words.txt", "r", encoding="utf-8") as file:
        if call.data == "next":
            COUNT += 1
            if COUNT <= 100:
                await call.message.edit_caption(caption=str(file.readlines()[COUNT]), reply_markup=advanced_keyboard())
            else:
                await call.message.delete()
        if call.data == "prev":
            if COUNT > 0:
                await call.message.edit_caption(caption=str(file.readlines()[COUNT - 1]), reply_markup=advanced_keyboard())
            else:
                await call.answer("Это первое слово, предыдущего нет.")


В файле лежат 100 слов, через переменную COUNT я отправляю пользователю с помощью инлайн клавиатуры либо следующее слово, либо предыдущее.
С отправкой следующего текста никаких ошибок не возникает, но при попытке вывести предыдущее, получаю ошибку:
aiogram.utils.exceptions.MessageNotModified: Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message

Как принудительно изменить текст?
  • Вопрос задан
  • 914 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dp.callback_query_handler()
async def call_data_process(call: types.CallbackQuery):
    global COUNT
    with open("test_words.txt", "r", encoding="utf-8") as file:
        lines = file.readlines()
        pages = len(lines) // 10 + 1  # определяем количество страниц
        if call.data == "next":
            COUNT += 1
        elif call.data == "prev":
            COUNT -= 1
        COUNT = max(0, min(COUNT, pages - 1))  # ограничиваем значение счетчика до границ страниц
        start = COUNT * 10  # определяем начало и конец страницы
        end = start + 10
        text = "".join(lines[start:end])  # выбираем нужный диапазон строк
        keyboard = InlineKeyboardMarkup(row_width=2)
        if COUNT > 0:
            keyboard.add(InlineKeyboardButton("Назад", callback_data="prev"))
        if COUNT < pages - 1:
            keyboard.add(InlineKeyboardButton("Вперед", callback_data="next"))
        await call.message.edit_text(text=text, reply_markup=keyboard)
Ответ написан
Ваш ответ на вопрос

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

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