DEV Community

Vlythr
Vlythr

Posted on • Edited on

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.

Top comments (4)

Collapse
 
pro_seo_0e7498ce1cb68539b profile image
Pro Seo • Edited

Creating a Telegram video downloader bot involves using APIs and libraries like python-telegram-bot, and as Wikipedia explains, bots are automated programs that interact with users to perform specific tasks efficiently.
Such tools simplify downloading and managing media content, but it’s important to consider platform policies and copyright guidelines while using them.
For similar convenience across platforms, a pinterest video downloader can help users easily save and access their favorite visual content.

Collapse
 
itraker_73a2b6e39898c1359 profile image
iTraker

how tto fix this ?

ERROR: Sign in to confirm you’re not a bot

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?.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.