v0.3.x · pykeyboard

Hooks & Validation

pykeyboard validates callback data before sending to Telegram and exposes hooks to transform buttons at serialisation time.

Callback Data Limits

Telegram enforces a 64-byte limit on callback_data. pykeyboard checks the UTF-8 byte length at construction time and raisesValueError for oversized data. In v0.3.x, truncation slices by character count (fixed in v0.5.0 to slice by bytes).

from pykeyboard import InlineButton

# This raises ValueError — too long
InlineButton("X", callback_data="a" * 65)

# Safe — 12 bytes
InlineButton("X", callback_data="action:12345")

Pre-send Hook

Register a callable on the keyboard to transform every button before serialisation — useful for adding per-button tracking prefixes.

from pykeyboard import InlineKeyboard, InlineButton

kb = InlineKeyboard()
kb.add(InlineButton("Pay", callback_data="pay"))

def add_user_prefix(button, user_id: int):
    if button.callback_data:
        button.callback_data = f"{user_id}:{button.callback_data}"
    return button

# Apply before sending
personalised = kb.apply(add_user_prefix, user_id=42)

Button Utilities

from pykeyboard import Button

# Generic Button — wraps InlineButton or ReplyButton
btn = Button("Click", callback_data="click")   # → InlineButton
btn = Button("Reply", request_contact=True)      # → ReplyButton