Files
manybot/setup
2026-03-14 02:42:38 -03:00

208 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
set -e
# ------------------------
# Cores
# ------------------------
RESET="\033[0m"
BOLD="\033[1m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
CYAN="\033[36m"
MAGENTA="\033[35m"
GRAY="\033[90m"
timestamp() {
date +"%H:%M:%S"
}
log() {
local level="$1"
local color="$2"
shift 2
echo -e "${GRAY}[$(timestamp)]${RESET} ${color}${level}${RESET} $*"
}
log_info() { log "[INFO]" "$BLUE" "$@"; }
log_ok() { log "[OK]" "$GREEN" "$@"; }
log_warn() { log "[WARN]" "$YELLOW" "$@"; }
log_error() { log "[ERROR]" "$RED" "$@"; }
log_cmd() { log "[CMD]" "$CYAN" "${BOLD}$*${RESET}"; }
log_debug() { log "[DBG]" "$GRAY" "$@"; }
# ------------------------
# Banner
# ------------------------
print_banner() {
echo -e "${MAGENTA}${BOLD}"
cat << "EOF"
_____ _____ _
| |___ ___ _ _| __ |___| |_
| | | | .'| | | | __ -| . | _|
|_|_|_|__,|_|_|_ |_____|___|_|
|___|
EOF
echo -e "${RESET}"
}
print_banner
log_info "Inicializando setup..."
# ------------------------
# Executar comandos
# ------------------------
run_cmd() {
log_cmd "$*"
"$@"
log_ok "Comando finalizado: $1"
}
# ------------------------
# Download
# ------------------------
download_file() {
local url="$1"
local dest="$2"
log_debug "download_file(url=$url, dest=$dest)"
if [[ -f "$dest" ]]; then
log_warn "Arquivo já existe: $dest"
return
fi
log_info "Baixando $url"
log_debug "Destino: $dest"
if command -v curl >/dev/null 2>&1; then
log_debug "Downloader: curl"
curl -L "$url" -o "$dest"
elif command -v wget >/dev/null 2>&1; then
log_debug "Downloader: wget"
wget "$url" -O "$dest"
else
log_error "curl ou wget não encontrados"
exit 1
fi
chmod +x "$dest" 2>/dev/null || true
log_ok "Arquivo pronto: $dest"
}
# ------------------------
# Detectar plataforma
# ------------------------
log_info "Detectando plataforma"
UNAME="$(uname -s)"
ARCH="$(uname -m)"
PLATFORM=""
case "$UNAME" in
Linux*) PLATFORM="linux";;
Darwin*) PLATFORM="mac";;
MINGW*|MSYS*|CYGWIN*) PLATFORM="win";;
*) PLATFORM="unknown";;
esac
log_info "Sistema: $UNAME"
log_info "Arquitetura: $ARCH"
log_info "Plataforma: $PLATFORM"
# ------------------------
# Informações do ambiente
# ------------------------
log_info "Verificando ambiente"
log_debug "Node: $(node -v 2>/dev/null || echo 'não encontrado')"
log_debug "npm: $(npm -v 2>/dev/null || echo 'não encontrado')"
log_debug "PREFIX: ${PREFIX:-<vazio>}"
# ------------------------
# Termux
# ------------------------
install_deps() {
local packages=("$@")
for pkg in "${packages[@]}"; do
if ! dpkg -s "$pkg" >/dev/null 2>&1; then
log_warn "$pkg não encontrado, instalando"
run_cmd pkg install -y "$pkg"
else
log_ok "$pkg já instalado"
fi
done
}
if [[ "$PREFIX" == *"com.termux"* ]]; then
log_info "Ambiente Termux detectado"
deps=(
chromium
pkg-config
python3
)
install_deps "${deps[@]}"
log_info "Usando sharp via WebAssembly"
if node -e "require('@img/sharp-wasm32')" >/dev/null 2>&1; then
log_ok "sharp-wasm já instalado"
else
npm install --cpu=wasm32 @img/sharp-wasm32
fi
fi
# ------------------------
# Setup npm
# ------------------------
log_info "Instalando dependências npm"
export PUPPETEER_SKIP_DOWNLOAD=1
run_cmd npm install
# ------------------------
# Diretórios
# ------------------------
log_info "Preparando diretórios"
mkdir -p bin
log_debug "Diretório bin garantido"
# ------------------------
# Arquivos por plataforma
# ------------------------
log_info "Selecionando dependências binárias"
files=()
if [[ "$PLATFORM" == "win" ]]; then
log_debug "Usando binários Windows"
files=(
"https://github.com/synt-xerror/manybot/releases/download/dependencies/yt-dlp.exe bin/yt-dlp.exe"
"https://github.com/synt-xerror/manybot/releases/download/dependencies/ffmpeg.exe bin/ffmpeg.exe"
)
else
log_debug "Usando binários Unix"
files=(
"https://github.com/synt-xerror/manybot/releases/download/dependencies/yt-dlp bin/yt-dlp"
"https://github.com/synt-xerror/manybot/releases/download/dependencies/ffmpeg bin/ffmpeg"
)
fi
log_debug "Total de arquivos para baixar: ${#files[@]}"
# ------------------------
# Download
# ------------------------
for file in "${files[@]}"; do
url="${file%% *}"
dest="${file##* }"
log_info "Processando dependência"
download_file "$url" "$dest"
done
log_ok "Setup concluído com sucesso"