Skip to content

PyKeyboard

pykeyboard

Modern, Type-Safe Keyboard Library for Kurigram

Install Quick Start GitHub


Features

  • 50+ Languages

Comprehensive locale support with native names and flag emojis

  • Smart Pagination

Automatic page navigation with duplicate prevention and LRU caching

  • Builder & Factory

Fluent KeyboardBuilder API and one-line KeyboardFactory presets

  • Hooks & Validation

Rule-based button validation and transforms via ButtonValidator

  • Structured Errors

Typed error classes with error_code, param, value, and reason

  • Full Pyrogram Compat

Drop-in reply_markup= support with zero adapter code


Quick Examples

from pykeyboard import InlineKeyboard, InlineButton

keyboard = InlineKeyboard()
keyboard.add(
    InlineButton("👍 Like", "action:like"),
    InlineButton("👎 Dislike", "action:dislike"),
    InlineButton("📊 Stats", "action:stats"),
)

await message.reply_text("What do you think?", reply_markup=keyboard)
from pykeyboard import ReplyKeyboard, ReplyButton

keyboard = ReplyKeyboard(resize_keyboard=True, one_time_keyboard=True)
keyboard.add(
    ReplyButton("Yes"),
    ReplyButton("No"),
    ReplyButton("Maybe"),
)

await message.reply_text("Choose:", reply_markup=keyboard)
from pykeyboard import KeyboardBuilder, InlineKeyboard

kb = (
    KeyboardBuilder(InlineKeyboard())
    .add_row("✅ Yes", "❌ No")
    .add_row("🤔 Maybe")
    .build()
)
from pykeyboard import KeyboardFactory

kb = KeyboardFactory.create_confirmation_keyboard(
    yes_text="✅ Confirm",
    no_text="❌ Cancel",
)

Architecture

graph LR
    A[Your Bot] --> B[InlineKeyboard / ReplyKeyboard]
    A --> C[KeyboardBuilder]
    A --> D[KeyboardFactory]
    C --> B
    D --> B
    B --> E[Pyrogram]
    F[ButtonValidator] -.-> C
    G[KeyboardHookManager] -.-> C
Layer Components
Core InlineKeyboard, ReplyKeyboard, InlineButton, ReplyButton
Builder KeyboardBuilder — fluent API with chaining
Factory KeyboardFactory — one-line keyboard presets
Hooks ButtonValidator, KeyboardHookManager
Errors PyKeyboardError hierarchy with structured data
Locale 50+ built-in locales + custom locale registration

Community & Support


Made with ❤ for the Telegram bot development community

MIT License — View on GitHub