{"id":13988882,"url":"https://github.com/pystorage/pykeyboard","last_synced_at":"2025-07-22T09:31:36.973Z","repository":{"id":38101665,"uuid":"271168731","full_name":"pystorage/pykeyboard","owner":"pystorage","description":"Best Keyboard and Pagination for the Pyrogram Library.","archived":false,"fork":false,"pushed_at":"2023-08-07T16:34:23.000Z","size":325,"stargazers_count":83,"open_issues_count":0,"forks_count":20,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-17T01:37:05.842Z","etag":null,"topics":["bot","keyboard","pagination","pyrogram","telegram","userbot"],"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/pystorage.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-06-10T03:21:19.000Z","updated_at":"2025-06-06T13:10:59.000Z","dependencies_parsed_at":"2024-01-15T16:52:33.904Z","dependency_job_id":null,"html_url":"https://github.com/pystorage/pykeyboard","commit_stats":{"total_commits":61,"total_committers":2,"mean_commits":30.5,"dds":0.08196721311475408,"last_synced_commit":"779af9144b24621bcb968029c6e86ce37c4a62ee"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/pystorage/pykeyboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystorage%2Fpykeyboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystorage%2Fpykeyboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystorage%2Fpykeyboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystorage%2Fpykeyboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pystorage","download_url":"https://codeload.github.com/pystorage/pykeyboard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pystorage%2Fpykeyboard/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266465096,"owners_count":23933065,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bot","keyboard","pagination","pyrogram","telegram","userbot"],"created_at":"2024-08-09T13:01:25.046Z","updated_at":"2025-07-22T09:31:36.544Z","avatar_url":"https://github.com/pystorage.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\r\n\u003cp align=\"center\"\u003e\r\n\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/logo.png\" alt=\"pykeyboard\"\u003e\r\n\u003c/p\u003e\r\n\r\n![PyPI](https://img.shields.io/pypi/v/pykeyboard)\r\n[![Downloads](https://pepy.tech/badge/pykeyboard)](https://pepy.tech/project/pykeyboard)\r\n![GitHub](https://img.shields.io/github/license/pystorage/pykeyboard)\r\n\r\n \u003cp\u003e\u003ch2\u003e🎉 Thank you for 1M downloads 🎉 I love you...🥰\u003c/h2\u003e\u003c/p\u003e\r\n\r\n\u003c/div\u003e\r\n\r\n# Pykeyboard\r\n\r\n- [\u003cb\u003eWhat's new?\u003c/b\u003e](#whats-new)\r\n- [\u003cb\u003eInstallation\u003c/b\u003e](#installation)\r\n- [\u003cb\u003eDocumentation\u003c/b\u003e](#documentation)\r\n  - [\u003cb\u003eInline Keyboard\u003c/b\u003e](#inline-keyboard)\r\n    - [Inline Keyboard add buttons](#inline-keyboard-add-buttons)\r\n    - [Inline Keyboard row buttons](#inline-keyboard-row-buttons)\r\n    - [\u003cb\u003ePagination inline keyboard\u003c/b\u003e](#pagination-inline-keyboard)\r\n      - [Pagination 3 pages](#pagination-3-pages)\r\n      - [Pagination 5 pages](#pagination-5-pages)\r\n      - [Pagination 9 pages](#pagination-9-pages)\r\n      - [Pagination 100 pages](#pagination-100-pages)\r\n      - [Pagination 150 pages and buttons](#pagination-150-pages-and-buttons)\r\n    - [\u003cb\u003eLanguages inline keyboard\u003c/b\u003e](#languages-inline-keyboard)\r\n  - [\u003cb\u003eReply Keyboard\u003c/b\u003e](#reply-keyboard)\r\n    - [Reply Keyboard add buttons](#reply-keyboard-add-buttons)\r\n    - [Reply Keyboard row buttons](#reply-keyboard-row-buttons)\r\n\r\n# What's new?\r\n\r\n- Overriding the \u003cb\u003eKeyboardButton\u003c/b\u003e, \u003cb\u003eReplyKeyboardRemove\u003c/b\u003e, \u003cb\u003eForceReply\u003c/b\u003e, \u003cb\u003eInlineKeyboardButton\u003c/b\u003e methods in \u003cb\u003eReplyButton\u003c/b\u003e, \u003cb\u003eReplyKeyboardRemove\u003c/b\u003e, \u003cb\u003eForceReply\u003c/b\u003e, \u003cb\u003eInlineButton\u003c/b\u003e.\r\n- Added new method \u003cb\u003eInlineKeyboard\u003c/b\u003e. To send \u003ca href=\"#languages-inline-keyboard\"\u003e\u003cins\u003elanguage selection keyboard\u003c/ins\u003e\u003c/a\u003e.\r\n- Minor changes due to update in Pyrogram.\r\n\r\n# Installation\r\n\r\n```shell\r\npip install pykeyboard\r\n```\r\n\r\n# Documentation\r\n\r\n## Inline Keyboard\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n```\r\n\r\n##### Parameters:\r\n\r\n- row_width (integer, default 3)\r\n\r\n### Inline Keyboard add buttons\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard, InlineButton\r\n\r\n\r\nkeyboard = InlineKeyboard(row_width=3)\r\nkeyboard.add(\r\n    InlineButton('1', 'inline_keyboard:1'),\r\n    InlineButton('2', 'inline_keyboard:2'),\r\n    InlineButton('3', 'inline_keyboard:3'),\r\n    InlineButton('4', 'inline_keyboard:4'),\r\n    InlineButton('5', 'inline_keyboard:5'),\r\n    InlineButton('6', 'inline_keyboard:6'),\r\n    InlineButton('7', 'inline_keyboard:7')\r\n)\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/add_inline_button.png\" alt=\"add_inline_button\"\u003e\u003c/p\u003e\r\n\r\n### Inline Keyboard row buttons\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard, InlineButton\r\n\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.row(InlineButton('1', 'inline_keyboard:1'))\r\nkeyboard.row(\r\n    InlineButton('2', 'inline_keyboard:2'),\r\n    InlineButton('3', 'inline_keyboard:3')\r\n)\r\nkeyboard.row(InlineButton('4', 'inline_keyboard:4'))\r\nkeyboard.row(\r\n    InlineButton('5', 'inline_keyboard:5'),\r\n    InlineButton('6', 'inline_keyboard:6')\r\n)\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/row_inline_button.png\" alt=\"row_inline_button\"\u003e\u003c/p\u003e\r\n\r\n### Pagination inline keyboard\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n```\r\n\r\n#### Parameters:\r\n\r\n- count_pages (integer)\r\n- current_page (integer)\r\n- callback_pattern (string) - use of the `{number}` pattern is \u003cins\u003erequired\u003c/ins\u003e\r\n\r\n#### Pagination 3 pages\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.paginate(3, 3, 'pagination_keyboard:{number}')\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/pagination_keyboard_3.png\" alt=\"pagination_keyboard_3\"\u003e\u003c/p\u003e\r\n\r\n#### Pagination 5 pages\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.paginate(5, 3, 'pagination_keyboard:{number}')\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/pagination_keyboard_5.png\" alt=\"pagination_keyboard_5\"\u003e\u003c/p\u003e\r\n\r\n#### Pagination 9 pages\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.paginate(9, 5, 'pagination_keyboard:{number}')\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/pagination_keyboard_9.png\" alt=\"pagination_keyboard_9\"\u003e\u003c/p\u003e\r\n\r\n#### Pagination 100 pages\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.paginate(100, 100, 'pagination_keyboard:{number}')\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/pagination_keyboard_100.png\" alt=\"pagination_keyboard_100\"\u003e\u003c/p\u003e\r\n\r\n#### Pagination 150 pages and buttons\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard, InlineButton\r\n\r\nkeyboard = InlineKeyboard()\r\nkeyboard.paginate(150, 123, 'pagination_keyboard:{number}')\r\nkeyboard.row(\r\n    InlineButton('Back', 'pagination_keyboard:back'),\r\n    InlineButton('Close', 'pagination_keyboard:close')\r\n)\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/pagination_keyboard_150.png\" alt=\"pagination_keyboard_150\"\u003e\u003c/p\u003e\r\n\r\n### Languages inline keyboard\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n```\r\n\r\n#### Parameters:\r\n\r\n- callback_pattern (string) - use of the `{locale}` pattern is \u003cins\u003erequired\u003c/ins\u003e\r\n- locales (string | list) - list of language codes\r\n  - be_BY - Belarusian\r\n  - de_DE - German\r\n  - zh_CN - Chinese\r\n  - en_US - English\r\n  - fr_FR - French\r\n  - id_ID - Indonesian\r\n  - it_IT - Italian\r\n  - ko_KR - Korean\r\n  - tr_TR - Turkish\r\n  - ru_RU - Russian\r\n  - es_ES - Spanish\r\n  - uk_UA - Ukrainian\r\n  - uz_UZ - Uzbek\r\n- row_width (integer, default 2)\r\n\u003cp\u003eP.S. To add new languages, write to me in \u003ca href=\"https://t.me/pymaster\"\u003e@PyMaster\u003c/a\u003e telegram.\u003c/p\u003e\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import InlineKeyboard\r\n\r\n\r\nkeyboard = InlineKeyboard(row_width=3)\r\nkeyboard.languages(\r\n    'languages:{locale}', ['en_US', 'ru_RU', 'id_ID'], 2\r\n)\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/languages_keyboard.png\" alt=\"languages_keyboard\"\u003e\u003c/p\u003e\r\n\r\n## Reply Keyboard\r\n\r\n```python\r\nfrom pykeyboard import ReplyKeyboard\r\n```\r\n\r\n#### Parameters:\r\n\r\n- resize_keyboard (bool, optional)\r\n- one_time_keyboard (bool, optional)\r\n- selective (bool, optional)\r\n- row_width (integer, default 3)\r\n\r\n### Reply Keyboard add buttons\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import ReplyKeyboard, ReplyButton\r\n\r\n\r\nkeyboard = ReplyKeyboard(row_width=3)\r\nkeyboard.add(\r\n    ReplyButton('Reply button 1'),\r\n    ReplyButton('Reply button 2'),\r\n    ReplyButton('Reply button 3'),\r\n    ReplyButton('Reply button 4'),\r\n    ReplyButton('Reply button 5')\r\n)\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/add_reply_button.png\" alt=\"add_reply_button\"\u003e\u003c/p\u003e\r\n\r\n### Reply Keyboard row buttons\r\n\r\n#### Code\r\n\r\n```python\r\nfrom pykeyboard import ReplyKeyboard, ReplyButton\r\n\r\n\r\nkeyboard = ReplyKeyboard()\r\nkeyboard.row(ReplyButton('Reply button 1'))\r\nkeyboard.row(\r\n    ReplyButton('Reply button 2'),\r\n    ReplyButton('Reply button 3')\r\n)\r\nkeyboard.row(ReplyButton('Reply button 4'))\r\nkeyboard.row(ReplyButton('Reply button 5'))\r\n```\r\n\r\n#### Result\r\n\r\n\u003cp\u003e\u003cimg src=\"https://raw.githubusercontent.com/pystorage/pykeyboard/master/docs/source/images/row_reply_button.png\" alt=\"row_reply_button\"\u003e\u003c/p\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpystorage%2Fpykeyboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpystorage%2Fpykeyboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpystorage%2Fpykeyboard/lists"}