amkyawdev's picture
Simple bot only
9636743 verified
Raw
History Blame Contribute Delete
2.59 kB
"""
TikTok Downloader Bot - Telegram Bot Only
"""
import os
import asyncio
import logging
import tempfile
import yt_dlp
from pyrogram import Client, filters
from pyrogram.enums import ParseMode
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
API_ID = os.getenv('API_ID')
API_HASH = os.getenv('API_HASH')
BOT_TOKEN = os.getenv('BOT_TOKEN')
logger.info(f"Bot starting...")
app = Client("TikTokDownloaderBot", api_id=API_ID, api_hash=API_HASH, bot_token=BOT_TOKEN)
@app.on_message(filters.command("start") & filters.private)
async def start_handler(client, message):
await message.reply_text("πŸ‘‹ **Welcome!**\n\nSend TikTok link with `/tt <url>`", parse_mode=ParseMode.MARKDOWN)
@app.on_message(filters.command("help") & filters.private)
async def help_handler(client, message):
await message.reply_text("πŸ“– **Help:**\n\nSend `/tt <tiktok_url>` to download video.", parse_mode=ParseMode.MARKDOWN)
@app.on_message(filters.command("tt") & filters.private)
async def download_handler(client, message):
if len(message.command) < 2:
await message.reply_text("❌ Usage: `/tt <tiktok_url>`", parse_mode=ParseMode.MARKDOWN)
return
url = message.command[1]
status_msg = await message.reply_text("πŸ” Searching...")
try:
await status_msg.edit("πŸ“‘ Fetching info...")
ydl_opts = {'quiet': True, 'extract_flat': False}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(url, download=False)
title, views, duration = info.get('title','Video'), info.get('view_count',0), info.get('duration',0)
await status_msg.edit("⬇️ Downloading...")
out_file = tempfile.NamedTemporaryFile(suffix='.mp4', delete=False)
out_file.close()
ydl_opts = {"format": "mp4", "outtmpl": out_file.name, "quiet": True}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
await status_msg.edit("⬆️ Uploading...")
dur = f"{int(duration//60)}:{int(duration%60):02d}" if duration else "N/A"
caption = f"🎡 {title}\nπŸ‘οΈ {views:,} views\n⏱️ {dur}\nπŸ”— [Link]({url})"
await message.reply_video(video=out_file.name, caption=caption, parse_mode=ParseMode.MARKDOWN)
await status_msg.delete()
os.remove(out_file.name)
except Exception as e:
logger.error(f"Error: {e}")
await status_msg.edit(f"❌ Error: {str(e)}", parse_mode=ParseMode.MARKDOWN)
logger.info("πŸ€– Starting Telegram bot...")
app.run()