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