DEV Community

Vlythr
Vlythr

Posted on • Edited on

54 1

Video Downloader Bot for Telegram - Tutorial

A step-by-step tutorial on how to create a chatbot for Telegram that can download videos from websites like YouTube.

We'll be using Python and a popular library called python-telegram-bot to build the chatbot. Let's get started!

Step 1: Set Up a Telegram Bot

  • Open Telegram and search for the "BotFather" bot.
  • Start a chat with the BotFather and follow the instructions to create a new bot.
  • Once your bot is created, you will receive an API token. Save this token as you'll need it later.

Step 2: Set Up Your Development Environment

  • Install Python on your computer if you haven't already. You can download it from the official Python website (python.org).
  • Choose a code editor for Python. Some popular options are Visual Studio Code, PyCharm, or Sublime Text. Install your preferred editor.

Step 3: Install the Required Libraries

  • Open a terminal or command prompt and run the following command to install the python-telegram-bot library:
 pip install python-telegram-bot youtube_dl
Enter fullscreen mode Exit fullscreen mode

Step 4: Create a New Python Script

  • Open your code editor and create a new Python script. You can name it telegram_video_downloader.py or choose any name you prefer.

Step 5: Import the Required Libraries

  • Add the following lines at the beginning of your Python script to import the necessary libraries:
  import logging
  from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
  import youtube_dl
Enter fullscreen mode Exit fullscreen mode

Step 6: Set Up Logging

  • Add the following lines of code to enable logging in your script. This will help you debug any issues that may occur:
  logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                      level=logging.INFO)
  logger = logging.getLogger(__name__)
Enter fullscreen mode Exit fullscreen mode

Step 7: Define a Function to Handle the /start Command

  • Add the following code to define a function that will handle the /start command when it is received by the bot:
  def start(update, context):
      context.bot.send_message(chat_id=update.effective_chat.id, text="Hello! I'm a video downloader bot. Just send me the URL of the video you want to download.")
Enter fullscreen mode Exit fullscreen mode

Step 8: Define a Function to Handle Video Downloads

  • Add the following code to define a function that will handle the video download functionality:
def download_video(update, context):
    url = update.message.text

    ydl_opts = {
        'outtmpl': '%(title)s.%(ext)s',  # Output file name template
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',  
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        try:
            info = ydl.extract_info(url, download=False)
            video_title = info['title']
            video_url = info['url']
            ydl.download([url])
            context.bot.send_message(chat_id=update.effective_chat.id, text="Video downloaded successfully!")
                        context.bot.send_video(chat_id=update.effective_chat.id, video=video_url, caption=video_title)
        except Exception as e:
            logger.error(f"Error downloading video: {e}")
            context.bot.send_message(chat_id=update.effective_chat.id, text="Failed to download the video.")
Enter fullscreen mode Exit fullscreen mode

Step 9: Set Up the Main Function

  • Add the following code to set up the main function that will run the bot:
  def main():
      updater = Updater(token='YOUR_API_TOKEN', use_context=True)

      dispatcher = updater.dispatcher

      dispatcher.add_handler(CommandHandler("start", start))
      dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, download_video))

      updater.start_polling()

      updater.idle()
Enter fullscreen mode Exit fullscreen mode

Step 10: Run the Bot

  • Replace 'YOUR_API_TOKEN' in the main() function with the API token you received from the BotFather in Step 1.
  • Add the following code at the bottom of your script to run the bot:
  if __name__ == '__main__':
      main()
Enter fullscreen mode Exit fullscreen mode

Step 11: Test Your Bot

  • Save the Python script and run it from your terminal or command prompt using the command:
  python telegram_video_downloader.py
Enter fullscreen mode Exit fullscreen mode
  • Open Telegram and search for the name of your bot.
  • Start a chat with your bot, and send it a YouTube video URL.
  • The bot should respond with a message indicating that the video has been downloaded successfully.

Your bot's full code should look like this:

import logging
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import youtube_dl

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)
logger = logging.getLogger(__name__)

def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Hello! I'm a video downloader bot. Just send me the URL of the video you want to download.")

def download_video(update, context):
    url = update.message.text

    ydl_opts = {
        'outtmpl': '%(title)s.%(ext)s',
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        try:
            info = ydl.extract_info(url, download=False)
            video_title = info['title']
            video_url = info['url']
            ydl.download([url])
            context.bot.send_message(chat_id=update.effective_chat.id, text="Video downloaded successfully!")
            context.bot.send_video(chat_id=update.effective_chat.id, video=video_url, caption=video_title)
        except Exception as e:
            logger.error(f"Error downloading video: {e}")
            context.bot.send_message(chat_id=update.effective_chat.id, text="Failed to download the video.")

def main():
    updater = Updater(token='YOUR_API_TOKEN', use_context=True)
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, download_video))
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

Enter fullscreen mode Exit fullscreen mode

Remember to replace 'YOUR_API_TOKEN' in the main() function with the API token you received from the BotFather.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (1)

Collapse
 
gabriel01 profile image
Iovany

First of all, thanks for the information.

I have a question; The code works for any video site, for example ok.ru?.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay