ساخت یک ربات تلگرام میتونه یک تمرین خوب واسه دست به کد شدن افرادی باشه که تازه شروع به برنامه نویسی کرده اند. در این آموزش قراره از زبان پایتون استفاده کنیم و انتظار میره که خواننده با زبان پایتون آشنا باشد. همچنین بهتره که آشنایی سطحی ای با سیستم عامل گنو/لینوکس داشته باشید.
در تلگرام خود وارد ربات @BotFather شوید ابتدا دستور /newbot را وارد کنید و مراحل خواسته شده را طی کنید تا تلگرام، توکن ربات رو در اختیارتون قرار بده. در تصویر زیر توکن ربات با کادر زرد رنگ مشخص شده است.
ابتدا محیط مجازی (Virtual Environment) خود را ایجاد کنید.
$ virtualenv .venv $ source .venv/bin/activate
حالا باید کتابخونه های مورد نیاز رو نصب کنیم.
$ pip install python-telegram-bot $ pip install pytube3
کد این آموزش رو میتونید از اینجا دانلود کنید و فایل main.py را باز کنید. در این مرحله خط به خط کد را توضیح میدهیم. برای درک بهتر مفاهیم میتونید در تصویر زیر کد رو به صورت کامل مشاهده کنید.
ابتدا کتابخانه های مورد نیاز را import میکنیم.( خطوط 1 تا 6)
# Import libraries from telegram import Update from telegram.ext import Updater, CallbackContext, CommandHandler, MessageHandler, Filters from pytube import YouTubeimport os, re
در خطوط 7 تا 9 متغیر DOWNLOAD_LOCATION را تعریف میکنیم. این متغیر محل ذخیره سازی ویدیوهایی که دانلود میکنیم را مشخص میکند.
# Base variables DOWNLOAD_LOCATION = "./temp/"
در خطوط 10 تا 14 تابع start را تعریف میکنیم. این تابع قراره موقعی که کاربر دکمه start را میزنه فراخوانی بشه و یک پیام خوش آمدگویی به کاربر ارسال کنه.
# Send welcome message to new users def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Welcome to my youtube downloader bot.')
در خطوط 15 تا 36 تابع download را تعریف میکنیم. وقتی که کاربر یه متن را برای ما ارسال میکنه این تابع اجرا میشه. در خطوط 19 تا 21 چک میکنیم که کاربر برای ربات یک لینک یوتیوب فرستاده یا نه؟ اگر جواب مثبت باشه خطوط 23 تا 32 و در غیر اینصورت خط 34 اجرا میشه.
خطوط 23 تا 32 شامل سه قسمت میشه. اول در خطوط 23 تا 26 ویدیو را از یوتیوب دانلود، سپس در خطوط 27 تا 30 ویدیو را به کاربر ارسال، و نهایتا در خطوط 31 و 32 ویدیو را از روی حافظه خودمون پاک میکنیم تا در دراز مدت فضای سرورمون پر نشه.
خط 34 هم یک پیغام به کاربر ارسال میکنه که میگه لینک وارد شده توسط شما معتبر نیست.
# Download video from youtube and send to user def download(update: Update, context: CallbackContext) -> None: user_id = update.message.from_user['id'] # Check if user message is a valid youtube video link link = update.message.text pattern = r"http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?" result = re.match(pattern, link) if result: # Download video from youtube youtube = YouTube(link) youtube_stream = youtube.streams.get_highest_resolution() youtube_stream.download(DOWNLOAD_LOCATION) # Send video to user file_name = youtube.streams.get_highest_resolution().default_filename file_dir = f"{DOWNLOAD_LOCATION}{file_name}" context.bot.send_video(chat_id=user_id, video=open(file_dir, 'rb'), supports_streaming=True) # Delete video from disk after sending to user os.remove(file_dir) else: update.message.reply_text('Your link is not valid.')
خطوط 37 تا 46 خطوط نهایی است. توجه داشته باشید که توکن ربات ( که در مرحله اول به دست آوردیم) را در خط 38 جایگزین عبارت TOKEN کنید.
برای اجرای کد کافیست فایل main.py را با پایتون اجرا کنید.
$ python main.py
همانطور که در تصویر زیر مشاهده میکنید. ربات با موفقیت اجرا میشود.
امیدوارم این آموزش براتون مفید بوده باشه. میتونید با لایک کردن این نوشته یا ریپوزیتوری github از من حمایت کنید.