TGViewer
| کانال ربات تلگرام | | کانال ربات تلگرام | @developixrobot · 1.24K subscribers
Post #39 621
‏Command Pattern در معماری ربات تلگرام 🚀

یکی از الگوهای خیلی کاربردی برای تمیز نگه داشتن کد ربات، مخصوصاً وقتی تعداد دستورات زیاد می‌شود، Command Pattern است.

به‌جای اینکه داخل یک فایل بزرگ با کلی if/elif همهٔ دستورها را هندل کنیم، هر دستور را به‌صورت یک «Command» جداگانه پیاده‌سازی می‌کنیم. این کار:

✅ کد را خواناتر و قابل نگه‌داری‌تر می‌کند
✅ اضافه کردن دستور جدید را ساده و بدون دست‌کاری منطق قبلی می‌کند
✅ تست‌نویسی برای هر دستور را راحت‌تر می‌کند

ایدهٔ اصلی Command Pattern 🧠

هر دستور (مثلاً /start، /help، /stats) تبدیل می‌شود به یک کلاس با یک متد ثابت، مثلاً execute().

یک «Command Bus» یا «Dispatcher» فقط تشخیص می‌دهد کاربر چه دستوری داده و Command مناسب را صدا می‌زند؛ خودش منطق دستور را بلد نیست.

نمونهٔ ساده در ربات تلگرام (python-telegram-bot) 🐍

from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes

class BaseCommand:
async def execute(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
raise NotImplementedError

class StartCommand(BaseCommand):
async def execute(self, update, context):
await update.message.reply_text("سلام 👋 خوش اومدی!")

class HelpCommand(BaseCommand):
async def execute(self, update, context):
await update.message.reply_text("لیست دستورات: /start, /help")

class CommandDispatcher:
def __init__(self):
self._commands = {
"start": StartCommand(),
"help": HelpCommand(),
}

async def handle(self, update, context):
name = update.message.text.lstrip("/").split()[0]
cmd = self._commands.get(name)
if cmd:
await cmd.execute(update, context)

dispatcher = CommandDispatcher()

async def entrypoint(update: Update, context: ContextTypes.DEFAULT_TYPE):
await dispatcher.handle(update, context)

app = ApplicationBuilder().token("TOKEN").build()
app.add_handler(CommandHandler(["start", "help"], entrypoint))
app.run_polling()


چند نکتهٔ عملی برای ربات‌های واقعی 🛠

• برای هر Command می‌توان وابستگی‌ها را تزریق کرد (Repository، Service، Logger) تا کلاس‌ها تمیز و تست‌پذیر بمانند.

• وقتی تعداد Command ها زیاد شد، می‌توان ثبت آن‌ها را به‌صورت داینامیک (مثلاً با اسکن ماژول‌ها) انجام داد تا دیگر یک دیکشنری بزرگ دستی نگه نداریم.

• در کنار Command Pattern، استفاده از Single Responsibility Principle کمک می‌کند منطق ربات از منطق زیرساخت (HTTP, DB, Cache) جدا بماند.

برای مطالعهٔ بیشتر دربارهٔ این الگو:
refactoring.guru/design-patterns/command

قدم‌به‌قدم که ربات‌تان بزرگ‌تر می‌شود، استفاده از Command Pattern کمک می‌کند معماری کد تمیز بماند و با خیال راحت فیچرهای جدید اضافه کنید ✨

🔖 #TelegramBot #ربات #تلگرام #Command_Pattern #Telegram_Bot #Clean_Code #Python #Design_Patterns #Software_Architecture

👤 Developix

💎 Channel: @DevelopixRobot
  • ❤ 5
  • 👎 1
More from @developixrobot
  1. Sep 18, 2026🔥 پروژه: پچ‌رایت؛ Playwright کم‌تر قابل‌ردیابی پچ‌رایت یک فورک از کتابخانهٔ Playwright بر…
  2. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  3. Sep 1, 2026خیلی وقت‌ها ربات لینک می‌فرستد، اما پیش‌نمایش بزرگ صفحه کل کل چت را شلوغ می‌کند 😅 مخصوصاً…
  4. Aug 27, 2026💠 نسخه جدید کتابخانه GrammY منتشر شده است 🔸 ارتقا از نسخه 1.45.1 به 1.46.0 🔖 #grammy, #…
  5. Aug 26, 2026💠 نسخه جدید کتابخانه آیوگرام (Aiogram) منتشر شده است 🔸 ارتقا از نسخه 3.30.0 به 3.31.0 🔖…
  6. Aug 24, 2026🔥 پروژه: ‏TikTok Live Connector برای ربات‌ها کتابخانه Node.js ‏TikTok Live Connec…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →