Observed since 21 Oct, 11:38 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Modern, fast, fully asynchronous Python framework for Bale Messenger.
Modern, fast, fully asynchronous Python framework for Bale Messenger.
📖 Interactive Documentation • 📦 PyPI Package • 🚀 Quickstart • ✨ Key Features • 📁 Ready Examples
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.
asyncio for non-blocking I/O and high concurrency.Conversation): Multi-step question & answer wizard flows with async context managers (async with client.conversation(...) as conv:).iter_messages): Asynchronously iterate and paginate through chat message histories with automated deduplication and chunking.State, StatesGroup, MemoryStorage, and persistent SQLiteStorage.BaseMiddleware and the built-in MessageThrottler.InlineKeyboardMarkup, ReplyKeyboardMarkup, and KeyboardPaginator for multi-page menus.F) & Text Filters: Filter events effortlessly with F, Command, IsMedia, TextEquals, TextContains, and logical combinators (and_f, or_f, invert_f).Router and sub-routers.AiohttpWebhookServer with secret token security for serverless and production deployments.str), Path, raw bytes, and io.BytesIO support in all sending methods, plus 1-line await message.download().aiobale startproject my_bot) and interactive phone session login (aiobale login).# 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 asaiobale:from aiobale import Client, Dispatcher, F, Conversation
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.
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()
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))
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()
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 |
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:
aiobale library created by Alireza Jahani (Enalite LD).Distributed under the MIT License. See LICENSE for more details.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.3.10 | 11 Oct 2026 | 7 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 21 Oct, 11:38 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:db53bb4d2257fc7c5fd351d1693ddc381aa830d03bc69b98c43cb3dac060dd9c