Skip to content

About

Binary serialization for aiogram 3.x CallbackData

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

aiogram-bincallback

PyPI version Python versions License aiogram

Bitwise serialization of CallbackData for aiogram 3.x instead of the text format prefix:field1:field2. Each field occupies a fixed number of bits - more data fits into the Telegram limit (64 bytes), and the payload size is known at class definition time.

Installation

pip install aiogram-bincallback

Dependencies: aiogram>=3.0,<4.0, pydantic>=2.0,<3.0, Python 3.8+.

from enum import Enum, IntEnum

from aiogram_bincallback import BinaryCallbackData, bfield


class CbPrefix(IntEnum):
    ORDER = 1
    HOME = 2


class Status(str, Enum):
    PENDING = "pending"
    SHIPPED = "shipped"


class OrderCb(BinaryCallbackData, prefix=CbPrefix.ORDER.value, version=1):
    order_id: int = bfield(bits=16, signed=False)
    status: Status = bfield(bits=4)

prefix and version are class inheritance arguments, not model fields. Both are required.

cb = OrderCb(order_id=42, status=Status.PENDING)
packed = cb.pack()
restored = OrderCb.unpack(packed)

OrderCb is simultaneously a pydantic.BaseModel and an aiogram.CallbackData, used in filters like a regular CallbackData:

from aiogram import Router

router = Router()


@router.callback_query(OrderCb.filter())
async def handle_order(callback, callback_data: OrderCb):
    ...

Documentation

About

Binary serialization for aiogram 3.x CallbackData

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages