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")

    @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

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

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.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 to ignore errors for code that runs synchronously but is async
├── 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 است که برای قسمت یوزر بات استفاده شده است.

⬆ بازگشت به فهرست


📚 مستندات

⬆ بازگشت به فهرست


❤️ مشارکت

از Pull Request ها، Issue ها و پیشنهادات استقبال می‌شود.

برای مشارکت:

  1. پروژه را Fork کنید.
  2. تغییرات خود را اعمال کنید.
  3. Commit بگیرید.
  4. Pull Request ارسال کنید.

⬆ بازگشت به فهرست


📄 لایسنس

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

⬆ بازگشت به فهرست


ساخته‌شده با ❤️ توسط سید محمد حسین موسوی رجا — 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-6.2.0.tar.gz (142.4 kB view details)

Uploaded Source

Built Distribution

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

fastrub-6.2.0-py3-none-any.whl (156.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for fastrub-6.2.0.tar.gz
Algorithm Hash digest
SHA256 bbd86352897b20e3602a22fa185f888ed02321183ea1e0439630c75f2868af1a
MD5 e314ebf2a5afbd1182affb44e9471c28
BLAKE2b-256 1737436bd812dd12771598b603e85f9aeb23fece5bad1009451871ce92312f74

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for fastrub-6.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3077cd26f016954f4cdc69d30f08cac802646701003569c13ff4bde7a8d5a7e2
MD5 e136144d3454f9bee463262c85fdb374
BLAKE2b-256 c645d271a36373e8dc5f318f56734b30b3f8069aa0c3e17b1a3f1767910c2d99

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

This release

6.2.0 This release

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

5.6.12

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