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:
Second page:
Last page:
The order of entries is not lost.
License MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file aiogram_inline_paginations-0.1.11.tar.gz
.
File metadata
- Download URL: aiogram_inline_paginations-0.1.11.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.8 Darwin/20.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c237d0d5f3da848a04ab00032120f4c1a1aea6466e28a20e78b05a8ad3e6b85 |
|
MD5 | 41d1af29d2d8b76cf100dc0bb7f8a740 |
|
BLAKE2b-256 | 2c53d55045d5c0c103c19c1672a7b0fff88786e0a06ece927325b9c129f2980b |
File details
Details for the file aiogram_inline_paginations-0.1.11-py3-none-any.whl
.
File metadata
- Download URL: aiogram_inline_paginations-0.1.11-py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.10.8 Darwin/20.6.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cb99f5372d09afb9b259dfb29ff7d9271f6a3632049cee40feff3f628f92ef4c |
|
MD5 | f95900d167cb6d19c089c1fe723dc964 |
|
BLAKE2b-256 | a577aefb7e842ed993e9a437a58bc31e6994bfd1eaf44b1650c1d06440d34d29 |