Build and run:
[Service] Type=simple User=youruser WorkingDirectory=/path/to/bot ExecStart=/usr/bin/python3 /path/to/bot/bot.py Restart=always youtube downloader telegram bot
WORKDIR /app
# Store URL for user user_data[user_id] = {'url': url} download=False) title = info.get('title'
try: # Extract video info with yt_dlp.YoutubeDL(YDL_OPTS_INFO) as ydl: info = ydl.extract_info(url, download=False) title = info.get('title', 'Unknown Title') duration = info.get('duration', 0) # Format duration minutes, seconds = divmod(duration, 60) duration_str = f"{minutes}:{seconds:02d}" # Create keyboard for format selection keyboard = [ [ InlineKeyboardButton("🎥 Video (720p)", callback_data="video"), InlineKeyboardButton("🎵 Audio (MP3)", callback_data="audio") ], [InlineKeyboardButton("❌ Cancel", callback_data="cancel")] ] reply_markup = InlineKeyboardMarkup(keyboard) # Update message with video info info_text = ( f"✅ *Video found!*\n\n" f"📹 *Title:* {title}\n" f"⏱️ *Duration:* {duration_str}\n\n" f"Choose download format:" ) await status_msg.edit_text(info_text, parse_mode='Markdown', reply_markup=reply_markup) user_data[user_id]['title'] = title except Exception as e: logger.error(f"Error extracting info: {e}") await status_msg.edit_text("❌ Failed to analyze video. Please check the URL and try again.") async def button_callback(update: Update, context: ContextTypes.DEFAULT_TYPE): query = update.callback_query await query.answer() 'Unknown Title') duration = info.get('duration'