Skip to main content

Fast Rub

Fast Rub ⚡

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

PyPI Python 3.10+ License: MIT مستندات


✨ ویژگی‌های کلیدی

  • 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

fastrub-5.6.12.tar.gz (121.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastrub-5.6.12-py3-none-any.whl (138.5 kB view details)

Uploaded Python 3

File details

Details for the file fastrub-5.6.12.tar.gz.

File metadata

  • Download URL: fastrub-5.6.12.tar.gz
  • Upload date:
  • Size: 121.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for fastrub-5.6.12.tar.gz
Algorithm Hash digest
SHA256 ff311d6c4a689c8e5c47e7b64980f8686715b16f0e24ee67264d1f43e6dfbb49
MD5 62e5bf8fd6c59872b072eaad98d3e08e
BLAKE2b-256 f03012563bdcfa3a85b9c787d8afb736d291174b55aa974c78dce7c47090b904

See more details on using hashes here.

File details

Details for the file fastrub-5.6.12-py3-none-any.whl.

File metadata

  • Download URL: fastrub-5.6.12-py3-none-any.whl
  • Upload date:
  • Size: 138.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for fastrub-5.6.12-py3-none-any.whl
Algorithm Hash digest
SHA256 7e6bf4cfe4b175f9fa0cd0c3682f42de5cbc91ea1b51383a9d5accb999dfb9a1
MD5 50624e7e588616a625c6023ebebe0d72
BLAKE2b-256 2069a7acb3c756ebe7034aac94deaaad01594a48d871d0f23549a84b60d1ed6e

See more details on using hashes here.

Release history Release notifications | RSS feed

6.6.6

2 files

6.6.5

2 files

6.6.4

2 files

6.6.3

2 files

6.6.2

2 files

6.6.1

2 files

6.6.0

2 files

6.5.3

2 files

6.5.2

2 files

6.5.1

2 files

6.5.0

2 files

6.4.2

2 files

6.4.1

2 files

6.4.0

2 files

6.3.0

2 files

6.2.5

2 files

6.2.4

2 files

6.2.3

2 files

6.2.2

2 files

6.2.1

2 files

6.2.0

2 files

6.1.21

2 files

6.1.20

2 files

6.1.19

2 files

6.1.18

2 files

6.1.17

2 files

6.1.16

2 files

6.1.15

2 files

6.1.14

2 files

6.1.13

2 files

6.1.12

2 files

6.1.11

2 files

6.1.10

2 files

6.1.9

2 files

6.1.8

2 files

6.1.7

2 files

6.1.6

2 files

6.1.5

2 files

6.1.4

2 files

6.1.3

2 files

6.1.2

2 files

6.1.1

2 files

6.1.0

2 files

6.0.5

2 files

6.0.4

2 files

6.0.3

2 files

6.0.2

2 files

6.0.1

2 files

6.0.0

2 files

5.6.15

2 files

5.6.14

2 files

5.6.13

2 files

This release

5.6.12 This release

2 files

5.6.11

2 files

5.6.10

2 files

5.6.9

2 files

5.6.8

2 files

5.6.7

2 files

5.6.6

2 files

5.6.5

2 files

5.6.4

2 files

5.6.3

2 files

5.6.2

2 files

5.6.1

2 files

5.6.0

2 files

5.5.3

2 files

5.5.2

2 files

5.5.1

2 files

5.5.0

2 files

5.4.3

2 files

5.4.2

2 files

5.4.1

2 files

5.4.0

2 files

5.3.2

2 files

5.3.1

2 files

5.3.0

2 files

5.2.31

2 files

5.2.30

2 files

5.2.29

2 files

5.2.28

2 files

5.2.27

2 files

5.2.26

2 files

5.2.25

2 files

5.2.24

2 files

5.2.23

2 files

5.2.22

2 files

5.2.21

2 files

5.2.20

2 files

5.2.19

2 files

5.2.18

2 files

5.2.17

2 files

5.2.16

2 files

5.2.15

2 files

5.2.14

2 files

5.2.13

2 files

5.2.12

2 files

5.2.11

2 files

5.2.10

2 files

5.2.9

2 files

5.2.8

2 files

5.2.7

2 files

5.2.6

2 files

5.2.5

2 files

5.2.4

2 files

5.2.3

2 files

5.2.2

2 files

5.2.1

2 files

5.2.0

2 files

5.1.10

2 files

5.1.9

2 files

5.1.8

2 files

5.1.7

2 files

5.1.6

2 files

5.1.5

2 files

5.1.4

2 files

5.1.3

2 files

5.1.2

2 files

5.1.1

2 files

5.1.0

2 files

5.0.8

2 files

5.0.7

2 files

5.0.6

2 files

5.0.5

2 files

5.0.4

2 files

5.0.3

2 files

5.0.2

2 files

5.0.1

2 files

5.0.0

2 files

4.6.5

2 files

4.6.4

2 files

4.6.3

2 files

4.6.2

2 files

4.6.1

2 files

4.6.0

2 files

4.5.3

2 files

4.5.2

2 files

4.5.1

2 files

4.5.0

2 files

4.4.18

2 files

4.4.17

2 files

4.4.16

2 files

4.4.15

2 files

4.4.14

2 files

4.4.13

2 files

4.4.12

2 files

4.4.11

2 files

4.4.10

2 files

4.4.9

2 files

4.4.8

2 files

4.4.6

2 files

4.4.5

2 files

4.4.4

2 files

4.4.3

2 files

4.4.2

2 files

4.4.1

2 files

4.4.0

2 files

4.3.4

2 files

4.3.3

2 files

4.3.2

2 files

4.3.1

2 files

4.3.0

2 files

4.2.3

2 files

4.2.2

2 files

4.2.1

2 files

4.2.0

2 files

4.1.1

2 files

4.1.0

1 file

4.0.9

2 files

4.0.8

2 files

4.0.6

2 files

4.0.5

2 files

4.0.3

1 file

3.9.0

2 files

3.8.9

2 files

3.8.8

1 file

3.8.7

2 files

3.8.6

2 files

3.8.5

2 files

3.8.4

2 files

3.8.3

2 files

3.8.2

2 files

3.8.1

2 files

3.8.0

2 files

3.7.9

2 files

3.7.8

2 files

3.7.7

2 files

3.7.6

2 files

3.7.5

2 files

3.7.4

2 files

3.7.3

2 files

3.7.2

2 files

3.7.1

2 files

3.7.0

2 files

3.6.9

2 files

3.6.8

2 files

3.6.7

2 files

3.6.6

2 files

3.6.5

2 files

3.6.4

2 files

3.6.3

2 files

3.6.2

2 files

3.6.1

2 files

3.6.0

2 files

3.5.9

2 files

3.5.8

2 files

3.5.7

2 files

3.5.6

2 files

3.5.5

2 files

3.5.4

2 files

3.5.3

2 files

3.5.2

2 files

3.5.1

2 files

3.5.0

2 files

3.4.9

2 files

3.4.8

2 files

3.4.7

2 files

3.4.6

2 files

3.4.5

2 files

3.4.4

2 files

3.4.3

2 files

3.4.2

2 files

3.4.1

2 files

3.4.0

2 files

3.3.9

2 files

3.3.8

2 files

3.3.7

2 files

3.3.6

2 files

3.3.5

2 files

3.3.4

2 files

3.3.3

2 files

3.3.2

2 files

3.3.1

2 files

3.3.0

2 files

3.2.9

2 files

3.2.8

2 files

3.2.7

2 files

3.2.6

2 files

3.2.5

2 files

3.2.4

2 files

3.2.3

2 files

3.2.2

2 files

3.2.1

2 files

3.2.0

2 files

3.1.9

2 files

3.1.8

2 files

3.1.7

2 files

3.1.6

2 files

3.1.5

2 files

3.1.4

2 files

3.1.3

2 files

3.1.2

2 files

3.1.1

2 files

3.1.0

2 files

3.0.9

2 files

3.0.8

2 files

3.0.7

2 files

3.0.6

2 files

3.0.5

2 files

3.0.4

2 files

3.0.3

2 files

3.0.2

2 files

3.0.1

2 files

3.0.0

2 files

2.9.9

2 files

2.9.8

2 files

2.9.7

2 files

2.9.6

2 files

2.9.5

2 files

2.9.4

2 files

2.9.3

2 files

2.9.2

2 files

2.9.1

2 files

2.9.0

2 files

2.8.9

2 files

2.8.8

2 files

2.8.7

2 files

2.8.6

2 files

2.8.3

2 files

2.8.2

2 files

2.8.1

2 files

2.8.0

2 files

2.7.9

1 file

2.7.8

2 files

2.7.7

2 files

2.7.5

2 files

2.7.4

2 files

2.7.3

2 files

2.7.2

2 files

2.7.1

2 files

2.7.0

2 files

2.6.9

2 files

2.6.8

2 files

2.6.7

2 files

2.6.6

2 files

2.6.5

2 files

2.6.4

2 files

2.6.3

2 files

2.6.2

2 files

2.6.1

2 files

2.6.0

2 files

2.5.9

2 files

2.5.8

2 files

2.5.7

2 files

2.5.6

2 files

2.5.5

2 files

2.5.4

2 files

2.5.3

2 files

2.5.2

2 files

2.5.1

2 files

2.5.0

2 files

2.4.9

2 files

2.4.8

2 files

2.4.7

2 files

2.4.6

2 files

2.4.4

2 files

2.4.3

2 files

2.3

2 files

2.2

2 files

2.1

2 files

2.0

2 files

1.9

2 files

1.8

2 files

1.7

2 files

1.6

2 files

1.5

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page