#!/bin/bash # Couleurs de texte NOIR='\e[30m' ROUGE='\e[31m' VERT='\e[32m' JAUNE='\e[33m' BLEU='\e[34m' ROSE='\e[35m' CYAN='\e[36m' BLANC='\e[37m' # Couleurs de fond FOND_NOIR='\e[40m' FOND_ROUGE='\e[41m' FOND_VERT='\e[42m' FOND_JAUNE='\e[43m' FOND_BLEU='\e[44m' FOND_ROSE='\e[45m' FOND_CYAN='\e[46m' FOND_BLANC='\e[47m' # Effets GRAS='\e[1m' SOULIGNE='\e[4m' CLIGNOTANT='\e[5m' INVERSE='\e[7m' NORMAL='\e[0m' updated="0" #Vérification des prérequis echo -e "$BLEU""Vérification si les prérequis sont disponibles""$NORMAL" LISTE_APPLIS="curl basename php screen" BIN_DIR="$HOME/bin" AUTOPOST_DIR="$HOME/autopost" # Vérifier si le dossier bin existe, sinon le créer echo -e "$BLEU""Vérification de la présence du dossier bin""$NORMAL" if [ ! -d "$BIN_DIR" ]; then mkdir -p "$BIN_DIR" fi # Création des répertoires si inexistants mkdir -p "$AUTOPOST_DIR" # Télécharger les fichiers dans autopost # Liste des fichiers à vérifier et mettre à jour declare -A FILES FILES["$HOME/autopost/analyzer.sh"]="https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/analyzer.sh" FILES["$HOME/autopost/posteur.sh"]="https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/posteur.sh" FILES["$HOME/autopost/common.sh"]="https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/common.sh" FILES["$HOME/bin/postauto"]="https://tig.unfr.pw/UNFR/postauto/raw/branch/main/bin/postauto" FILES["$HOME/autopost/server.js"]="https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/server.js" # Vérification et mise à jour des fichiers for LOCAL_FILE in "${!FILES[@]}"; do URL="${FILES[$LOCAL_FILE]}" TMP_FILE=$(mktemp) # Télécharger le fichier distant curl -s "$URL" -o "$TMP_FILE" # Comparer avec le fichier local et mettre à jour si nécessaire if ! diff -q "$LOCAL_FILE" "$TMP_FILE" > /dev/null 2>&1; then #diff -u "$LOCAL_FILE" "$TMP_FILE" || echo "Le fichier local n'existe pas encore." echo "Mise à jour de $LOCAL_FILE..." mv "$TMP_FILE" "$LOCAL_FILE" chmod +x "$LOCAL_FILE" updated="1" else rm "$TMP_FILE" fi done # Définir le chemin du fichier bashrc BASHRC_FILE="$HOME/.bashrc" # Marqueurs pour identifier la section ajoutée DEBUT_MARKER="# DEBUT COMPLETION POSTAUTO" FIN_MARKER="# FIN COMPLETION POSTAUTO" # Le code de complétion à ajouter, encadré par les marqueurs read -r -d '' COMPLETION_CODE << 'EOF' # DEBUT COMPLETION POSTAUTO # Fonction de complétion pour ton script _autopost_completion() { local cur prev opts cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" # Liste des commandes disponibles opts="start stop restart show status createdb add log check update" # Si l'utilisateur est en train de taper le premier argument, proposer les commandes if [ $COMP_CWORD -eq 1 ]; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 fi # (Optionnel) Pour la sous-commande "add", proposer des fichiers en complétion if [ $COMP_CWORD -eq 2 ] && [ "${COMP_WORDS[1]}" = "add" ]; then COMPREPLY=( $(compgen -f -- "${cur}") ) return 0 fi } # Associer la fonction de complétion à ton script (ici, 'postauto' est le nom de la commande) complete -F _autopost_completion postauto # FIN COMPLETION POSTAUTO EOF # Vérifier si le code est déjà présent dans le fichier bashrc echo "Vérification et mise à jour de la configuration de complétion dans $BASHRC_FILE" if grep -q "$DEBUT_MARKER" "$BASHRC_FILE"; then # Extraire l'ancien bloc OLD_COMPLETION=$(sed -n "/$DEBUT_MARKER/,/$FIN_MARKER/p" "$BASHRC_FILE") # Comparer avec la nouvelle version if [ "$OLD_COMPLETION" != "$COMPLETION_CODE" ]; then echo "Mise à jour nécessaire, modification du bloc de complétion..." # Faire une sauvegarde de sécurité du fichier .bashrc cp "$BASHRC_FILE" "${BASHRC_FILE}.bak" echo "Sauvegarde réalisée dans ${BASHRC_FILE}.bak" # Supprimer l'ancien bloc sed -i "/$DEBUT_MARKER/,/$FIN_MARKER/d" "$BASHRC_FILE" # Ajouter une ligne vide pour séparer (optionnel) echo "" >> "$BASHRC_FILE" # Ajouter le nouveau code de complétion echo "$COMPLETION_CODE" >> "$BASHRC_FILE" echo "Mise à jour effectuée." updated="1" else echo "Aucune modification nécessaire, le bloc est déjà à jour." fi else # Ajouter le bloc si absent echo "Ajout du bloc de complétion..." echo "" >> "$BASHRC_FILE" echo "$COMPLETION_CODE" >> "$BASHRC_FILE" echo "Ajout terminé." updated="1" fi echo "Vérification de l'environnement pour la page de suivi..." # Fonction pour afficher les messages en vert log() { echo -e "\033[1;32m$1\033[0m" } # Définition du répertoire AUTOPOST_DIR (ajuster si nécessaire) AUTOPOST_DIR="$HOME/autopost" # Création du dossier si inexistant mkdir -p "$AUTOPOST_DIR" # Définir le répertoire NVM export NVM_DIR="$HOME/.nvm" # Vérifier si nvm est déjà chargé dans la session actuelle if [ -s "$NVM_DIR/nvm.sh" ]; then log "nvm est déjà installé. Chargement de nvm..." \. "$NVM_DIR/nvm.sh" else log "nvm non trouvé, installation de nvm..." # Installer nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash # Après l'installation, sourcer nvm pour la session courante export NVM_DIR="$HOME/.nvm" if [ -s "$NVM_DIR/nvm.sh" ]; then \. "$NVM_DIR/nvm.sh" log "NVM installé et chargé." else log "Erreur : nvm n'a pas pu être chargé." exit 1 fi fi # Vérification de Node.js if command -v node &> /dev/null; then current_version=$(node -v | sed 's/^v//') major_version=$(echo "$current_version" | cut -d. -f1) if [ "$major_version" -lt 22 ]; then log "Node.js version $current_version détectée (inférieure à 22). Mise à jour en cours..." nvm install 22 nvm use 22 else log "Node.js version $current_version détectée, compatible." fi else log "Node.js non trouvé, installation de Node.js 22..." nvm install 22 nvm use 22 updated="1" fi # Charger nvm après installation export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # Vérification des modules npm nécessaires log "Vérification des modules npm requis..." modules=("express" "express-session" "sqlite3" "ansi-to-html" "@tailwindcss/browser" "jquery" "mysql2") missing_modules=() for module in "${modules[@]}"; do # On regarde uniquement les dépendances directes et on vérifie si le module apparaît dans la sortie. if ! npm list "$module" --depth=0 2>&1 | grep -q "$module@"; then missing_modules+=("$module") fi done if [ ${#missing_modules[@]} -gt 0 ]; then log "Modules manquants détectés : ${missing_modules[*]}" npm install "${missing_modules[@]}" else log "Tous les modules requis sont déjà installés." fi # Vérification et téléchargement des fichiers de configuration log "Vérification des fichiers de configuration..." if [ ! -f "$AUTOPOST_DIR/server.js" ]; then log "Téléchargement de server.js..." wget -q -O "$AUTOPOST_DIR/server.js" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/server.js" updated="1" fi if [ ! -f "$AUTOPOST_DIR/db.js" ]; then log "Téléchargement de db.js..." wget -q -O "$AUTOPOST_DIR/db.js" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/db.js" updated="1" fi if [ ! -f "$AUTOPOST_DIR/config.js" ]; then log "Téléchargement de config.js..." wget -q -O "$AUTOPOST_DIR/config.js" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/config.js" echo -e "${BLEU}Installation terminée. Vous pouvez maintenant configurer $AUTOPOST_DIR/config.js.${NORMAL}" fi # Vérifier et installer 7z si manquant if command -v 7z > /dev/null 2>&1; then LISTE_APPLIS+=("7z") else echo -e "${ROUGE}7z est manquant. Installation en cours...${NORMAL}" Z_URL="https://7-zip.org/a/7z2409-linux-x64.tar.xz" Z_TAR="7z2409-linux-x64.tar.xz" Z_DIR="7z2409-linux-x64" Z_EXE="7zzs" wget -q -O "$Z_TAR" "$Z_URL" tar -xJf "$Z_TAR" > /dev/null 2>&1 mv "$Z_EXE" "$BIN_DIR/7z" rm "$Z_TAR" 7zz chmod 777 "$BIN_DIR/7z" LISTE_APPLIS+=("$BIN_DIR/7z") fi #echo -e "${ROUGE}Merci d'aller lire le readme pour compresser vos anciens NZB${NORMAL}" if [ $updated = "1" ]; then echo -e "${ROUGE}Mise à jour effectué merci de relancer la commande 'postauto restart'${NORMAL}" fi #echo "Suppression du script après exécution..." rm -- "$0"