Fast Rub

سریع‌ترین، هوشمندترین و کامل‌ترین فریم‌ورک ربات روبیکا برای پایتون

💎 معرفی

Fast Rub یک فریم‌ورک مدرن، سریع و سبک برای ساخت ربات‌های روبیکا است. با پشتیبانی کامل از sync/async، HTTP/2، و معماری async-native.

🪶 تست شده روی ۲۵۶ مگابایت رم DDR1 با Alpine Linux — عملکرد فوق‌العاده حتی روی سخت‌افزار ضعیف

HTTP/2 + Async-First

سریع‌ترین فریم‌ورک روبیکا با httpx & h2

🧠

WaitManager

مدیریت هوشمند Rate Limit — فقط بدهید، بقیه خودکار

📋

DataForm

فرم‌های هوشمند با اعتبارسنجی و callback شرطی

💬

Conversation

مکالمات چندمرحله‌ای با State Machine

🔍

۲۰۰+ فیلتر

AND/OR/NOT + Inline Filters + Async Filters

🔄

Hot Reload

توسعه سریع بدون توقف ربات

Scheduler

زمان‌بندی کارها (interval + daily at)

📡

Signals

سیستم Event-driven برای ارتباط ماژول‌ها

🔌

Plugins

سیستم پلاگین با لود خودکار از پوشه

🗄️

ORM داخلی

دیتابیس SQLite با API ساده و SQL پارامتری

🛡️

AntiSpam

سیستم ضد اسپم پیشرفته + امنیت XSS

👥

یوزربات

پشتیبانی از یوزربات با فورک pyrubi

📦 نصب

pip install fastrub

میرورهای جایگزین

در صورت قطع شدن میرور اصلی PyPI:

pip install -i https://mirror-pypi.runflare.com/simple fastrub
pip install -i https://mirror.abrha.net/repository/pypi/simple fastrub
pip install -i https://package-mirror.liara.ir/repository/pypi/simple fastrub

🚀 شروع سریع

با @BotFather یک بات بسازید و توکن را کپی کنید.

دریافت پیام‌ها (Polling)

import asyncio
from fast_rub import Client, filters
from fast_rub.types import Update

async def main():
    bot = Client("my_bot")

    @bot.on_message(filters.text("سلام"))
    async def say_hello(msg: Update):
        await msg.reply("**سلام** از طرف فست روب ⚡")

    await bot.run()

asyncio.run(main())

کلیک روی دکمه‌های Inline

import asyncio
from fast_rub import Client
from fast_rub.types import UpdateButton

async def main():
    bot = Client("my_bot")

    @bot.on_button()
    async def button_click(msg: UpdateButton):
        await msg.send_text(f"دکمهٔ {msg.new_message.aux_data.button_id} فشرده شد")

    await bot.run()

asyncio.run(main())

🧠 WaitManager

مدیریت هوشمند ترافیک — قوی‌ترین سیستم مدیریت Rate Limit در بین تمام فریم‌ورک‌های روبیکا. کافی است به Client بدهید — بقیه خودکار انجام می‌شود.

from fast_rub import Client, WaitManager

bot = Client(
    "my_bot",
    wait_manager=WaitManager(
        low_traffic=60,
        medium_traffic=100,
        low_wait=0.0,
        medium_wait=1.0,
        high_wait=3.0,
        time_window=60.0,
        auto_track=True,  # همه چیز خودکار
    )
)

@bot.on_message()
async def handler(msg: Message):
    await msg.reply("سلام!")  # WaitManager خودکار تأخیر را مدیریت می‌کند

await bot.run()

کانال‌های قابل ردیابی

کانالکاربرد
sendingارسال پیام
banningاخراج (بن)
forwardingبازنشر (فوروارد)
uploadingآپلود فایل
editingویرایش پیام
deletingحذف پیام

📋 DataForm

فرم‌های هوشمند — فقط بگویید «چی می‌خواهید» — اعتبارسنجی، کیبورد، و حرکت بین فیلدها خودکار است.

DataForm یک سیستم فرم‌ساز قدرتمند است که به شما امکان می‌دهد فرم‌های چندمرحله‌ای را به‌سادگی تعریف کنید. با استفاده از کلاس‌های Text، Number و Choice می‌توانید هر نوع ورودی را مدیریت کنید. این سیستم به‌صورت خودکار کیبوردهای مناسب را ساخته، اعتبارسنجی را انجام می‌دهد و با استفاده از callback های شرطی (skip_if، cancel_if، back_if و ...) جریان فرم را کنترل می‌کند.

from fast_rub import Client, Conversation
from fast_rub.core.forms import Text, Number, DataForm

class UserInfo(DataForm):
    name: Text = Text("👤 نام خود را وارد کنید", min_len=3, max_len=30)
    age: Number = Number("🎂 چند سالته؟", min=18, max=60, keypad=True)

register = Conversation(name="register")

@register.entry_form(UserInfo, commands=["/register"])
async def done(msg, data):
    await msg.reply(f"ثبت شد:\n👤 {data['name']}\n🎂 {data['age']}")

bot.add_conversation(register)

callbackهای شرطی (پیشرفته)

class AdvancedForm(DataForm):
    name: Text = Text("نام؟", min_len=3, repeat_if=lambda v: "admin" in v.lower())  # دوباره بپرس
    age: Number = Number("سن؟", min=18, max=60)
    job: Text = Text("شغل؟", skip_if=lambda data: data.get("age", 0) < 18)  # زیر ۱۸ سال نپرس
    city: Text = Text("شهر؟", cancel_if=lambda v: v == "هیچی")  # فرم را کنسل کن

🔧 فیلدهای DataForm

سه نوع فیلد اصلی: Text، Number و Choice. هر کدام پارامترهای متنوعی برای کنترل رفتار فرم دارند مثل transform_if, repeat_if, default_if, hide_if, back_if, cancel_if, skip_if, hide_input, default, timeout, retry, validator, transform, pre_func, dict_args_func, list_args_func, func, invalid_answer, ... در Text

💬 Conversation

مکالمات چندمرحله‌ای — روش کلاسیک (Entry + State)

register = Conversation(name="register")

@register.entry(commands=["/register"])
async def ask_name(msg, data):
    await msg.reply("اسمت چیه؟")
    return "waiting_name"

@register.state("waiting_name")
async def get_name(msg, data):
    data["name"] = msg.new_message.text
    await msg.reply(f"سلام {msg.new_message.text}!")
    return Conversation.END

bot.add_conversation(register)

🔍 فیلترها

بیش از ۲۰۰ فیلتر آماده برای محدود کردن هندلرها. ترکیب با &، | و ~.

from fast_rub import filters

# فیلتر ساده
@bot.on_message(filters.text("/start"))

# ترکیب (AND)
@bot.on_message(filters.text("/admin") & filters.is_user)

# ترکیب (OR)
@bot.on_message(filters.text("/help") | filters.text("راهنما"))

# NOT
@bot.on_message(~filters.is_group)  # فقط PV

# Async — چک دیتابیس
@bot.on_message(filters.db_exists("users", lambda u: {"chat_id": u.chat_id}, db=my_db))

# Inline Filters (دکمه‌های شیشه‌ای)
@bot.on_button(filters.button_id("home") & filters.sender_ids(["admin_id"]))

⌨️ ساختن کیبورد

from fast_rub.button import KeyPad

keypad = KeyPad()
keypad.append(keypad.simple("btn_1", "دکمه یک"))
keypad.append(keypad.simple("btn_2", "دکمه دو"), keypad.simple("btn_3", "دکمه سه"))

# کیبورد معمولی
await msg.reply("انتخاب کنید:", keypad=keypad.build())

# کیبورد شیشه‌ای
await msg.reply("انتخاب کنید:", inline_keypad=keypad.build())

🔄 Hot Reload

هر بار فایلی را ذخیره کنید، ربات خودکار ری‌استارت می‌شود.

await bot.run(reload=True)

# یا از CLI:
# $ fastrub run --reload

⏰ Scheduler

from fast_rub import Scheduler

scheduler = Scheduler()

@scheduler.every(minutes=30)
async def cleanup():
    print("🧹 پاک‌سازی خودکار")

@scheduler.every(at="08:00")
async def report():
    print("📊 گزارش صبحگاهی")

📡 Signals

from fast_rub import SignalManager

signals = SignalManager()

@signals.on("user_registered")
async def welcome(user_id, chat_id):
    print(f"👋 کاربر {user_id} ثبت‌نام کرد!")

await signals.emit("user_registered", user_id="123", chat_id="456")

🔌 Plugins

فایل plugins/admin.py:

async def setup(client):
    @client.on_message(filters.commands(["admin"]))
    async def panel(msg):
        await msg.reply("🔧 پنل ادمین")

# لود خودکار
await bot.load_plugins("plugins")

🗄️ ORM داخلی

from fast_rub.db import DataBase

db = DataBase("my_bot.db")
await db.start({"users": {"chat_id": "TEXT", "name": "TEXT"}})

await db.write("users", {"chat_id": "123", "name": "علی"})
user = await db.find("users", "*", {"chat_id": "123"})

💻 CLI

fastrub new my_bot      # پروژه جدید
fastrub run             # اجرا
fastrub run --reload    # اجرا با Hot Reload
fastrub version         # نسخه
fastrub docs            # مستندات

📁 ساختار پروژه

fast_rub
├── button # KeyPad
│   ├── __init__.py
│   └── key_pad.py # KeyPad | InlineKeyPad
├── cli.py # CLI - fastrub cmd
├── core # core fastrub
│   ├── async_sync.py # Converter async to sync funcs
│   ├── background.py # BackGround tasks
│   ├── client.py # Client core fastrub
│   ├── config.py # Config client
│   ├── conversation.py # Conversation classic and DataForm
│   ├── forms # Forms for DataForm conversation
│   │   ├── config.py # Config the DataForm
│   │   ├── data_form.py # Config the DataForm
│   │   ├── fields.py # Fields - Number, Text, Choice
│   │   ├── __init__.py
│   │   └── manager.py # Manager DataForm in conversation.py
│   ├── helpers.py # Helpers for client
│   ├── hotreload.py # Hot reload client
│   ├── __init__.py
│   ├── middleware.py # Middleware client
│   ├── plugins.py # Plugins client
│   ├── scheduler.py # Scheduler for scheduling tasks
│   ├── signals.py # Signals (like Django Framework)
│   └── webhook_server.py # Web Server client for webhook local
├── db # DataBases
│   ├── database.py # DataBase ORM fastrub
│   ├── __init__.py
│   ├── message_keeper.py # DB Message Keeper for find message by message id
│   └── session.py # DB Sessions fastrub({name}.faru)
├── __init__.py
├── network # Network fastrub
│   ├── __init__.py
│   └── network.py # Network fastrub - Httpx HTTP/2
├── pyrightconfig.json # Config for Pyright Extension
├── pyrubi # UserBot - Pyrubi(Forked)
│   ├── client # core client
│   │   ├── client.py # core client - API to fast_rub/methods
│   │   └── __init__.py
│   ├── crypto # Cryper
│   │   ├── crypto.py # De/En cryper Conect UserBot rubika
│   │   └── __init__.py
│   ├── enums.py # Enums client
│   ├── exceptions.py # Exceptions
│   ├── filters.py # Filters Messages
│   ├── __init__.py
│   ├── methods # API Methods
│   │   ├── __init__.py
│   │   └── methods.py # Concter to rubika API
│   ├── network # Network UserBot
│   │   ├── helper.py # Helper network
│   │   ├── __init__.py
│   │   ├── network.py # Network API
│   │   └── socket.py # Web Socket rubika
│   ├── sessions # Session
│   │   ├── __init__.py
│   │   └── sessions.py # Session manager
│   ├── types # Types
│   │   ├── __init__.py
│   │   └── socket # Types Web Socket
│   │       ├── __init__.py
│   │       └── message.py # Message Class
│   └── utils # Utils UserBot
│       ├── configs.py # Config client
│       ├── __init__.py
│       ├── reacrions.py # ReActions utils
│       └── utils.py # Utils UserBot
├── type # Conect to types folder
│   └── __init__.py
├── types # Types fastrub
│   ├── errors.py # Exception fastrub
│   ├── exceptions.py # Alias errors.py
│   ├── forms.py # Alias fast_rub/core/forms
│   ├── get_type.py # Utils for Update Class
│   ├── __init__.py
│   ├── metadata.py # Utils for Update Class - MetaData Message
│   ├── models # Models client
│   │   ├── base_model # Base Models for Bot & Chat Classs
│   │   ├── bot.py # Bot Model
│   │   ├── chat.py # Chat Model
│   │   └── __init__.py
│   ├── props.py
│   ├── prop_update.py
│   ├── update_button.py # Inline Message/Update Type fastrub
│   ├── update.py # Message/Update Type fastrub
│   └── webhook.py # WebHook config
└── utils # Utils fastrub
    ├── antispam.py # Anti Spam client
    ├── cache.py # Cache client
    ├── colors.py # Utils for color print client(display_welcome)
    ├── encryption.py # Crypter token bot
    ├── filters.py # Filters for Messages
    ├── __init__.py
    ├── inline_filters.py # InlineFilters for Inline Messages
    ├── logger.py # Logger client
    ├── metadata.py # Creator text for format Markdown/HTML
    ├── run_filter.py # Utils client run async/sync filter
    ├── snapshot.py # SnapShot JSON client
    ├── template.py # Anti-XSS in message text
    ├── text_parser.py # Text Parser MetaData for text message - Markdown | HTML
    ├── utils.py # More utils
    ├── version.py # Version fastrub
    └── wait_manager.py # Manager Waiting for sending request(send_message, ban, ...)

⚠️ نکته درباره pyrubi

فست روب از یوزر بات پشتیبانی می‌کند. بخش/پوشه pyrubi فورکی از AliGanji1/pyrubi است که برای قسمت یوزر بات استفاده شده و دارای لایسنس MIT می‌باشد.

📄 لایسنس

این پروژه تحت لایسنس MIT منتشر شده است.

❤️ ساخته‌شده با ❤️ توسط سید محمد حسین موسوی رجا — OandONE