Simple keyboard helpers for aiogram 3.x
Project description
aio-kb
Simple and flexible keyboard helpers for aiogram 3.x.
aio-kb helps you create Telegram bot keyboards faster and cleaner.
Features
- Reply keyboards
- Inline keyboards
- URL buttons
- Callback buttons
- Web App buttons
- Copy text buttons
- Login URL buttons
- Contact request button
- Location request button
- Pagination keyboard
- Back / Close buttons
- Yes / No buttons
- Custom button texts
- Simple builder helpers
Installation
pip install aio-kb
Requirements
Python >= 3.10
aiogram >= 3.0.0
Quick Start
from aio_kb import reply_kb, inline_kb, Btn
menu = reply_kb([
["Start", "Help"],
["About"]
])
inline = inline_kb([
[Btn("Website", url="https://example.com")],
[Btn("Click", callback="click")]
])
Reply Keyboard
from aio_kb import reply_kb
keyboard = reply_kb([
["Menu", "Help"],
["About"]
])
Use it in a handler:
await message.answer("Choose an option:", reply_markup=keyboard)
Inline Keyboard
from aio_kb import inline_kb, Btn
keyboard = inline_kb([
[Btn("Open website", url="https://example.com")],
[Btn("Profile", callback="profile")]
])
Use it in a handler:
await message.answer("Inline menu:", reply_markup=keyboard)
URL Button
from aio_kb import inline_buttons, url_btn
keyboard = inline_buttons(
url_btn("GitHub", "https://github.com")
)
Callback Button
from aio_kb import inline_buttons, cb_btn
keyboard = inline_buttons(
cb_btn("Open menu", "menu:open")
)
Callback handler:
from aiogram import F
from aiogram.types import CallbackQuery
@router.callback_query(F.data == "menu:open")
async def open_menu(call: CallbackQuery):
await call.answer("Menu opened")
Web App Button
from aio_kb import inline_buttons, webapp_btn
keyboard = inline_buttons(
webapp_btn("Open Web App", "https://example.com/app")
)
Copy Text Button
from aio_kb import inline_buttons, copy_btn
keyboard = inline_buttons(
copy_btn("Copy code", "ABC-123")
)
Contact Button
from aio_kb import contact_kb
keyboard = contact_kb()
Custom text:
keyboard = contact_kb("📞 Send phone number")
Location Button
from aio_kb import location_kb
keyboard = location_kb()
Custom text:
keyboard = location_kb("📍 Send location")
Back / Close Buttons
from aio_kb import back_kb, close_kb, back_close_kb
back = back_kb()
close = close_kb()
both = back_close_kb()
Custom text:
keyboard = back_close_kb(
back_text="⬅️ Back",
close_text="❌ Close"
)
Yes / No Keyboard
from aio_kb import yes_no_kb
keyboard = yes_no_kb()
Custom callbacks and texts:
keyboard = yes_no_kb(
yes_callback="confirm:yes",
no_callback="confirm:no",
yes_text="✅ Yes",
no_text="❌ No"
)
Pagination
from aio_kb import pager
keyboard = pager(
page=1,
total_pages=5
)
Custom prefix:
keyboard = pager(
page=2,
total_pages=10,
prefix="products"
)
Example callback values:
products:1
products:2
products:home
products:current
Custom Language
Default texts are English, but you can use any language.
from aio_kb import yes_no_kb, back_close_kb
confirm = yes_no_kb(
yes_text="✅ Ha",
no_text="❌ Yo‘q"
)
navigation = back_close_kb(
back_text="⬅️ Orqaga",
close_text="❌ Yopish"
)
Full Bot Example
import asyncio
from os import getenv
from aiogram import Bot, Dispatcher, Router, F
from aiogram.filters import Command
from aiogram.types import Message, CallbackQuery
from dotenv import load_dotenv
from aio_kb import reply_kb, inline_kb, Btn, yes_no_kb
load_dotenv()
BOT_TOKEN = getenv("BOT_TOKEN")
router = Router()
@router.message(Command("start"))
async def start(message: Message):
keyboard = reply_kb([
["Help", "About"],
["Settings"]
])
await message.answer(
"Hello! Choose menu:",
reply_markup=keyboard
)
@router.message(F.text == "Help")
async def help_handler(message: Message):
keyboard = inline_kb([
[Btn("Open website", url="https://example.com")],
[Btn("Show profile", callback="profile:show")],
[Btn("Confirm", callback="confirm")]
])
await message.answer(
"Help menu:",
reply_markup=keyboard
)
@router.callback_query(F.data == "profile:show")
async def show_profile(call: CallbackQuery):
await call.message.answer("This is your profile.")
await call.answer()
@router.callback_query(F.data == "confirm")
async def confirm_handler(call: CallbackQuery):
await call.message.answer(
"Are you sure?",
reply_markup=yes_no_kb(
yes_callback="confirm:yes",
no_callback="confirm:no"
)
)
await call.answer()
@router.callback_query(F.data == "confirm:yes")
async def confirm_yes(call: CallbackQuery):
await call.message.answer("Confirmed!")
await call.answer()
@router.callback_query(F.data == "confirm:no")
async def confirm_no(call: CallbackQuery):
await call.message.answer("Cancelled!")
await call.answer()
async def main():
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
dp.include_router(router)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Available Imports
from aio_kb import (
Btn,
reply_kb,
reply_keyboard,
rk,
reply_buttons,
contact_kb,
location_kb,
inline_kb,
inline_keyboard,
ikb,
inline_buttons,
url_btn,
cb_btn,
webapp_btn,
switch_btn,
switch_current_btn,
copy_btn,
login_btn,
reply_builder,
inline_builder,
pager,
back_kb,
close_kb,
back_close_kb,
yes_no_kb,
social_kb,
)
License
MIT License
Author
Created by Natsu.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aio_kb-0.1.1.tar.gz.
File metadata
- Download URL: aio_kb-0.1.1.tar.gz
- Upload date:
- Size: 3.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bc55a93d66c267182f7d61c1351b74b3f2a3f83711070e5409897ede459c361
|
|
| MD5 |
44af007fde8c47fd175c6ce493d466e9
|
|
| BLAKE2b-256 |
1541f7977a6e7a9cb7d94780eb02c26738a481d8c57e0cb23a298965a7f09563
|
File details
Details for the file aio_kb-0.1.1-py3-none-any.whl.
File metadata
- Download URL: aio_kb-0.1.1-py3-none-any.whl
- Upload date:
- Size: 2.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
548c30779decd273dd23bf80f15335a399557ed0d3959d6a39da1a0cf0bb47d5
|
|
| MD5 |
100992ca6efbf509e6fd75f3f10b45e0
|
|
| BLAKE2b-256 |
440e0aa9413c02e08fcad5bdb0b5d32bd3feb2d4446357285bb13ff187d6471a
|