TGViewer
| کانال ربات تلگرام | | کانال ربات تلگرام | @developixrobot · 1.24K subscribers
Post #24 743
الگوی Strategy در مدیریت Command های ربات تلگرام 🧩

یکی از تمیزترین راه‌ها برای مدیریت منطق پیچیده در ربات تلگرام، استفاده از Strategy Pattern است. مخصوصاً وقتی ربات شما چندین دستور مثل /start، /help، /settings و… دارد، اگر همه‌چیز را در یک فایل بزرگ بنویسید، به‌سرعت تبدیل به Spaghetti Code می‌شود 🤯

با الگوی Strategy می‌توانیم منطق هر Command را در یک کلاس جدا نگه داریم و یک Command Dispatcher تمیز داشته باشیم.

ایده‌ی اصلی Strategy:
- برای هر رفتار (مثلاً هر Command)، یک Strategy جدا تعریف می‌شود.
- یک کانتکست (اینجا: Message Handler) فقط تصمیم می‌گیرد کدام Strategy را صدا بزند.
- اضافه کردن Command جدید، بدون تغییر کدهای قبلی انجام می‌شود (Open/Closed Principle ✅).

نمونه با Python و کتابخانه python-telegram-bot:

from abc import ABC, abstractmethod

# Strategy interface
class CommandStrategy(ABC):
@abstractmethod
def handle(self, update, context):
pass

# Concrete strategies
class StartCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("سلام 👋 خوش اومدی!")

class HelpCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("/start - شروع
/help - راهنما")

class UnknownCommand(CommandStrategy):
def handle(self, update, context):
update.message.reply_text("این دستور رو نمیشناسم 😅")

# Context / Dispatcher
class CommandDispatcher:
def __init__(self):
self._strategies = {
"start": StartCommand(),
"help": HelpCommand(),
}
self._fallback = UnknownCommand()

def dispatch(self, update, context):
cmd = update.message.text.split()[0].replace("/", "")
strategy = self._strategies.get(cmd, self._fallback)
strategy.handle(update, context)


در Handler اصلی فقط کافیه Dispatcher را صدا بزنید و بقیه‌ی منطق از هم جدا و تمیز می‌ماند ✨

مزایا برای ربات تلگرام:
- افزودن Command جدید فقط با ساختن یک کلاس جدید (بدون دست‌زدن به بقیه‌ کدها).
- تست‌نویسی راحت‌تر؛ هر Strategy مستقل تست می‌شود.
- جداسازی واضح بین لایه‌ی Routing و لایه‌ی Business Logic.

نکته‌های عملی 🛠
- نام کلاس‌ها را بر اساس Command شفاف انتخاب کنید (مثل BanUserCommand، BroadcastCommand).
- برای Commandهای پیچیده، آن‌ها را به چند Service کوچک‌تر بشکنید تا Strategy هم بیش از حد چاق نشود.
- اگر تعداد Commandها زیاد شد، می‌توانید Strategyها را در ماژول‌های جدا (folders) سازمان‌دهی کنید.

برای مطالعه‌ی بیشتر درباره‌ی Strategy Pattern:
refactoring.guru/design-patterns/strategy

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

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

👤 Developix

💎 Channel: @DevelopixRobot
  • ❤ 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 →