⚡ BaleNova (بالهنوا)
فریمورک فوقسریع، ناهمگام (Async) و مدرن پایتون برای پیامرسان و سوپراپ بله
Next-Generation High-Performance Async Python Framework for Bale Messenger & SuperApp
📚 وبسایت مستندات آنلاین و راهنمای کامل:
👉 https://iliasync.github.io/balenova/
🌟 چرا BaleNova؟
- 🚫 خداحافظی با RPC و خطاهای خام سرور (Zero-RPC): دیگر نیازی به سر و کله زدن با Protobuf، ساختارهای درهمتنیده پیام، یا متدهای ناشناخته نیست. همه چیز در قالب متدهای سرراست و قابل فهم پایتون در دسترس است.
- 🦊 شناسایی خودکار سشن فایرفاکس (
Client.from_firefox()): اتصال آنی به حساب فعال شما در مرورگر Firefox (لینوکس، ویندوز و مک) بدون نیاز به دریافت کد پیامکی مجدد. - ⚡ پشتیبانی دوگانه از سینتکس Telethon و Pyrogram:
- سبک تلتون:
@app.on(events.NewMessage(pattern=r"^/start", incoming=True)) - سبک پایروگرام:
@app.on_message(filters.command("start") & filters.private)
- سبک تلتون:
- 💬 دسترسی سریع و شهودی (Dot-Access): دسترسی مستقیم به مقادیر پیام بدون باز کردن دیکشنری:
msg.text,msg.chat.title,msg.from_user.username,msg.id,msg.is_outgoing. - 🎯 متدهای کنشی روی خود شیء پیام (Active Record): پاسخ مستقیم با
await msg.reply("...")، ویرایش پیام باawait msg.edit("...")، حذف باawait msg.delete()و ریاکشن باawait msg.react("🔥"). - 🗂️ دریافت هوشمند گفتگوها (
await app.get_dialogs()): بازگرداندن اشیاء سطح بالایDialogشامل آخرین پیام، تعداد پیامهای خواندهنشده، عنوان کانال یا گروه بدون دغدغه تبدیل Peer. - 🔍 پرینت ساختاریافته و زیبا (
print(msg)): نمایش شفاف و فرمتشدهی اشیاء در لاگها و کنسول دیباگ. - 💳 پشتیبانی جامع از امکانات سوپراپ بله: کیفپول، پاکت هدیه، کارت به کارت، کیبوردهای شیشهای و اینلاین، نظرسنجی و تماسهای صوتی-تصویری WebRTC/LiveKit.
📦 نصب
pip install balenova
یا نصب آخرین نسخه مستقیم از سورس مخزن:
pip install git+https://github.com/iliasync/balenova.git
🚀 شروع سریع (Quickstart)
۱. اتصال خودکار از طریق سشن فایرفاکس (بدون کد پیامکی)
import asyncio
from balenova import Client
async def main():
# اتصال مستقیم به سشن فعال در فایرفاکس شما
app = Client.from_firefox()
async with app:
me = await app.get_me()
print(f"Logged in as: {me.full_name} (@{me.username})")
# ارسال پیام به چت شخصی (Saved Messages)
msg = await app.send_message(f"{me.id}|1", "سلام از بالهنوا 🚀")
print(f"پیام ارسال شد با شناسه: {msg.id}")
# ویرایش پیام
await asyncio.sleep(1)
await msg.edit("پیام ویرایش گردید ✅")
if __name__ == "__main__":
asyncio.run(main())
۲. ساخت ربات پاسخگو به سبک تلتون (Telethon-Style Events)
from balenova import Client, events
app = Client("my_bot")
# دریافت دستور /start با پترن ریجکس و فقط پیامهای ورودی
@app.on(events.NewMessage(pattern=r"^/start", incoming=True))
async def start_handler(event: events.NewMessage):
# خروجی پرینت بسیار مرتب و خوانا
print(event)
# پاسخ مستقیم و ارسال ریاکشن
await event.reply(f"درود {event.from_user.first_name}! ربات بالهنوا آماده است ⚡")
await event.react("❤️")
# دریافت دستور پینگ
@app.on(events.NewMessage(pattern=r"^پینگ$", incoming=True))
async def ping_handler(event: events.NewMessage):
await event.reply("پونگ! 🏓")
# اجرای دائمی کلاینت
app.run()
۳. دریافت لیست گفتگوها و پیامهای اخیر (Dialogs)
import asyncio
from balenova import Client
async def main():
async with Client.from_firefox() as app:
# دریافت ۵ گفتگوی اخیر به صورت آبجکتهای ساختیافته
dialogs = await app.get_dialogs(limit=5)
for d in dialogs:
title = d.chat.title or d.chat.full_name or d.chat.id
last = d.top_message.text if d.top_message else "(بدون متن)"
print(f"[{d.chat.type.value}] {title} | خواندهنشده: {d.unread_count} | آخرین پیام: {last[:30]}")
asyncio.run(main())
۴. ارسال کیبورد شیشهای و اینلاین (Inline Keyboards)
import asyncio
from balenova import Client
from balenova.keyboards import InlineKeyboardButton, InlineKeyboardMarkup
async def main():
async with Client.from_firefox() as app:
# ساخت کیبورد شیشهای
keyboard = InlineKeyboardMarkup().add(
InlineKeyboardButton("🌐 وبسایت مستندات", url="https://iliasync.github.io/balenova/"),
InlineKeyboardButton("⚡ پشتیبانی", callback_data="support_click"),
)
target_chat = f"{app.user_id}|1"
await app.send_message(target_chat, "یکی از گزینههای زیر را انتخاب نمایید:", reply_markup=keyboard)
asyncio.run(main())
۵. ورود با شماره تلفن و کد تایید ترمینالی
import asyncio
from balenova import Client
async def login_flow():
# ساخت کلاینت با نام نشست دلخواه (ذخیره امن در sessions/my_account.session)
app = Client("my_account")
await app.start()
me = await app.get_me()
print(f"ورود موفق به حساب: {me.full_name}")
await app.close()
asyncio.run(login_flow())
📂 ساختار ماژولار و مهندسی پروژه (Clean Architecture)
new library for bale/
├── src/
│ └── bale/ (و balenova/)
│ ├── types/ # تایپهای سطح بالا همراه با متدهای متصل (Active Record)
│ │ ├── user.py # User با متدهای .send_message()، .block()، .unblock()
│ │ ├── chat.py # Chat با متدهای .send_message()، .send_photo()، .leave()
│ │ ├── message.py # Message با دسترسی داتاکسس (.text, .from_user, .buttons)
│ │ ├── dialog.py # Dialog و DialogsList
│ │ ├── media.py # Photo, Video, Audio, Voice, Document
│ │ ├── keyboard.py # InlineKeyboardMarkup و ReplyKeyboardMarkup
│ │ └── events.py # ChatActionEvent, CallbackQueryEvent, UserTypingEvent
│ ├── enums.py # تمامی ثابتها و تایپهای عددی (ChatType, ChatAction, ...)
│ ├── events.py # رویدادهای Telethon-Style (@app.on(events.NewMessage))
│ ├── filters.py # فیلترهای منطقی ترکیبی (& و | و ~) و ریجکس
│ ├── client.py # کلاینت قدرتمند آسنکرون با بیش از ۸۳۰ متد
│ ├── session.py # ذخیرهسازی امن سشن و اتصال مستقیم به Firefox
│ └── transports/ # لایه ارتباطی پایدار WebSocket و gRPC-web
├── tests/ # بیش از ۱۳۰ تست خودکار برای تضمین پایداری
└── docs/ # مستندات کامل و کاتالوگ متدها
🛡️ لایسنس (License)
این پروژه تحت مجوز معتبر MIT License به صورت متنباز منتشر شده است.
Metadata
Release files for balenova 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| balenova-0.5.0.tar.gz | 645.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| balenova-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.0 MB
Release files / balenova-0.5.0.tar.gz
| Download URL | balenova-0.5.0.tar.gz |
|---|---|
| Size | 645.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
095f12540745f021117842920200a1efda6721d360465877d90f14280c31557a
|
|
BLAKE2b-256 checksum How to use checksums |
5e4bba172889fb2d97a2d1aee21d35c9abd30b0b7c6bc08130995d30f39c4a07
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / balenova-0.5.0-py3-none-any.whl
| Download URL | balenova-0.5.0-py3-none-any.whl |
|---|---|
| Size | 378.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
63066ddb0f3176ddf68084a832fa0e529e6c3895ea6127bdaee93cc9b4190676
|
|
BLAKE2b-256 checksum How to use checksums |
bd1f22ea20b92229d445c4d617dee93f52e272dd63c9ac4d1e4dd03ecfb3c68d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for balenova 0.5.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.