Skip to main content

Aiobale

CI Test Suite PyPI Version Documentation Python License: MIT

Modern, fast, fully asynchronous Python framework for Bale Messenger.

📖 Interactive Documentation • 📦 PyPI Package • 🚀 Quickstart • ✨ Key Features • 📁 Ready Examples


🌟 Overview

Aiobale (aiobale-py) is a high-performance, asynchronous Python framework built on top of asyncio, WebSockets, and Protocol Buffers for the Bale Messenger platform. Designed with inspiration from modern bot frameworks like aiogram, it allows developers to build userbots, official bots, automated services, and group management systems with minimal resource usage and complete type safety.


✨ Key Features

  • ⚡ Fully Asynchronous: Built natively on Python asyncio for non-blocking I/O and high concurrency.
  • 💬 Interactive Conversations (Conversation): Multi-step question & answer wizard flows with async context managers (async with client.conversation(...) as conv:).
  • 📜 History Iterator (iter_messages): Asynchronously iterate and paginate through chat message histories with automated deduplication and chunking.
  • 🧠 Advanced FSM: Multi-step conversational form management with State, StatesGroup, MemoryStorage, and persistent SQLiteStorage.
  • 🛡️ Middlewares & Rate Limiter: Intercept events and prevent spam using BaseMiddleware and the built-in MessageThrottler.
  • ⌨️ Fluent Keyboards & Pagination: Chainable InlineKeyboardMarkup, ReplyKeyboardMarkup, and KeyboardPaginator for multi-page menus.
  • 🔮 Rich Magic Filter (F) & Text Filters: Filter events effortlessly with F, Command, IsMedia, TextEquals, TextContains, and logical combinators (and_f, or_f, invert_f).
  • 🔀 Modular Routing: Structure large-scale codebases across multiple files using Router and sub-routers.
  • 🌐 Webhook HTTP Server: Built-in lightweight AiohttpWebhookServer with secret token security for serverless and production deployments.
  • 📁 Smart Media & Downloads: Direct file path (str), Path, raw bytes, and io.BytesIO support in all sending methods, plus 1-line await message.download().
  • 🛠️ Command-Line CLI: Scaffolding tool (aiobale startproject my_bot) and interactive phone session login (aiobale login).
  • 🛡️ Complete RPC Coverage (80+ Methods): Full access to Messaging, Groups, Channels, Contacts, Presence, Reactions, and Wallet APIs.
  • 🧩 100% Type-Safe: Powered by Pydantic v2 for robust data validation and complete IDE autocompletion.

📦 Installation

# Install officially from PyPI
pip install aiobale-py

# Or install using the ultra-fast uv package manager
uv pip install aiobale-py

# Or install the latest development build directly from GitHub
pip install git+https://github.com/aminmadaniofficial/aiobale.git

Important: The package name on PyPI is aiobale-py, while in your Python code you import it directly as aiobale:

from aiobale import Client, Dispatcher, F, Conversation

🚀 Quickstart

Create a functional bot in less than 5 minutes:

import asyncio
from aiobale import Client, Dispatcher, F
from aiobale.types import Message
from aiobale.filters import IsText

dp = Dispatcher()
client = Client(dp, session_file="my_bot")

@dp.message(F.text == "/start")
async def start_handler(message: Message):
    await message.reply("Hello! Welcome to Aiobale 🚀")

@dp.message(IsText())
async def echo_handler(message: Message):
    await message.reply(f"You said: {message.text}")

async def main():
    print("Connecting to Bale Messenger...")
    await client.start()

if __name__ == "__main__":
    asyncio.run(main())

When you run this script for the first time in your terminal, it will interactively prompt for your phone number and SMS verification code, then persist the session in my_bot.bale for automatic reconnects.


🎯 Code Showcases

1. Interactive Linear Conversation (Wizard)

from aiobale import Client, Dispatcher, F
from aiobale.types import Message

dp = Dispatcher()
client = Client(dp, session_file="wizard_bot")

@dp.message(F.text == "/register")
async def register_flow(msg: Message, client: Client):
    async with client.conversation(msg.chat.id) as conv:
        await conv.send_message("Please enter your full name:")
        name_msg = await conv.get_response(timeout=60)

        await conv.send_message(f"Nice to meet you, {name_msg.text}! How old are you?")
        age_msg = await conv.get_response(timeout=60)

        await conv.send_message(f"Registration successful! ✅\nName: {name_msg.text}\nAge: {age_msg.text}")

if __name__ == "__main__":
    client.run()

2. Message History Pagination (iter_messages)

from aiobale import Client

client = Client(session_file="my_account")

async def backup_chat_history(chat_id: int):
    print(f"Reading message history for chat {chat_id}...")
    async for message in client.iter_messages(chat_id=chat_id, limit=50):
        if message.text:
            print(f"[{message.date}] {message.sender_id}: {message.text}")
        elif message.document:
            print(f"[{message.date}] Media attachment: {message.document.name}")

if __name__ == "__main__":
    import asyncio
    asyncio.run(backup_chat_history(123456789))

3. Persistent FSM with SQLite Storage

from aiobale import Client, Dispatcher, F
from aiobale.fsm import State, StatesGroup, FSMContext, SQLiteStorage
from aiobale.types import Message

class OrderForm(StatesGroup):
    item = State()
    address = State()

storage = SQLiteStorage("bot_orders.db")
dp = Dispatcher(storage=storage)
client = Client(dp, session_file="shop_bot")

@dp.message(F.text == "/order")
async def start_order(msg: Message, state: FSMContext):
    await state.set_state(OrderForm.item)
    await msg.reply("What item would you like to purchase?")

@dp.message(OrderForm.item)
async def process_item(msg: Message, state: FSMContext):
    await state.update_data(item_name=msg.text)
    await state.set_state(OrderForm.address)
    await msg.reply("Please provide your delivery address:")

@dp.message(OrderForm.address)
async def process_address(msg: Message, state: FSMContext):
    data = await state.get_data()
    await state.clear()
    await msg.reply(f"Order confirmed! Item: {data.get('item_name')}, Address: {msg.text}")

if __name__ == "__main__":
    client.run()

📁 Ready-to-Run Examples

The examples/ directory contains 6 complete, production-grade scripts demonstrating every core capability:

Script Description Features Covered
01_auth_and_echo.py Basics, Echo bot, and authentication CLI login, Message handlers, Replies
02_fsm_registration.py User onboarding and state machines StatesGroup, FSMContext, SQLiteStorage
03_shop_and_wallet.py E-commerce catalog & Bale wallet transfers ReplyKeyboardMarkup, CallbackData, Wallet RPC
04_webhook_and_server.py Webhook server deployment AiohttpWebhookServer, Secret Token auth
05_rate_limiting_and_middleware.py Spam prevention and middleware pipelines MessageThrottler, BaseMiddleware
06_pagination_and_keyboards.py Interactive multi-page keyboards KeyboardPaginator, Grid builders

📚 Comprehensive Documentation

The repository includes a modern, web-based interactive documentation website with zero emojis, custom Lucide icons, Dark/Light modes, live search (Ctrl+K), and reference guides for all 80+ methods:

👉 Read the Full Documentation


👥 Acknowledgements & Special Thanks

  • Maintainer & Lead Developer: Modernized, heavily refactored, debugged, and actively maintained by Amin Madani.
  • Core Foundation: Built upon the foundational work of the original aiobale library created by Alireza Jahani (Enalite LD).
  • Special Thanks (Testing & QA): Huge thanks to Mohammad Reza Taghdiri (محمدرضا تقدیری) for active participation in testing, discovering critical edge-case bugs, and contributing to library stability.

📄 License

Distributed under the MIT License. See LICENSE for more details.

Metadata

Release files for aiobale-py 0.3.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aiobale-py 0.3.10
File Size Uploaded
aiobale_py-0.3.10.tar.gz 151.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aiobale-py 0.3.10
File Interpreter ABI Platform
aiobale_py-0.3.10-py3-none-any.whl Python 3 none any Details

Total release size: 396.6 kB

Release files / aiobale_py-0.3.10.tar.gz

Download URL aiobale_py-0.3.10.tar.gz
Size 151.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9c160c549603ac09ce802c86344e0bf992723b7bc0690019e50bff97edfe2c89
BLAKE2b-256 checksum
How to use checksums
aae1777a8a49faa1003f7c9203de244ea38e39a37ae42e74717af1da7ae1d571
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release files / aiobale_py-0.3.10-py3-none-any.whl

Download URL aiobale_py-0.3.10-py3-none-any.whl
Size 245.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c4a2baafc491722f11c6f2e82e82ec2f2f67902c957651ca1d833541a3583bec
BLAKE2b-256 checksum
How to use checksums
3cb50cda9bba9e5dd2d8561e8c561e1ff8539e6d05d8db07e3a797a01033a332
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.10 This release

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page