python-telegram-bot — کتابخانهٔ محبوب و فعال برای ساخت رباتهای Telegram با Python ✅
این کتابخانه رابطی ساده و مدرن روی Bot API فراهم میکند: مدیریت هندلرها، کیبوردهای اینلاین، وبهوکها و پردازش آسان آپدیتها. مناسب برای پروژههای کوچک تا پیچیده که میخواهند سریع توسعه پیدا کنند.
✅ ویژگیها و مزایا:
- هندلینگ async/await و Application-based API
- پشتیبانی از inline keyboards و callback queries
- ابزارهای کاربردی برای وبهوک و polling
- مستندات کامل و اکوسیستم گسترده
نکته: برای باتهای مقیاسپذیر از وبهوک + reverse proxy استفاده کنید، و توکن را در متغیر محیطی نگه دارید 🔒
مراجع رسمی: Docs | GitHub
امتحانش کنید و بازخوردتان را به اشتراک بگذارید 🚀
🔖 #TelegramBot #ربات #تلگرام #python #telegram #bot #python_telegram_bot
👤 Developix
💎 Channel: @DevelopixRobot
این کتابخانه رابطی ساده و مدرن روی 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)
چند نکتهٔ عملی ⚙️
• حتماً از HTTPS با گواهی معتبر استفاده شود (LetsEncrypt کافی است).
• یک endpoint تمیز مثل
• لاگ خطاها و زمان پاسخ را حتماً مانیتور کن؛ timeout پیشفرض در Webhook محدود است و handlerهای سنگین را بهتر است آسنکرون یا در صف جدا (queue) پردازش کنی.
📚 مستند رسمی برای جزئیات بیشتر:
Telegram Bot API – setWebhook
این تغییر کوچک معمولاً بزرگترین جهش کیفیت در رباتهایی است که از مرحلهٔ اولیه عبور کردهاند و جدیتر استفاده میشوند 🚀
🔖 #TelegramBot #ربات #تلگرام #telegram_bot #webhook #python #performance #scaling
👤 Developix
💎 Channel: @DevelopixRobot
یک ارتقا ساده و حرفهای اینجاست: استفاده از 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
👍5❤2
کتابخونه python-telegram-bot یکی از محبوبترین ابزارها برای ساخت ربات تلگرام با Python هست؛ ساده، منعطف و پر از Featureهای آماده برای کارهای روزمره رباتنویسی 🧩
با این کتابخونه میشه خیلی سریع:
• پیامها و Commandها رو هندل کرد
• InlineKeyboard ساخت
• روی Webhook یا Long Polling کار کرد
• با Context و Middlewareها منطق پیچیدهتر پیاده کرد
نصب:
نمونه ربات ساده (Echo) 👇
برای رباتهای واقعی (مانیتورینگ، پنل ادمین، Botهای فروشگاهی) هم بهخوبی جواب میده و روی نسخههای جدید Bot API همیشه آپدیت میمونه 🔧
Docs و سورس:
📚 Documentations
💻 GitHub
امتحانش کن، روی یه پروژه کوچک تست کن و کمکم منطقهای پیچیدهتر رو اضافه کن 🚀
🔖 #TelegramBot #ربات #تلگرام #python_telegram_bot #Telegram_Bot #Python #ربات_تلگرام #Webhook #Inline_Keyboard
👤 Developix
💎 Channel: @DevelopixRobot
با این کتابخونه میشه خیلی سریع:
• پیامها و 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 ربات میفرستد و دیگه لازم نیست سرور مدام
📌 نکته مهم: آدرس Webhook حتماً باید HTTPS باشد و روی پورتی که فایروال اجازه میدهد در دسترس باشد.
نمونه ساده با python-telegram-bot (ورژن v20+):
چند نکته عملی 🛠️
- برای ترافیک زیاد، 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
با 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 (الگو، نه کد نهایی پروداکشن):
اینجا Use Case هیچ وابستگی مستقیمی به
• راحتتر تست واحد (Unit Test) مینویسیم ✅
• اگر روزی از
• ساختن چند نوع ورودی (Webhook، Polling، حتی CLI) سادهتر میشود ✅
برای درک عمیقتر ایده، نگاه به مقالهٔ اصلی Uncle Bob بسیار کمک میکند:
لینک مقاله Clean Architecture
استفاده از این رویکرد در رباتهای تلگرام، مخصوصاً وقتی پروژه تیمی و بلندمدت است، جلوی خیلی از دردسرهای ریفکتور و باگهای عجیبی که از بههمریختگی کد میآیند را میگیرد. از پروژهٔ فعلیتان شروع کنید و حتی شده یک لایهٔ کوچک را جدا کنید؛ تاثیرش را در خوانایی و تستپذیری سریع میبینید 🔧🚀
🔖 #TelegramBot #ربات #تلگرام #Clean_Architecture #Telegram_Bot #Python #aiogram #Design_Pattern #Architecture
👤 Developix
💎 Channel: @DevelopixRobot
وقتی ربات پیچیده میشود (مثلاً پرداخت، مدیریت کاربر، پنل ادمین)، اگر همهچیز را توی یک فایل 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
🔥3❤1