| کانال ربات تلگرام |
1.01K subscribers
3 photos
10 links
⭕️ کانال توسعه‌دهندگان ربات تلگرام دولوپیکس

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
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