loader image

Reply To: How to Stop Ad Blocker Detection on Websites Like YouTube

What makes us different from other similar websites? Forums Tech How to Stop Ad Blocker Detection on Websites Like YouTube Reply To: How to Stop Ad Blocker Detection on Websites Like YouTube

#8475
thumbtak
Moderator

Fixed: Quoted path variables, used arrays for auth flags, fixed metadata fetch quoting, and updated browser-selection logic

#!/bin/bash

# --- COLORS & STYLING ---
G='\033[0;32m' # Success
B='\033[0;34m' # Secondary
P='\033[38;5;211m' # Rose Pink (Primary)
Y='\033[1;33m' # Warning
R='\033[0;31m' # Danger
W='\033[1;37m' # Highlight
NC='\033[0m' # Reset

# --- CONFIGURATION ---
YTDLP_URL="https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp"
YTDLP_BIN="./yt-dlp"
OUTPUT_BASENAME="downloaded_video"
PLAYLIST_FILE="video_playlist.txt"
CONFIG_FILE=".ytdlp_config"
LOC_CONFIG=".ytdlp_location"

# --- LOCATION HELPER ---
get_save_directory() {
local SAVED_DIR=""
[ -f "$LOC_CONFIG" ] && SAVED_DIR=$(cat "$LOC_CONFIG")

if [ -d "$SAVED_DIR" ]; then
echo -e "${Y}» Existing Path Found:${NC} $SAVED_DIR" >&2
read -p " Use this location? (y/n): " USE_SAVED >&2
if [[ "$USE_SAVED" =~ ^[Yy]$ ]]; then
echo "$SAVED_DIR"
return 0
fi
fi

echo -e "${P}» Setup New Directory${NC}" >&2
read -p " Enter Full Path: " NEW_DIR >&2
if [ -d "$NEW_DIR" ]; then
echo "$NEW_DIR" > "$LOC_CONFIG"
echo "$NEW_DIR"
else
echo -e "${R}✘ Directory does not exist!${NC}" >&2
echo ""
fi
}

# --- AUTHENTICATION & UPDATE HELPER ---
get_failure_fix() {
echo -e "\n${R}┌───────────────────────────────────────────────────────────┐${NC}"
echo -e "${R}│ CRITICAL ERROR: Download Interrupted │${NC}"
echo -e "${R}└───────────────────────────────────────────────────────────┘${NC}"
echo -e " [${P}U${NC}] Check for Updates [${P}B${NC}] Link Browser Cookies"
echo -e " [${P}F${NC}] Manual cookies.txt [${P}N${NC}] Return to Dashboard"
echo -e "${B}─────────────────────────────────────────────────────────────${NC}"
read -p " Action Required: " FIX_CHOICE

case $FIX_CHOICE in
[uU]*)
echo "Checking for updates..."
if "$YTDLP_BIN" -U; then
echo "Update successful."
else
curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN"
fi
return 0 ;;
[fF]*)
read -p " Path to cookies.txt: " USER_FILE
# Store only the path to keep command building clean
[ -f "$USER_FILE" ] && echo "$USER_FILE" > "$CONFIG_FILE" && return 0 ;;
[bB]*)
echo -e " (1)Chrome (2)Firefox (3)Brave (4)Edge (5)Opera (6)Vivaldi (7)Tor"
read -p " Select [1-7]: " B_NUM
case $B_NUM in 1) B="chrome";; 2) B="firefox";; 3) B="brave";; 4) B="edge";; 5) B="opera";; 6) B="vivaldi";; 7) B="tor";; *) return 1;; esac
# Store the browser name only
echo "BROWSER:$B" > "$CONFIG_FILE" && return 0 ;;
*) return 1 ;;
esac
}

# --- CORE FUNCTIONS ---
run_yt_dlp() {
local URL=$1
local AUTH_OPTS=()

if [ -f "$CONFIG_FILE" ]; then
VAL=$(cat "$CONFIG_FILE")
if [[ "$VAL" == BROWSER:* ]]; then
AUTH_OPTS=("--cookies-from-browser" "${VAL#BROWSER:}")
else
AUTH_OPTS=("--cookies" "$VAL")
fi
fi

"$YTDLP_BIN" "${AUTH_OPTS[@]}" -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \
--merge-output-format mp4 --output "${OUTPUT_BASENAME}.%(ext)s" "$URL"
return $?
}

process_media() {
local MODE=$1
local URL=$2
local RETRY=true

if [ -z "$URL" ]; then
CLIP=$(xclip -selection clipboard -o 2>/dev/null)
echo -e "${P}» Input URL${NC}"
read -p " Paste link (Enter for clipboard): " MANUAL_URL
URL=${MANUAL_URL:-$CLIP}
fi
[ -z "$URL" ] && return

[[ "$MODE" != "SILENT" ]] && read -p " Monitor Index (0-9) [Default 0]: " MON && MON=${MON:-0}

while [ "$RETRY" = true ]; do
if run_yt_dlp "$URL"; then
RETRY=false
FILE=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1)
if [ -f "$FILE" ]; then
[[ "$MODE" != "SILENT" ]] && mpv --fs --screen="$MON" "$FILE"

if [[ "$MODE" == "DOWNLOAD" || "$MODE" == "STREAM" ]]; then
read -p " Download complete. Save file? (y/n): " KEEP
if [[ "$KEEP" =~ ^[Yy]$ ]]; then
DEST=$(get_save_directory)
if [ -n "$DEST" ] && [ -d "$DEST" ]; then
# Build title using the same fixed auth logic
local SA_OPTS=()
if [ -f "$CONFIG_FILE" ]; then
local V=$(cat "$CONFIG_FILE")
[[ "$V" == BROWSER:* ]] && SA_OPTS=("--cookies-from-browser" "${V#BROWSER:}") || SA_OPTS=("--cookies" "$V")
fi

TITLE=$("$YTDLP_BIN" "${SA_OPTS[@]}" --get-title "$URL" | tr -dc '[:alnum:]\n\r ' | tr ' ' '_')
mv "$FILE" "$DEST/${TITLE}.mp4"
echo -e "${G}✔ Saved to $DEST/${TITLE}.mp4${NC}"
read -p "Press Enter to continue..."
else
echo -e "${R}✘ Save cancelled or directory invalid.${NC}"
rm "$FILE"
read -p "Press Enter to continue..."
fi
else
[ -f "$FILE" ] && rm "$FILE"
fi
fi
fi
else
if get_failure_fix; then
read -p " Fix applied. Retry now? (y/n): " REA
[[ ! "$REA" =~ ^[Yy]$ ]] && RETRY=false
else
RETRY=false
read -p " Press Enter to continue..."
fi
fi
done
}

# --- DASHBOARD ---
[ ! -f "$YTDLP_BIN" ] && curl -L "$YTDLP_URL" -o "$YTDLP_BIN" && chmod +x "$YTDLP_BIN"

while true; do
clear
# Rose Pink Header
echo -e "${P} ████████╗ █████╗ ██╗ ██╗███████╗ ███████╗██╗ ██╗ █████╗ ██████╗██╗ ██╗"
echo -e " ╚══██╔══╝██╔══██╗██║ ██╔╝██╔════╝ ██╔════╝██║ ██║██╔══██╗██╔════╝██║ ██╔╝"
echo -e " ██║ ███████║█████╔╝ ███████╗ ███████╗███████║███████║██║ █████╔╝ "
echo -e " ██║ ██╔══██║██╔═██╗ ╚════██║ ╚════██║██╔══██║██╔══██║██║ ██╔═██╗ "
echo -e " ██║ ██║ ██║██║ ██╗███████║ ███████║██║ ██║██║ ██║╚██████╗██║ ██╗"
echo -e " ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝${NC}"

echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}"

# Redesigned YouTube Icon
echo -e " ${R} ▄▄██████████████████▄▄"
echo -e " ████████████████████████"
echo -e " ██████████${W}█${R}█████████████"
echo -e " ██████████${W}███${R}███████████"
echo -e " ██████████${W}█████${R}█████████"
echo -e " ██████████${W}███${R}███████████"
echo -e " ██████████${W}█${R}█████████████"
echo -e " ████████████████████████"
echo -e " ▀▀██████████████████▀▀${NC}"
echo ""

# Rose Pink DOWNLOADER Header
echo -e "${P} ██████╗ ██████╗ ██╗ ██╗███╗ ██╗██╗ ██████╗ █████╗ ██████╗ ███████╗██████╗ "
echo -e " ██╔══██╗██╔═══██╗██║ ██║████╗ ██║██║ ██╔═══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗"
echo -e " ██║ ██║██║ ██║██║ █╗ ██║██╔██╗ ██║██║ ██║ ██║███████║██║ ██║█████╗ ██████╔╝"
echo -e " ██║ ██║██║ ██║██║███╗██║██║╚██╗██║██║ ██║ ██║██╔══██║██║ ██║██╔══╝ ██╔══██╗"
echo -e " ██████╔╝╚██████╔╝╚███╔███╔╝██║ ╚████║███████╗╚██████╔╝██║ ██║██████╔╝███████╗██║ ██╗"
echo -e " ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝${NC}"

echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}"
echo -e " ${W}Media Engine${NC} | TAKsShack.com"
echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}"

# Status Indicators
if [ -f "$CONFIG_FILE" ]; then
echo -e " ${G}●${NC} AUTH: ${W}$(cat "$CONFIG_FILE")${NC}"
else
echo -e " ${R}○${NC} AUTH: ${B}Anonymous${NC}"
fi

if [ -f "$LOC_CONFIG" ]; then
echo -e " ${G}●${NC} PATH: ${W}$(cat "$LOC_CONFIG")${NC}"
else
echo -e " ${R}○${NC} PATH: ${B}Not Configured${NC}"
fi
echo ""

# Menu Options
echo -e " [${P}1${NC}] Stream Video [${P}4${NC}] Run Playlist File"
echo -e " [${P}2${NC}] Download & Play [${P}5${NC}] Silent Batch Download"
echo -e " [${P}3${NC}] Multi-Link Process [${P}c${NC}] Reset / Update Core"
echo -e " [${P}6${NC}] ${R}Exit Terminal${NC}"
echo -e " ${B}─────────────────────────────────────────────────────────────────────────────${NC}"
echo -n " SELECT ACTION: "
read CHOICE

case $CHOICE in
1) process_media "STREAM" ;;
2) process_media "DOWNLOAD" ;;
3) read -p " Paste links: " MUL; for L in $MUL; do process_media "DOWNLOAD" "$L"; done ;;
4) [ -f "$PLAYLIST_FILE" ] && while read -r L; do process_media "STREAM" "$L"; done < "$PLAYLIST_FILE" ;;
5)
read -p " Paste links: " B_URLS
B_DEST=$(get_save_directory)
if [ -d "$B_DEST" ]; then
for L in $B_URLS; do
process_media "SILENT" "$L"
F=$(ls ${OUTPUT_BASENAME}.* 2>/dev/null | head -n 1)
[ -f "$F" ] && mv "$F" "$B_DEST/"
done
fi ;;
c|C)
echo -e " Clear [${P}A${NC}]uth or [${P}L${NC}]ocation?"
read CLEAR_MODE
[[ "$CLEAR_MODE" =~ ^[Aa]$ ]] && rm "$CONFIG_FILE" 2>/dev/null
[[ "$CLEAR_MODE" =~ ^[Ll]$ ]] && rm "$LOC_CONFIG" 2>/dev/null
;;
6) rm "$YTDLP_BIN" 2>/dev/null; clear; break ;;
esac
done
TAKs Shack