پایتون و اتوماسیون

اتوماسیون تلگرام با پایتون

نویسنده: Hadi ZareZadeh۱۸ اردیبهشت ۱۴۰۵۳۶۸۱ بازدید
اتوماسیون تلگرام با پایتون

اولین ربات تلگرام من چهل خط پایتون بود که به «ping» پاسخ «pong» می‌داد. ظرف یک ماه به یک آشفته‌بازار درهم‌تنیده از دستورهای if-else تبدیل شد که پنج فرمان، سه نوع callback و یک جریان گفت‌وگو را مدیریت می‌کرد که خودم هم نمی‌توانستم دنبالش کنم. آن ربات به من یاد داد که اتوماسیون تلگرام شروعش آسان و خراب کردنش به‌طرز شگفت‌انگیزی آسان است. این ساختاری است که حالا استفاده می‌کنم.

چرا تلگرام برای اتوماسیون؟

Bot API تلگرام رایگان، خوب‌مستند و بی‌نیاز از تأیید فروشگاه اپ است. ربات‌ها می‌توانند اعلان بفرستند، فرمان بپذیرند، کیبورد درون‌خطی بسازند، فایل آپلود کنند و حتی مینی‌اپ میزبانی کنند. برای اتوماسیون شخصی و ابزارهای تیم کوچک، اغلب سریع‌ترین مسیر از ایده تا چیزی در حال اجرا روی گوشی شماست.

یک ربات تلگرام محصول نیست — یک رابط است. با ربات مثل یک لایه نازک روی منطق واقعی رفتار کنید.

انتخاب یک کتابخانه

در پایتون، دو گزینه اصلی python-telegram-bot و aiogram هستند. برای پروژه‌های ناهمگام‌محور و ثبت هندلر تمیزتر، aiogram را ترجیح می‌دهم، اما هر دو محکم‌اند. یکی را انتخاب کنید و الگوهایش را عمیق یاد بگیرید، نه اینکه وسط پروژه عوض کنید.

from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message

bot = Bot(token=TOKEN)
dp = Dispatcher()

@dp.message(Command("start"))
async def cmd_start(message: Message):
    await message.answer("ربات در حال اجراست. /help را امتحان کنید.")

معماری‌ای که فراتر از اسکریپت مقیاس می‌پذیرد

ربات را از روز اول به لایه‌ها تقسیم کنید، حتی اگر روز اول کوچک باشد:

  • هندلرها — به‌روزرسانی‌های تلگرام را تجزیه می‌کنند، سرویس‌ها را صدا می‌زنند، پاسخ‌ها را قالب‌بندی می‌کنند.
  • سرویس‌ها — منطق کسب‌وکار با صفر import تلگرام.
  • ذخیره‌سازی — دسترسی به پایگاه داده یا فایل، آن هم مستقل از تلگرام.

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

مدیریت وضعیت برای گفت‌وگوها

جریان‌های چندمرحله‌ای (نام بگیر، بعد ایمیل، بعد تأیید) به وضعیت نیاز دارند. از متغیرهای سراسری استفاده نکنید — از پشتیبانی FSM (ماشین حالت متناهی) داخل کتابخانه‌تان استفاده کنید، یا وضعیت را در Redis/پایگاه داده با کلید شناسه کاربر ذخیره کنید:

from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext

class ReportForm(StatesGroup):
    waiting_for_url = State()
    waiting_for_description = State()

@dp.message(ReportForm.waiting_for_url)
async def process_url(message: Message, state: FSMContext):
    await state.update_data(url=message.text)
    await state.set_state(ReportForm.waiting_for_description)
    await message.answer("حالا مشکل را توضیح دهید:")

اعلان‌ها و وظایف زمان‌بندی‌شده

بسیاری از ربات‌ها در واقع موتور اعلان‌اند. از APScheduler یا Celery برای ارسال پیام طبق زمان‌بندی استفاده کنید — گزارش‌های روزانه، هشدارهای مانیتورینگ، یادآورها. زمان‌بند را از حلقه هندلر جدا نگه دارید تا بتوانید یکی را بدون کشتن دیگری ری‌استارت کنید.

استقرار

برای ربات‌های شخصی کم‌ترافیک، long polling کافی است — نیازی به URL عمومی نیست. برای تولید یا تنظیمات مبتنی بر webhook، پشت یک reverse proxy با HTTPS اجرا کنید. با Docker کانتینری کنید، توکن را در متغیرهای محیطی نگه دارید و هرگز آن را commit نکنید.

# قطعه docker-compose
services:
  bot:
    build: .
    env_file: .env
    restart: unless-stopped

اشتباهات رایج

  • همه چیز در یک فایل. زود تقسیم کنید؛ ادغام از باز کردن گره آسان‌تر است.
  • نبود مدیریت خطا روی فراخوانی‌های API. تلگرام با شدت محدودیت نرخ می‌گذارد؛ پاسخ‌های 429 را با عقب‌نشینی مدیریت کنید.
  • ذخیره رازها در کد. از متغیرهای محیطی استفاده کنید و اگر توکن لو رفت آن را بچرخانید.
  • مسدود کردن حلقه رویداد. برای فراخوانی‌های HTTP و پایگاه داده از کتابخانه‌های ناهمگام استفاده کنید؛ در هندلرهای async از time.sleep() استفاده نکنید.

بهترین شیوه‌ها

  • هر به‌روزرسانی ورودی را با شناسه کاربر و فرمان برای دیباگ لاگ کنید.
  • یک فرمان /help پیاده کنید که با افزودن ویژگی‌ها به‌روز بماند.
  • برای لایه سرویس بدون mock کردن تلگرام تست بنویسید — منطق را مستقیم تست کنید.
  • پاسخ‌های خود ربات را محدودنرخ کنید تا هنگام ارسال انبوه به محدودیت‌های تلگرام نخورید.

جمع‌بندی

ربات‌های تلگرام یک ورودی فوق‌العاده به اتوماسیون‌اند: سریع برای ساختن، فوراً مفید و با ساختار درست واقعاً آماده تولید. هندلرها را نازک، منطق را در سرویس‌ها، وضعیت را در ذخیره‌سازی درست و رازها را بیرون از کد نگه دارید. این هفته با یک فرمان مفید شروع کنید و رشد دهید — گوشی شما به یک کنترل از راه دور برای سیستم‌هایتان تبدیل می‌شود.