Back to Tech
Tech • Downloader Bot

Telegram Video Downloader Bot ဖန်တီးနည်း 📥

Yan Naing Lynn 17 Dec 2025 Guide

မင်္ဂလာပါ ခင်ဗျာ။ ဒီနေ့မှာတော့ လူကြိုက်များပြီး အသုံးဝင်တဲ့ Telegram Downloader Bot တစ်ခုအကြောင်း မျှဝေပေးချင်ပါတယ်။ ဒီ Bot လေးက YouTube, TikTok, Facebook စတဲ့ Social Media တွေက Video တွေကို Watermark မပါဘဲ ဒေါင်းလုပ်ဆွဲပေးနိုင်မှာပါ။

✨ Bot ရဲ့ အားသာချက်များ

  • Watermark မပါ — TikTok ဗီဒီယိုတွေကို သန့်သန့်ရှင်းရှင်း ဒေါင်းပေးနိုင်ပါတယ်။
  • မြန်ဆန်မှု — VPS/Server အမြန်နှုန်းမြင့်ရင် ပိုမြန်ပါတယ်။
  • အခမဲ့ — ကိုယ်ပိုင်တင်ထားရင် ကိုယ်ပိုင်အသုံးစရိတ်တင်ပဲရှိပါတယ်။

Programming အများကြီး မသိရင်တောင် လိုက်လုပ်လို့ရအောင် တစ်ဆင့်ချင်း ရှင်းပေးထားပါတယ်။

လိုအပ်သောအရာများ (Requirements)
  • VPS တစ်လုံး (Ubuntu OS)
  • Telegram Bot Token (BotFather မှ ယူပါ)
  • Python (Ver 3.x)

အဆင့် (၁) - Server ပြင်ဆင်ခြင်း

ပထမဆုံး Server ကို Update လုပ်ပါမယ်။

sudo apt update && sudo apt upgrade -y

Downloader အတွက် (ffmpeg) သွင်းပါမယ်။

sudo apt install ffmpeg -y

Bot run ဖို့ Python3 + screen သွင်းပါမယ်။

sudo apt install python3-pip screen -y

Python Library များ သွင်းခြင်း: Pyrogram နဲ့ tgcrypto (မြန်ဆန်ဖို့) + yt-dlp (download) သွင်းပါ။ Error တက်ရင် --break-system-packages ဖြုတ်ပြီး ပြန်သွင်းပါ။

pip3 install pyrogram tgcrypto yt-dlp --break-system-packages

yt-dlp ကို Official GitHub ကနေ update (Facebook error မတက်အောင်)။

pip3 install -U https://github.com/yt-dlp/yt-dlp/archive/master.zip --break-system-packages

အဆင့် (၂) - API ID နှင့် Hash ရယူခြင်း

ပုံမှန် Bot တွေက 50MB limit ရှိတတ်ပါတယ်။ 2GB အထိ ပို့နိုင်အောင် Pyrogram သုံးထားလို့ API ID / HASH လိုပါတယ်။

  1. my.telegram.org ကို ဝင်ပါ။
  2. ဖုန်းနံပါတ်ရိုက်ထည့်ပြီး Login ဝင်ပါ။
  3. API Development tools ကို နှိပ်ပါ။
  4. App title / Short name ကို ဖြည့်ပါ (ဥပမာ MyDownloader)။
  5. Create နှိပ်ပြီး api_id နဲ့ api_hash ကို ကူးယူထားပါ။

အဆင့် (၃) - Script ရေးသားခြင်း

Folder သီးသန့်ဆောက်ပြီး ဝင်ပါမယ်။

mkdir downloader_bot && cd downloader_bot

Bot ဖိုင်တည်ဆောက်ပါမယ်။

nano downloader.py
⚠️ သတိပြုရန်: BOT_TOKEN, API_ID, API_HASH ကို မိမိအချက်အလက်အမှန် ထည့်ပေးပါ။
import os
import time
import asyncio
import yt_dlp
from pyrogram import Client, filters

# ==========================================
# ⚠️ User Credentials
BOT_TOKEN = 'Bot token ထည့်ရန်'
API_ID = api id ထည့်ပေးရန်
API_HASH = 'api hash ထည့်ပေးရန်'
# ==========================================

app = Client("my_bot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN)

# --- Helper: Progress Bar ---
async def progress(current, total, message):
    now = time.time()
    if not hasattr(message, 'last_update_time'):
        message.last_update_time = 0
    if now - message.last_update_time > 5:
        percent = current * 100 / total
        try:
            await message.edit_text(f"📤 Uploading: {percent:.1f}%")
        except:
            pass
        message.last_update_time = now

# --- Start Command ---
@app.on_message(filters.command("start"))
async def start(client, message):
    await message.reply_text(
        "👋 **Video Downloader Bot Ready!**\n\n"
        "Link ပို့လိုက်ရင် Video ဒေါင်းပေးပါမယ်။\n"
        "(YouTube, Facebook, TikTok, Instagram, Sora etc.)"
    )

# --- Cookie Handler (Downloader အတွက် မရှိမဖြစ်မို့ ထားထားပါသည်) ---
@app.on_message(filters.document)
async def handle_cookies(client, message):
    file_name = message.document.file_name.lower()

    if file_name.endswith(".txt"):
        save_name = "cookies.txt"
        if "fb" in file_name:
            save_name = "fb_cookies.txt"
        elif "ig" in file_name:
            save_name = "ig_cookies.txt"
        elif "sora" in file_name:
            save_name = "sora_cookies.txt"
        elif "yt" in file_name:
            save_name = "yt_cookies.txt"

        await message.download(file_name=save_name)
        await message.reply_text(f"🍪 **{save_name}** saved!")

# --- Downloader Logic ---
@app.on_message(filters.text & ~filters.command("start"))
async def download_video(client, message):
    url = message.text
    if not url.startswith("http"):
        return await message.reply_text("⚠️ Link အမှန်ပေးပို့ပါ။")

    status_msg = await message.reply_text("⏳ **Downloading...**")

    try:
        timestamp = int(time.time())

        ydl_opts = {
            'format': 'bestvideo+bestaudio/best',
            'outtmpl': f"video_{timestamp}.%(ext)s",
            'quiet': True,
            'max_filesize': 2000 * 1024 * 1024,  # 2GB
            'extractor_args': {'generic': ['impersonate']},
        }

        cookie_file = None
        if "facebook.com" in url or "fb.watch" in url:
            cookie_file = "fb_cookies.txt"
        elif "instagram.com" in url:
            cookie_file = "ig_cookies.txt"
        elif "sora" in url:
            cookie_file = "sora_cookies.txt"
        elif any(x in url for x in ["youtube.com", "youtu.be"]):
            cookie_file = "yt_cookies.txt"
        else:
            cookie_file = "cookies.txt"

        if cookie_file:
            if os.path.exists(f"downloads/{cookie_file}"):
                ydl_opts['cookiefile'] = f"downloads/{cookie_file}"
            elif os.path.exists(cookie_file):
                ydl_opts['cookiefile'] = cookie_file

        loop = asyncio.get_event_loop()
        def _dl():
            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                info = ydl.extract_info(url, download=True)
                return ydl.prepare_filename(info)

        final_filename = await loop.run_in_executor(None, _dl)

        if not os.path.exists(final_filename):
            await status_msg.edit_text("❌ Download Failed.")
            return

        await status_msg.edit_text("📤 **Uploading...**")
        await client.send_video(
            chat_id=message.chat.id,
            video=final_filename,
            caption="✅ Downloaded via Bot",
            supports_streaming=True,
            progress=progress,
            progress_args=(status_msg,)
        )
        os.remove(final_filename)
        await status_msg.delete()

    except Exception as e:
        await status_msg.edit_text(f"⚠️ Error: {str(e)}")
        if 'final_filename' in locals() and final_filename and os.path.exists(final_filename):
            os.remove(final_filename)

if __name__ == '__main__':
    print("Downloader Bot Started...")
    app.run()

Save လုပ်ရန်: Ctrl+XYEnter

Bot စမ်း run ကြည့်ပါမယ်။

python3 downloader.py

အဆင့် (၄) - 24/7 Run နိုင်ရန် Service ဖန်တီးခြင်း

Bot ကို terminal ပိတ်သွားရင်တောင် run နေဖို့ service ဖန်တီးပါမယ်။ အရင်ဆုံး bot ကို Ctrl+C နဲ့ ရပ်ပါ။

sudo nano /etc/systemd/system/downloader.service

Service file ထဲမှာ အောက်ကစာတွေ ထည့်ပါ။

[Unit]
Description=Video Downloader Bot
After=network.target

[Service]
User=root
WorkingDirectory=/root/downloader_bot
ExecStart=/usr/bin/python3 /root/downloader_bot/downloader.py
Restart=always

[Install]
WantedBy=multi-user.target

ပြီးရင် Start/Enable လုပ်ပါ။

sudo systemctl daemon-reload
sudo systemctl start downloader
sudo systemctl enable downloader

အဆင့် (၅) - Login Error ဖြေရှင်းနည်း (Cookies)

YouTube/Facebook/Instagram မှာ login error တက်ရင် cookies ထည့်ရပါတယ်။

📱 Android

  1. Kiwi Browser ကို install လုပ်ပါ။
  2. YouTube.com ကိုသွားပြီး Gmail login ဝင်ထားပါ။
  3. Get cookies.txt LOCALLY extension ကို install လုပ်ပါ။
  4. Export လုပ်ပြီး cookies.txt ကို bot ဆီပို့ပါ။

💻 PC

  1. Chrome မှာ Get cookies.txt LOCALLY extension ထည့်ပါ။
  2. YouTube login ဝင်ပါ။
  3. Export လုပ်ပြီး ဖိုင်ကို bot ဆီ ပို့ပါ။
⚠️ အရေးကြီး: cookies file နာမည်ချိန်းပြီး ပို့ပါ
• Facebook: fb_cookies.txt
• YouTube: yt_cookies.txt
• Instagram: ig_cookies.txt

🎉 ပြီးဆုံးပါပြီ

Demo Bot ကို စမ်းသုံးချင်ရင် အောက်ကနေ သွားနိုင်ပါတယ်။