Spaces:
Runtime error
Runtime error
File size: 2,593 Bytes
36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 aa32e01 36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 9636743 36c8357 aa32e01 36c8357 9636743 36c8357 9636743 36c8357 aa32e01 36c8357 aa32e01 9636743 aa32e01 9636743 aa32e01 36c8357 9636743 aa32e01 9636743 aa32e01 36c8357 aa32e01 9636743 36c8357 aa32e01 36c8357 9636743 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | """
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()
|