Fast Rub ⚡
سریعترین، هوشمندترین و کاملترین فریمورک ربات روبیکا برای پایتون
✨ ویژگیهای کلیدی
- ⚡ HTTP/2 + Async-First — سریعترین فریمورک روبیکا با
httpx - 🧠 WaitManager — مدیریت هوشمند Rate Limit (فقط به Client بدهید — بقیه خودکار)
- 📋 DataForm — فرمهای هوشمند با اعتبارسنجی، کیبورد و callbackهای شرطی
- 💬 Conversation — مکالمات چندمرحلهای با State Machine داخلی (کلاسیک + مدرن)
- 🔍 ۲۰۰+ فیلتر — فیلترهای آماده و ترکیبی (AND/OR/NOT) + Inline Filters
- 🔄 Hot Reload — توسعهٔ سریع بدون توقف ربات
- ⏰ Scheduler — زمانبندی کارها (interval + daily at)
- 📡 Signals — سیستم Event-driven برای ارتباط ماژولها
- 🔌 Plugins — سیستم پلاگین با لود خودکار از پوشه
- 🗄️ ORM داخلی — دیتابیس SQLite با API ساده و SQL پارامتری
- 📸 Snapshots — Version Control برای تنظیمات ربات
- 🌐 Webhook Server — سرور داخلی (FastAPI/Flask)
- 💻 CLI — ابزار خط فرمان (
fastrub new,fastrub run --reload) - 🛡️ AntiSpam — سیستم ضد اسپم پیشرفته
- 🪶 فوقالعاده سبک — تست شده روی ۲۵۶MB RAM DDR1 با Alpine Linux
- 🔒 امنیت — SQL پارامتری، sanitize خودکار، middleware امنیتی
📥 نصب
pip install fastrub
در صورت قطع شدن میرور اصلی PyPI:
pip install -i https://mirror-pypi.runflare.com/simple fastrub
🚀 شروع سریع
دریافت پیامها (Polling)
import asyncio
from fast_rub import Client, filters
from fast_rub.types import Update
async def main():
bot = Client("my_bot")
await bot.start()
@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")
await bot.start()
@bot.on_button()
async def button_click(msg: UpdateButton):
await msg.send_text(f"دکمهٔ {msg.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 — فرمهای هوشمند
فقط بگویید «چی میخواهید» — اعتبارسنجی، کیبورد، و حرکت بین فیلدها خودکار است.
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 == "هیچی", # فرم را کنسل کن
)
💬 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.text
await msg.reply(f"سلام {msg.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(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/
├── core/ # هستهٔ فریمورک (Client، Conversation، Middleware، Plugins...)
├── pyrubi/ # یوزر بات (fork از pyrubi)
├── types/ # Update، Message، Button، MetaData، Errors...
├── core/forms/ # DataForm، Text، Number، Choice
├── utils/ # WaitManager، فیلترها، Cache، AntiSpam، Snapshot...
├── db/ # ORM داخلی (DataBase)
├── button/ # KeyPad
└── network/ # HTTP/2 Client
📚 مستندات کامل
· مستندات رسمی · گیتهاب · PyPI
⚠️ نکته
بخش pyrubi فورکی از AliGanji1/pyrubi است که برای قسمت یوزر بات استفاده شده.
ساختهشده با ❤️ توسط سید محمد حسین موسوی رجا — OandONE
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastrub-5.3.0.tar.gz.
File metadata
- Download URL: fastrub-5.3.0.tar.gz
- Upload date:
- Size: 119.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e02f7ddd7b6d82669f9c6d462c7ca18dcac36c9123069ac3f741aedea2bccd97
|
|
| MD5 |
2a72c39c6aa3781a7c7ab0c28f4e104b
|
|
| BLAKE2b-256 |
948172e0674e50ac3365a02d7f5fa613259e524de496823c525fdb3bd3b4e485
|
File details
Details for the file fastrub-5.3.0-py3-none-any.whl.
File metadata
- Download URL: fastrub-5.3.0-py3-none-any.whl
- Upload date:
- Size: 137.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa8be6561732c8468cc5bd92323fa6b87f551dc6258e9f1359b4faf334f711b0
|
|
| MD5 |
09f9e7f97c57330315217072c595fc82
|
|
| BLAKE2b-256 |
5a307638d36887333205ec73e20d146fa8324df5e70c0f288cceee9c6213d5d0
|