Fast Rub
سریعترین، هوشمندترین و کاملترین فریمورک ربات روبیکا برای پایتون
💎 معرفی
Fast Rub یک فریمورک مدرن، سریع و سبک برای ساخت رباتهای
روبیکا است. با پشتیبانی کامل از sync/async،
HTTP/2، و معماری async-native.
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 منتشر شده است.