| کانال ربات تلگرام | – Telegram
| کانال ربات تلگرام |
1.05K subscribers
4 photos
15 links
⭕️ کانال توسعه‌دهندگان ربات تلگرام دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
‏LaraGram یک فریم‌ورک توسعه‌پذیر، منعطف و مدرن به زبان PHP برای ساخت ربات‌های تلگرامه که با الهام از ساختار لاراول طراحی شده.

اگر با لاراول آشنایی دارید، کار با LaraGram براتون راحت، لذت‌بخش و قابل پیش‌بینی خواهد بود — و حتی اگه آشنایی ندارید، ساختار منظمش خیلی زود براتون جا می‌افته.

‏LaraGram امکانات زیادی درون خودش داره که می‌تونید سخت‌ترین ربات‌ها رو با چند خط کد پیاده‌سازی کنید، اگر قابلیتی رو هم نداشته باشه می‌تونید به عنوان پکیج جانبی بهش اضافه کنید یا حتی برای اون پکیج توسعه بدید.

به عنوان مثال، LaraGram مجهز به یک سیستم Update Listener پیشرفته هست که به شما امکاناتی مانند گروه‌بندی لیسنرها، نام‌دهی به هر لیسنر، اعمال محدودیت و Middleware بر روی لیسنر، پردازش متن و ورودی‌ها، و... رو میده.

همچنین نسخه بازنویسی شده Eloquent ORM رو در خودش جا داده با پشتیبانی از ۵ دیتابیس مختلف، همراه با تعریف روابط، Migrations، Seeders و Factory‌ها.

سایر قابلیت های کلیدی اون:

🔐‌ سیستم کنترل مجوز با قابلیت تعریف Gate و Policy برای مدیریت دقیق سطح دسترسی کاربران به منابع مختلف.

💻‌ Commander System برای ساخت و اجرای راحت command‌ها، مدیریت ساده‌تر پروژه، و زمان‌بندی اجرای وظایف (Scheduled Tasks).

📨‌ ‏Queue و Job System برای ساخت صف و اجرای کارها در پس‌زمینه با زمان‌بندی دلخواه.

🧰‌ رابط Redis با امکانات لازم برای توسعه‌های وابسته به کش، صف و پیام‌رسانی آنی.

🧠‌ سیستم کشینگ با پشتیبانی از ۷ درایور مختلف برای ذخیره‌سازی داده‌های موقتی، به‌همراه پیاده‌سازی Step Manager بر همین بستر.

🔁‌ کالکشن‌ها برای کار ساده‌تر و منعطف‌تر با داده‌های Iterable، مشابه کالکشن‌های Laravel.

⚙️‏‌ Concurrency‏ داخلی با امکان پردازش هم‌زمان چند درخواست در پس‌زمینه بدون پیچیدگی اضافه.

🔒‌ ابزارهای امنیتی با پشتیبانی از سیستم‌های رمزنگاری (Crypt) و هشینگ (Hash).

📢‌ Event Dispatcher برای تعریف و مدیریت رویدادها و واکنش به آن‌ها.

🎛‌ کیبورد بیلدر توسعه‌یافته با استفاده ساده و انعطاف پذیری بالا.

🧩‌ موتور قالب‌سازی پیشرفته الهام‌گرفته از Blade برای ساخت پیام‌ها به‌صورت پویا و قابل نگهداری.

🌍‌ سیستم چندزبانه (Translation) برای ساخت ربات‌هایی با پشتیبانی از زبان‌های مختلف.

‌ سیستم اعتبارسنجی با قوانین متنوع و امکان تعریف Rule‌های سفارشی.

🤖‌ پشتیبانی از چند ربات هم‌زمان و امکان تعریف چند کانکشن و مدیریت آن‌ها به‌صورت مستقل.

یک مثال ساده برای ایجاد یک کامند بن با user_id به مدت 7 روز، با کنترل دسترسی و شرط ریپلای نشدن کامند:
Bot::onCommand("ban {id}", function (Request $request, $id) {
$request->banChatMember(
chat_id: chat()->id,
user_id: $id,
until_date: now()->addDays(7)->timestamp
);
})->can('administrator')->hasNotReply();


برخی از ویژگی‌ها با افزونه‌ها و پکیج‌های جانبی به LaraGram اضافه می‌شوند، به عنوان مثال:

⚡️LaraGram Surge
پکیجی برای اجرای سریع‌تر ربات‌ها با پشتیبانی از Swoole و OpenSwoole

🔧LaraGram Installer
برای نصب و راه‌اندازی سریع و ساده پروژه‌های LaraGram

🛢‌ LaraGram MongoDB‌‏
درایور پایگاه‌داده MongoDB برای Eloquent ORM


📚 مستندات رسمی LaraGram نیز از طریق لینک زیر در دسترس است:
🔗 laraxgram.github.io

💬 گروه پرسش و پاسخ:
🔹 @LaraGramChat

📌 پروژه در گیت‌هاب:
♦️ LaraGram

🔖 #TelegramBot, #ربات, #تلگرام

👤 AmirHossein

💎 Channel: @DevelopixRobot
🔥152
الگوی Command برای هندلرهای ربات تلگرام — سازماندهی دستورات

الگوی Command یکی از ساده‌ترین و کاربردی‌ترین راه‌ها برای جداسازی منطق هر دستور در ربات تلگرام است. به جای نوشتن یک تابع بزرگ که همه دستورات را هندل می‌کند، برای هر دستور یک کلاس یا شیء مجزا تعریف می‌کنیم که تنها مسئول اجرای آن دستور باشد. این کار خوانایی، تست‌پذیری و گسترش‌پذیری پروژه را به‌طور چشمگیر بالا می‌برد.

مثال ساده در پایتون برای درک بهتر:
class Command:
def execute(self, update, context):
raise NotImplementedError

class StartCommand(Command):
def execute(self, update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="سلام! خوش آمدید.")

class HelpCommand(Command):
def execute(self, update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="لیست دستورات: /start, /help")

router = {
'/start': StartCommand(),
'/help': HelpCommand(),
}

def handle_update(update, context):
text = update.message.text.split()[0]
cmd = router.get(text)
if cmd:
cmd.execute(update, context)


چند نکته عملی:
- Single Responsibility: هر کلاس فقط یک کار انجام می‌دهد (SRP از اصول SOLID).
- تست‌پذیری: می‌توان هر Command را جداگانه unit-test کرد بدون نیاز به بوت‌استرپ کل بات.
- گسترش‌پذیری: اضافه کردن دستور جدید فقط اضافه کردن یک کلاس و ثبت آن در router است.
- Middleware: اگر نیاز به لاگ یا اعتبارسنجی باشد، می‌توان لایه‌ای بین handle_update و اجرای Command قرار داد یا یک Decorator برای Commandها نوشت.

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

🔖 #TelegramBot #ربات #تلگرام #design_patterns #command_pattern #telegram_bot #python #clean_code

👤 Developix

💎 Channel: @DevelopixRobot
👍7👎1
python-telegram-bot — کتابخانهٔ محبوب و فعال برای ساخت ربات‌های Telegram با Python

این کتابخانه رابطی ساده و مدرن روی Bot API فراهم می‌کند: مدیریت هندلرها، کیبوردهای اینلاین، وب‌هوک‌ها و پردازش آسان آپدیت‌ها. مناسب برای پروژه‌های کوچک تا پیچیده که می‌خواهند سریع توسعه پیدا کنند.

ویژگی‌ها و مزایا:
- هندلینگ async/await و Application-based API
- پشتیبانی از inline keyboards و callback queries
- ابزارهای کاربردی برای وب‌هوک و polling
- مستندات کامل و اکوسیستم گسترده

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

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("سلام از بات شما!")

app = ApplicationBuilder().token("YOUR_TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()


نکته: برای بات‌های مقیاس‌پذیر از وب‌هوک + reverse proxy استفاده کنید، و توکن را در متغیر محیطی نگه دارید 🔒

مراجع رسمی: Docs | GitHub

امتحانش کنید و بازخوردتان را به اشتراک بگذارید 🚀

🔖 #TelegramBot #ربات #تلگرام #python #telegram #bot #python_telegram_bot

👤 Developix

💎 Channel: @DevelopixRobot
1👍1
🔹 وقتی ربات شروع می‌کند رشد کردن، getUpdates (long polling) کم‌کم دردسرساز می‌شود: صف طولانی، delay و فشار روی سرور.
یک ارتقا ساده و حرفه‌ای اینجاست: استفاده از Webhook

ایدهٔ اصلی 🧠
به‌جای این‌که سرور هر چند ثانیه برود سراغ Telegram و آپدیت‌ها را بگیرد، خود Telegram هر آپدیت را مستقیم با یک HTTP POST به آدرس شما می‌فرستد. این یعنی:

• سرعت بیشتر در پاسخ‌گویی ⏱️
• مصرف کمتر CPU و network روی سرور 🌱
• مقیاس‌پذیری بهتر برای ربات‌های شلوغ 📈

نمونه پیاده‌سازی با python-telegram-bot (وب‌هوک ساده روی Flask)

from flask import Flask, request
from telegram import Update
from telegram.ext import Application, CommandHandler

TOKEN = "YOUR_BOT_TOKEN"
app = Flask(__name__)

app_telegram = Application.builder().token(TOKEN).build()

async def start(update: Update, context):
await update.message.reply_text("سلام! وب‌هوک فعاله ")

app_telegram.add_handler(CommandHandler("start", start))

@app.post("/webhook")
async def webhook():
data = request.get_json(force=True)
update = Update.de_json(data, app_telegram.bot)
await app_telegram.process_update(update)
return "ok"

if __name__ == "__main__":
import asyncio
from telegram import Bot

bot = Bot(TOKEN)
url = "https://example.com/webhook" # آدرس HTTPS معتبر
asyncio.run(bot.set_webhook(url=url))

app.run(port=8443)


چند نکتهٔ عملی ⚙️
• حتماً از HTTPS با گواهی معتبر استفاده شود (LetsEncrypt کافی است).
• یک endpoint تمیز مثل /webhook بساز تا فقط Telegram به آن POST بزند.
• لاگ خطاها و زمان پاسخ را حتماً مانیتور کن؛ timeout پیش‌فرض در Webhook محدود است و handlerهای سنگین را بهتر است آسنکرون یا در صف جدا (queue) پردازش کنی.

📚 مستند رسمی برای جزئیات بیشتر:
Telegram Bot API – setWebhook

این تغییر کوچک معمولاً بزرگ‌ترین جهش کیفیت در ربات‌هایی است که از مرحلهٔ اولیه عبور کرده‌اند و جدی‌تر استفاده می‌شوند 🚀

🔖 #TelegramBot #ربات #تلگرام #telegram_bot #webhook #python #performance #scaling

👤 Developix

💎 Channel: @DevelopixRobot
👍52
کتابخونه python-telegram-bot یکی از محبوب‌ترین ابزارها برای ساخت ربات تلگرام با Python هست؛ ساده، منعطف و پر از Featureهای آماده برای کارهای روزمره ربات‌نویسی 🧩

با این کتابخونه می‌شه خیلی سریع:
• پیام‌ها و Commandها رو هندل کرد
• InlineKeyboard ساخت
• روی Webhook یا Long Polling کار کرد
• با Context و Middlewareها منطق پیچیده‌تر پیاده کرد

نصب:
pip install python-telegram-bot --upgrade


نمونه ربات ساده (Echo) 👇
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters

TOKEN = "YOUR_BOT_TOKEN"

async def start(update: Update, context):
await update.message.reply_text("سلام، یه پیام بفرست 👋")

async def echo(update: Update, context):
await update.message.reply_text(update.message.text)

app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
app.run_polling()


برای ربات‌های واقعی (مانیتورینگ، پنل ادمین، Botهای فروشگاهی) هم به‌خوبی جواب می‌ده و روی نسخه‌های جدید Bot API همیشه آپدیت می‌مونه 🔧

Docs و سورس:
📚 Documentations
💻 GitHub

امتحانش کن، روی یه پروژه کوچک تست کن و کم‌کم منطق‌های پیچیده‌تر رو اضافه کن 🚀

🔖 #TelegramBot #ربات #تلگرام #python_telegram_bot #Telegram_Bot #Python #ربات_تلگرام #Webhook #Inline_Keyboard

👤 Developix

💎 Channel: @DevelopixRobot
برای ربات‌هایی که روی سرور یا هاست پایدار بالا هستند، استفاده از Webhook به‌جای long polling هم مصرف منابع را کم می‌کند هم تاخیر پیام‌ها را پایین می‌آورد 🚀

با Webhook، Telegram هر آپدیت را مستقیم به URL ربات می‌فرستد و دیگه لازم نیست سرور مدام getUpdates صدا بزند.

📌 نکته مهم: آدرس Webhook حتماً باید HTTPS باشد و روی پورتی که فایروال اجازه می‌دهد در دسترس باشد.

نمونه ساده با python-telegram-bot (ورژن v20+):

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

TOKEN = "YOUR_BOT_TOKEN"
WEBHOOK_URL = "https://example.com/bot/webhook" # URL عمومی

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("ربات با Webhook فعاله ")

app = ApplicationBuilder().token(TOKEN).build()

app.add_handler(CommandHandler("start", start))

app.run_webhook(
listen="0.0.0.0",
port=8443,
url_path="bot/webhook",
webhook_url=WEBHOOK_URL,
)


چند نکته عملی 🛠️

- برای ترافیک زیاد، Webhook بهتر از polling جواب می‌دهد و scale کردن پشت Nginx یا Load Balancer راحت‌تر می‌شود.
- روی endpoint مربوط به Webhook هیچ لاگ حساس (مثل توکن) چاپ نشود و timeout پاسخ‌دهی خیلی بالا نرود.
- روی سرور، health-check سبک برای اطمینان از زنده بودن ربات نگه‌داری شود.

برای جزئیات بیشتر و پارامترهای دقیق Webhook:
مستندات رسمی Telegram Bot API - setWebhook

امتحان Webhook روی یک ربات واقعی، خیلی خوب تفاوت سرعت و پایداری را نشان می‌دهد؛ مخصوصاً وقتی تعداد چت‌ها بالا می‌رود ⚙️

🔖 #TelegramBot #ربات #تلگرام #telegram_bot #webhook #python #performance #security

👤 Developix

💎 Channel: @DevelopixRobot
👍1
‏Clean Architecture در ربات تلگرام چطور کمک می‌کند؟ 🧱🤖

وقتی ربات پیچیده می‌شود (مثلاً پرداخت، مدیریت کاربر، پنل ادمین)، اگر همه‌چیز را توی یک فایل bot.py بنویسیم، بعد از مدتی هیچ‌کس حتی خودِ ما هم نمی‌فهمیم چی به چیه 😅

اینجاست که ایده‌ٔ Clean Architecture وارد می‌شود: جدا کردن لایه‌ها تا Telegram فقط «درگاه ورودی» باشد، نه قلب منطق برنامه.

به‌صورت ساده، می‌توانیم چند لایهٔ مهم در ربات در نظر بگیریم:

Domain (Business Logic): قوانین اصلی ربات (مثلاً: کاربر عادی حق دسترسی به فلان فرمان را ندارد).
Application / Use Cases: سناریوها (مثلاً: "ثبت سفارش"، "ثبت کاربر جدید").
Infrastructure: چیزهای وابسته به دنیا بیرون: Telegram Bot API، Database، Redis، HTTP و ...
Interface / Delivery: هندلرهای پیام، Webhook، CLI و غیره.

نکتهٔ مهم این است که داخلی‌ها بیرونی‌ها را نمی‌شناسند. یعنی منطق اصلی ربات، نباید مستقیم به python-telegram-bot یا aiogram وابسته باشد.

مثال ساده با Python (الگو، نه کد نهایی پروداکشن):

"""domain/entities.py"""
from dataclasses import dataclass

@dataclass
class User:
id: int
username: str | None
is_admin: bool = False


"""domain/services.py"""
from .entities import User

class AccessService:
def can_use_admin_panel(self, user: User) -> bool:
return user.is_admin


"""application/use_cases.py"""
from .dto import MessageDTO
from domain.services import AccessService

class HandleAdminCommand:
def __init__(self, access_service: AccessService):
self._access = access_service

def execute(self, msg: MessageDTO) -> str:
if not self._access.can_use_admin_panel(msg.user):
return "دسترسی غیرمجاز "
return "خوش اومدی ادمین 👋"


"""infrastructure/telegram_handlers.py"""
from aiogram import Router, types
from application.use_cases import HandleAdminCommand
from application.dto import MessageDTO

router = Router()

handle_admin = HandleAdminCommand(access_service=...)

@router.message(commands=["admin"])
async def admin_handler(message: types.Message):
dto = MessageDTO(
user_id=message.from_user.id,
username=message.from_user.username,
text=message.text,
)
reply_text = handle_admin.execute(dto)
await message.answer(reply_text)


اینجا Use Case هیچ وابستگی مستقیمی به aiogram ندارد و فقط با یک MessageDTO کار می‌کند. این یعنی:

• راحت‌تر تست واحد (Unit Test) می‌نویسیم
• اگر روزی از aiogram به کتابخانهٔ دیگری مهاجرت کنیم، منطق اصلی ربات تقریباً دست‌نخورده می‌ماند
• ساختن چند نوع ورودی (Webhook، Polling، حتی CLI) ساده‌تر می‌شود

برای درک عمیق‌تر ایده، نگاه به مقالهٔ اصلی Uncle Bob بسیار کمک می‌کند:
لینک مقاله Clean Architecture

استفاده از این رویکرد در ربات‌های تلگرام، مخصوصاً وقتی پروژه تیمی و بلندمدت است، جلوی خیلی از دردسرهای ریفکتور و باگ‌های عجیبی که از به‌هم‌ریختگی کد می‌آیند را می‌گیرد. از پروژهٔ فعلی‌تان شروع کنید و حتی شده یک لایهٔ کوچک را جدا کنید؛ تاثیرش را در خوانایی و تست‌پذیری سریع می‌بینید 🔧🚀

🔖 #TelegramBot #ربات #تلگرام #Clean_Architecture #Telegram_Bot #Python #aiogram #Design_Pattern #Architecture

👤 Developix

💎 Channel: @DevelopixRobot
🔥31
🤖 ساخت ربات تلگرام دکمه‌دار با Python (pyTelegramBotAPI)

خیلی وقت‌ها یه ربات ساده /start داریم که فقط جواب متن می‌ده. ولی ربات‌های کاربردی معمولاً با Inline Keyboard کار می‌کنن: دکمه‌های زیر پیام که با لمس کردنشون، ربات یه اکشن مشخص انجام می‌ده (مثلاً «دیدن منو»، «گرفتن لینک»، «ثبت‌نام» و ...).

تو این پست، خیلی جمع‌ و جور، یه ربات Python می‌سازیم که:

• با /start خوش‌آمد می‌گه 😄
• یه دکمه «دیدن زمان الان » نشون می‌ده
• با زدن دکمه، ساعت فعلی رو برمی‌گردونه

پایه‌ی کارمون روی کتابخونه‌ی معروف pyTelegramBotAPI هست که دقیقا روی Telegram Bot API پیاده‌سازی شده و مستنداتش اینجاست:
github.com/eternnoir/pyTelegramBotAPI

نصب و راه‌اندازی سریع ⚙️

۱️⃣ با BotFather یه Bot جدید بساز و TOKEN رو بگیر.
۲️⃣ روی سرور یا سیستم خودت Python 3 داشته باش.
۳️⃣ این پکیج رو نصب کن:
pip install pyTelegramBotAPI


نمونه کد ربات دکمه‌دار 🧩

کد زیر یه ربات کامل و قابل اجراست (با polling):

import telebot
from telebot import types
from datetime import datetime

API_TOKEN = "YOUR_BOT_TOKEN_HERE"
bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(commands=["start"])
def send_welcome(message):
keyboard = types.InlineKeyboardMarkup()
btn_time = types.InlineKeyboardButton(
text=" دیدن زمان الان",
callback_data="show_time"
)
keyboard.add(btn_time)

bot.send_message(
message.chat.id,
"سلام! 👋\nبا دکمه زیر می‌تونی زمان فعلی سرور رو ببینی.",
reply_markup=keyboard
)

@bot.callback_query_handler(func=lambda c: c.data == "show_time")
def process_callback_show_time(callback_query):
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
bot.answer_callback_query(callback_query.id)
bot.send_message(
callback_query.message.chat.id,
f" زمان فعلی: {now}"
)

if __name__ == "__main__":
print("Bot is running...")
bot.infinity_polling()


چند نکته‌ی ریز ولی مهم 🛠

callback_data حداکثر ۶۴ بایت می‌تونه باشه؛ برای اطلاعات پیچیده‌تر بهتره یه ID بفرستی و دیتای اصلی رو تو Database نگه داری.
• همیشه بعد از هندل کردن دکمه، یه answer_callback_query صدا بزن (مثل کد بالا) تا خطای query is too old نگیری و UX بهتر بشه.
• برای ربات‌های جدی، به‌جای polling بهتره از webhook استفاده بشه (مثلاً پشت Nginx یا روی Cloudflare Tunnel).

این اسکلت ساده، همون چیزیه که بعداً می‌تونه تبدیل بشه به ربات‌های منویی، سیستم تیکت، فرم ثبت‌نام، یا حتی پنل مدیریت داخل خود تلگرام.

امتحانش کن و اگر برات مفید بود، با بقیه‌ی دولوپرهای ربات تلگرام هم شیرش کن 🌱

🔖 #TelegramBot #ربات #تلگرام #Telegram_Bot #Python #pyTelegramBotAPI #Inline_Keyboard #Webhook #Polling #Bot_Development #Persian

👤 Developix

💎 Channel: @DevelopixRobot
👍2
Forwarded from ابر ویراک
⭕️ ویراک کلود
زیرساختی مطمئن برای کسب و کارهای آنلاین
🎁 20% شارژ بیشتر روی اولین واریزی
⚡️با کد معرف: 10%  شارژ برای شما و 10% برای دوستتان!

🔘با IPv6 رایگان
🔘با IP مازاد
🔘تست رایگان 2 روزه
🔘فایروال اختصاصی
🔘با API برای حرفه‌ای ها
🔘پشتیبانی 24 ساعته
🔘آپلود رایگان


📞 همین حالا با ما تماس بگیرید و این فرصت فوق‌العاده رو از دست ندید!
🔻02191555530
🌐Virakcloud.com
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
الگوی 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
اگر با Python ربات تلگرام می‌سازی، python-telegram-bot از راحت‌ترین و پرکاربردترین کتابخونه‌هاست 🤖

این لایبرری تقریباً کل Telegram Bot API رو پوشش می‌ده و هم برای ربات‌های ساده (reply معمولی) و هم ربات‌های پیچیده (callback query، inline keyboard، webhook و …) جواب می‌ده.

چیزهایی که جذابش می‌کنه:
• ساخت handler برای هر نوع آپدیت (message, command, callback)
• پشتیبانی خوب از async
• مدیریت راحت inline keyboard و custom keyboard
• مستندات قوی و community فعال

نصب و یک نمونه خیلی مینیمال با polling:
pip install python-telegram-bot --upgrade

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

TOKEN = "YOUR_BOT_TOKEN"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("سلام! 👋 ربات فعاله.")

app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()


برای پروژه‌های جدی‌تر می‌شه از webhook و ساختار چندماژوله استفاده کرد تا کد تمیز و قابل نگه‌داری بمونه.

مستندات و سورس:
docs.python-telegram-bot.org
github.com/python-telegram-bot/python-telegram-bot

امتحانش کن روی یک ربات کوچک و بعد کم‌کم ساختار رو حرفه‌ای‌تر کن 🚀

🔖 #TelegramBot #ربات #تلگرام #Telegram_Bot #python_telegram_bot #Python #ربات_تلگرام #Webhook #Inline_Keyboard

👤 Developix

💎 Channel: @DevelopixRobot
👍4
🚀 ساخت ربات تلگرام با دکمه‌های شیشه‌ای (Inline Keyboard) با Python

یه قابلیت خیلی کاربردی تو Telegram Bot اینه که کاربر لازم نیست چیزی تایپ کنه؛ فقط با زدن دکمه کار انجام می‌شه. دقیقاً همون inline keyboard‌هایی که زیر پیام ظاهر می‌شن

توی این پست، با هم یه ربات ساده می‌سازیم که:

• با دستور /start یه پیام می‌فرسته
• زیرش دو تا دکمه شیشه‌ای نشون می‌ده
• روی هر دکمه کلیک بشه، جواب جداگانه برمی‌گردونه

این مثال بر اساس کتابخونه‌ی رسمی و محبوب python-telegram-bot نسخه ۲۰ به بالاست و می‌تونی داک رسمی‌ش رو اینجا ببینی:
docs.python-telegram-bot.org

اول کتابخونه رو نصب کن:
pip install python-telegram-bot --upgrade


تو کد پایین فقط کافیه BOT_TOKEN خودت رو از @BotFather بذاری و اجرا کنی. ربات روی long polling کار می‌کنه و نیاز به سرور https یا webhook نداره، برای شروع فوق‌العاده‌ست 👇

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (
ApplicationBuilder,
CommandHandler,
CallbackQueryHandler,
ContextTypes,
)

BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = [
[
InlineKeyboardButton("📊 وضعیت سرور", callback_data="status"),
InlineKeyboardButton("ℹ️ درباره ربات", callback_data="about"),
]
]
reply_markup = InlineKeyboardMarkup(keyboard)

await update.message.reply_text(
"سلام 👋\nیکی از گزینه‌های زیر رو انتخاب کن:",
reply_markup=reply_markup,
)

async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer()

if query.data == "status":
text = "سرور الان آنلاینه \nCPU: 23% | RAM: 58%"
elif query.data == "about":
text = "این یه ربات نمونه با inline keyboard هست 🤖"
else:
text = "گزینه نامعتبر" # حالت پیش‌فرض

await query.edit_message_text(text)

if __name__ == "__main__":
app = ApplicationBuilder().token(BOT_TOKEN).build()

app.add_handler(CommandHandler("start", start))
app.add_handler(CallbackQueryHandler(button_handler))

app.run_polling()


چند نکته ریز ولی مهم 👇

• حتماً تو نسخه‌های جدید باید از async/await استفاده کنی، مثل کد بالا.
callback_data بهتره کوتاه، بدون space و قابل پارس کردن باشه (مثلاً user:123 یا cmd:stats).
• به جای reply_text می‌تونی بعداً از edit_message_text تو خود دستور /start هم استفاده کنی تا ربات شبیه منوهای چند مرحله‌ای بشه.

این ساختار پایه بعداً راحت به Database، سیستم تیکت، فرم ثبت سفارش یا پنل ادمین در خود تلگرام وصل می‌شه 🙌

امتحانش کن، یه ربات بساز و به یه دوست برنامه‌نویس هم بفرست تا با هم توسعه‌ش بدین 🤝

🔖 #TelegramBot #ربات #تلگرام #Telegram_Bot #Python #Inline_Keyboard #Long_Polling #python_telegram_bot

👤 Developix

💎 Channel: @DevelopixRobot
👍3