Spaces:
Runtime error
Runtime error
| """ | |
| 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) | |
| async def start_handler(client, message): | |
| await message.reply_text("π **Welcome!**\n\nSend TikTok link with `/tt <url>`", parse_mode=ParseMode.MARKDOWN) | |
| async def help_handler(client, message): | |
| await message.reply_text("π **Help:**\n\nSend `/tt <tiktok_url>` to download video.", parse_mode=ParseMode.MARKDOWN) | |
| 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() | |