Skip to main content

A simple library for aiogram that allows you to easily do pagination for any Inline keyboards.

Project description

aiogram-inline-paginations

Description

A simple library for aiogram that allows you to easily do pagination for any Inline keyboards.

Install for pip:

pip install aiogram-inline-paginations

Install for poetry:

poetry add aiogram-inline-paginations

Create paginations object

from aiogram_inline_paginations.paginator import Paginator
from aiogram import types

kb = types.InlineKeyboardMarkup()
paginator = Paginator(data=kb, size=5)

Params

data: Any ready-to-use keyboard InlineKeyboardMarkup or any iterable object with InlineKeyboardButton.

size: The number of rows of buttons on one page, excluding the navigation bar.

Return

A paginator object that, when called, returns a ready-made keyboard with pagination.

Get data for registrations handler paginator

from aiogram_inline_paginations.paginator import Paginator
from aiogram import types

kb = types.InlineKeyboardMarkup()
paginator = Paginator(data=kb, size=5)


@dp.message_handler()
async def some_func(message: types.Message):
    await message.answer(
        text='Some menu',
        reply_markup=paginator()
    )

Return paginator_handler()

Data for registrations paginator.

Example

import random

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters import CommandStart
from aiogram.utils.executor import Executor

from aiogram_inline_paginations.paginator import Paginator

token = 'your token'

storage = MemoryStorage()
bot = Bot(token=token)
dp = Dispatcher(bot, storage=storage)


@dp.message_handler(CommandStart(), state='*')
async def start(message: types.Message):
    await message.answer('Hello text')

    kb = types.InlineKeyboardMarkup()  # some keyboard

    '''To demonstrate, I will add more than 50 buttons to the keyboard and divide them into 5 lines per page'''
    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data='pass'
            ) for i in range(2)
        ]
    )

    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data='pass'
            ) for i in range(3)
        ]
    )

    kb.add(
        types.InlineKeyboardButton(
            text=str(random.randint(1000000, 10000000)),
            callback_data='pass'
        )
    )

    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data='pass'
            ) for i in range(2)
        ]
    )

    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data='pass'
            ) for i in range(50)
        ]
    )

    paginator = Paginator(data=kb, size=5, dp=dp)

    await message.answer(
        text='Some menu',
        reply_markup=paginator()
    )


if __name__ == '__main__':
    Executor(dp).start_polling()

Check box paginations exemple

import random

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import CommandStart, Text
from aiogram.utils.executor import Executor

from aiogram_inline_paginations.paginator import CheckBoxPaginator

token = 'your token'

storage = MemoryStorage()
bot = Bot(token=token)
dp = Dispatcher(bot, storage=storage)


@dp.message_handler(CommandStart(), state='*')
async def start(message: types.Message):
    await message.answer('Hello text')

    kb = types.InlineKeyboardMarkup()  # some keyboard
    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'
            ) for i in range(2)
        ]
    )
    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'
            ) for i in range(3)
        ]
    )
    kb.add(
        types.InlineKeyboardButton(
            text=str(random.randint(1000000, 10000000)),
            callback_data=f'pass_{str(random.randint(1000000, 10000000))}'
        )
    )
    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'
            ) for i in range(2)
        ]
    )
    kb.add(
        *[
            types.InlineKeyboardButton(
                text=str(random.randint(1000000, 10000000)),
                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'
            ) for i in range(50)
        ]
    )
    paginator = CheckBoxPaginator(
        data=kb,
        size=5,
        callback_startswith='page_',
        callback_startswith_button='pass_',
        confirm_text='Approve',
        dp=dp
    )
    await message.answer(
        text='Some menu',
        reply_markup=paginator()
    )


@dp.callback_query_handler(Text(startswith='Approve', endswith='confirm'))
async def approve(call: types.CallbackQuery, state: FSMContext):
    data = await state.get_data()
    selected = data.get('page_selected', None)
    await call.answer(
        text='Your selected"\n'.join(selected)
    )


if __name__ == '__main__':
    Executor(dp).start_polling()

confirim callback:

f"{confirm_text}confirm"

selected data:

data = await state.get_data()
selected = data.get(f'{startswith}selected', None)

Screenshots

First page:

img_1.png

Second page:

img_2.png

Last page:

img_3.png

The order of entries is not lost.

License MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiogram_inline_paginations-0.1.11.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file aiogram_inline_paginations-0.1.11.tar.gz.

File metadata

File hashes

Hashes for aiogram_inline_paginations-0.1.11.tar.gz
Algorithm Hash digest
SHA256 0c237d0d5f3da848a04ab00032120f4c1a1aea6466e28a20e78b05a8ad3e6b85
MD5 41d1af29d2d8b76cf100dc0bb7f8a740
BLAKE2b-256 2c53d55045d5c0c103c19c1672a7b0fff88786e0a06ece927325b9c129f2980b

See more details on using hashes here.

File details

Details for the file aiogram_inline_paginations-0.1.11-py3-none-any.whl.

File metadata

File hashes

Hashes for aiogram_inline_paginations-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 cb99f5372d09afb9b259dfb29ff7d9271f6a3632049cee40feff3f628f92ef4c
MD5 f95900d167cb6d19c089c1fe723dc964
BLAKE2b-256 a577aefb7e842ed993e9a437a58bc31e6994bfd1eaf44b1650c1d06440d34d29

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page