{"id":22371319,"url":"https://github.com/daniilshamraev/aiogram-inline-paginations","last_synced_at":"2025-08-25T00:32:00.578Z","repository":{"id":45838968,"uuid":"514828560","full_name":"daniilshamraev/aiogram-inline-paginations","owner":"daniilshamraev","description":"Simple lib for generate page Inline keyboards","archived":false,"fork":false,"pushed_at":"2023-08-12T13:51:05.000Z","size":286,"stargazers_count":22,"open_issues_count":6,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-18T15:03:26.824Z","etag":null,"topics":["aiogram","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daniilshamraev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-17T11:48:59.000Z","updated_at":"2024-11-01T20:51:49.000Z","dependencies_parsed_at":"2023-02-10T04:05:11.655Z","dependency_job_id":null,"html_url":"https://github.com/daniilshamraev/aiogram-inline-paginations","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilshamraev%2Faiogram-inline-paginations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilshamraev%2Faiogram-inline-paginations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilshamraev%2Faiogram-inline-paginations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilshamraev%2Faiogram-inline-paginations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniilshamraev","download_url":"https://codeload.github.com/daniilshamraev/aiogram-inline-paginations/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230852607,"owners_count":18290081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiogram","python3"],"created_at":"2024-12-04T20:18:54.728Z","updated_at":"2024-12-22T15:54:40.149Z","avatar_url":"https://github.com/daniilshamraev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aiogram-inline-paginations\n\n## Description\n\nA simple library for aiogram that allows you to easily do pagination for any Inline keyboards.\n\nInstall for pip:\n\n```shell\npip install aiogram-inline-paginations\n```\n\nInstall for poetry:\n\n```shell\npoetry add aiogram-inline-paginations\n```\n\n## Create paginations object\n\n```python\nfrom aiogram_inline_paginations.paginator import Paginator\nfrom aiogram import types\n\nkb = types.InlineKeyboardMarkup()\npaginator = Paginator(data=kb, size=5)\n```\n\n### Params\n\n**data**: Any ready-to-use keyboard InlineKeyboardMarkup or any iterable object with InlineKeyboardButton.\n\n**size**: The number of rows of buttons on one page, excluding the navigation bar.\n\n### Return\n\nA paginator object that, when called, returns a ready-made keyboard with pagination.\n\n## Get data for registrations handler paginator\n\n```python\nfrom aiogram_inline_paginations.paginator import Paginator\nfrom aiogram import types\n\nkb = types.InlineKeyboardMarkup()\npaginator = Paginator(data=kb, size=5)\n\n\n@dp.message_handler()\nasync def some_func(message: types.Message):\n    await message.answer(\n        text='Some menu',\n        reply_markup=paginator()\n    )\n```\n\n### Return paginator_handler()\n\nData for registrations paginator.\n\n## Example\n\n```python\nimport random\n\nfrom aiogram import Bot, Dispatcher, types\nfrom aiogram.contrib.fsm_storage.memory import MemoryStorage\nfrom aiogram.dispatcher.filters import CommandStart\nfrom aiogram.utils.executor import Executor\n\nfrom aiogram_inline_paginations.paginator import Paginator\n\ntoken = 'your token'\n\nstorage = MemoryStorage()\nbot = Bot(token=token)\ndp = Dispatcher(bot, storage=storage)\n\n\n@dp.message_handler(CommandStart(), state='*')\nasync def start(message: types.Message):\n    await message.answer('Hello text')\n\n    kb = types.InlineKeyboardMarkup()  # some keyboard\n\n    '''To demonstrate, I will add more than 50 buttons to the keyboard and divide them into 5 lines per page'''\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data='pass'\n            ) for i in range(2)\n        ]\n    )\n\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data='pass'\n            ) for i in range(3)\n        ]\n    )\n\n    kb.add(\n        types.InlineKeyboardButton(\n            text=str(random.randint(1000000, 10000000)),\n            callback_data='pass'\n        )\n    )\n\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data='pass'\n            ) for i in range(2)\n        ]\n    )\n\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data='pass'\n            ) for i in range(50)\n        ]\n    )\n\n    paginator = Paginator(data=kb, size=5, dp=dp)\n\n    await message.answer(\n        text='Some menu',\n        reply_markup=paginator()\n    )\n\n\nif __name__ == '__main__':\n    Executor(dp).start_polling()\n\n```\n\n## Check box paginations exemple\n\n```python\nimport random\n\nfrom aiogram import Bot, Dispatcher, types\nfrom aiogram.contrib.fsm_storage.memory import MemoryStorage\nfrom aiogram.dispatcher import FSMContext\nfrom aiogram.dispatcher.filters import CommandStart, Text\nfrom aiogram.utils.executor import Executor\n\nfrom aiogram_inline_paginations.paginator import CheckBoxPaginator\n\ntoken = 'your token'\n\nstorage = MemoryStorage()\nbot = Bot(token=token)\ndp = Dispatcher(bot, storage=storage)\n\n\n@dp.message_handler(CommandStart(), state='*')\nasync def start(message: types.Message):\n    await message.answer('Hello text')\n\n    kb = types.InlineKeyboardMarkup()  # some keyboard\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'\n            ) for i in range(2)\n        ]\n    )\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'\n            ) for i in range(3)\n        ]\n    )\n    kb.add(\n        types.InlineKeyboardButton(\n            text=str(random.randint(1000000, 10000000)),\n            callback_data=f'pass_{str(random.randint(1000000, 10000000))}'\n        )\n    )\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'\n            ) for i in range(2)\n        ]\n    )\n    kb.add(\n        *[\n            types.InlineKeyboardButton(\n                text=str(random.randint(1000000, 10000000)),\n                callback_data=f'pass_{str(random.randint(1000000, 10000000))}'\n            ) for i in range(50)\n        ]\n    )\n    paginator = CheckBoxPaginator(\n        data=kb,\n        size=5,\n        callback_startswith='page_',\n        callback_startswith_button='pass_',\n        confirm_text='Approve',\n        dp=dp\n    )\n    await message.answer(\n        text='Some menu',\n        reply_markup=paginator()\n    )\n\n\n@dp.callback_query_handler(Text(startswith='Approve', endswith='confirm'))\nasync def approve(call: types.CallbackQuery, state: FSMContext):\n    data = await state.get_data()\n    selected = data.get('page_selected', None)\n    await call.answer(\n        text='Your selected\"\\n'.join(selected)\n    )\n\n\nif __name__ == '__main__':\n    Executor(dp).start_polling()\n```\n\nconfirim callback:\n\n```python\nf\"{confirm_text}confirm\"\n```\n\nselected data:\n\n```python\ndata = await state.get_data()\nselected = data.get(f'{startswith}selected', None)\n```\n\n## Screenshots\n\nFirst page:\n\n![img_1.png](https://github.com/daniilshamraev/aiogram-inline-paginations/blob/master/img/img_1.png?raw=true)\n\nSecond page:\n\n![img_2.png](https://github.com/daniilshamraev/aiogram-inline-paginations/blob/master/img/img_2.png?raw=true)\n\nLast page:\n\n![img_3.png](https://github.com/daniilshamraev/aiogram-inline-paginations/blob/master/img/img_3.png?raw=true)\n\n*The order of entries is not lost.*\n\n## License MIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniilshamraev%2Faiogram-inline-paginations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniilshamraev%2Faiogram-inline-paginations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniilshamraev%2Faiogram-inline-paginations/lists"}