diff --git a/autopost/analyzer.php b/autopost/analyzer.php
new file mode 100644
index 0000000..e4d6599
--- /dev/null
+++ b/autopost/analyzer.php
@@ -0,0 +1,130 @@
+ pour choisir la méthode d'analyse
+if (strpos($xmlContent, '') !== false) {
+ // Analyse via Regex (approche nzbanal.php)
+ $rename = '/"(.*?).par2/';
+ preg_match($rename, $xmlContent, $matchesname);
+ $ngname = $matchesname[1];
+
+ if (empty($ngname)) {
+ $rename = '/subject="(.*?).par2/';
+ preg_match($rename, $xmlContent, $matchesname);
+ $ngname = $matchesname[1];
+ }
+
+ // Récupération du mot de passe
+ $repass = '/(.*?)<\/meta>/';
+ preg_match($repass, $xmlContent, $matchespass);
+ $password = $matchespass[1];
+
+ // Récupération de la date
+ $redate = '/date="(.*?)"/';
+ preg_match($redate, $xmlContent, $matchesdate);
+ $update = $matchesdate[1];
+ $update = date('d/m/Y', $update);
+
+ // Calcul de la taille des fichiers RAR/ISO/MKV/MP4
+ $regexsize = '/(rar|iso|mkv|mp4).*\(\d+\/\d+\) (\d+)/';
+ preg_match_all($regexsize, $xmlContent, $matchessize, PREG_PATTERN_ORDER, 0);
+
+ $filesize = formatBytesnzb(array_sum($matchessize[2]));
+
+ // Extraction des groupes
+ $regroup = '/(.*?)<\/group>/';
+ preg_match_all($regroup, $xmlContent, $matchesgroup, PREG_PATTERN_ORDER, 0);
+ $resultgroup = array_unique($matchesgroup[1]);
+
+ $GROUP = '';
+ $i = '0';
+ foreach ($resultgroup as $group) {
+ $GROUP .= $group;
+ $i++;
+ }
+
+ // Création de l'objet JSON pour cette approche
+ $myObj = new stdClass();
+ $myObj->Name = $ngname;
+ $myObj->Pass = $password;
+ $myObj->Date = $update;
+ $myObj->Groupes = $GROUP;
+ $myObj->Taille = $filesize;
+ $myObj->Taillebit = array_sum($matchessize[2]);
+
+ $myJSON = json_encode($myObj);
+ echo $myJSON;
+} else {
+ // Analyse via XML (approche nzbanal_obs.php)
+ $password = 'Aucun';
+ $xml = @simplexml_load_string($xmlContent, null, 0, "http://www.newzbin.com/DTD/2003/nzb");
+
+ if ($xml === false) {
+ die('Erreur lors de l\'analyse du fichier NZB en tant que XML.');
+ }
+
+ $maxSegmentsFile = null;
+ $maxSegmentsCount = 0;
+
+ foreach ($xml->file as $file) {
+ $fileName = (string)$file->attributes()->subject;
+ $fileDate = (string)$file->attributes()->date;
+ $fileGroups = [];
+ $totalSize = 0;
+ $segmentCount = 0;
+
+ foreach ($file->groups->group as $group) {
+ $fileGroups[] = (string)$group;
+ }
+
+ foreach ($file->segments->segment as $segment) {
+ $segmentSize = (int)$segment->attributes()->bytes;
+ $totalSize += $segmentSize;
+ $segmentCount++;
+ }
+
+ if ($segmentCount > $maxSegmentsCount) {
+ $maxSegmentsCount = $segmentCount;
+ $maxSegmentsFile = [
+ 'name' => $fileName,
+ 'date' => $fileDate,
+ 'groups' => $fileGroups,
+ 'total_size' => $totalSize,
+ 'segment_count' => $segmentCount
+ ];
+ }
+ }
+
+ if ($maxSegmentsFile) {
+ $myObj = new stdClass();
+ $myObj->Name = $maxSegmentsFile['name'];
+ $myObj->Pass = $password;
+ $myObj->Date = date('Y-m-d H:i:s', (int)$maxSegmentsFile['date']);
+ $myObj->Groupes = implode(', ', $maxSegmentsFile['groups']);
+ $myObj->Taille = formatBytesnzb($maxSegmentsFile['total_size']);
+ $myObj->Taillebit = $maxSegmentsFile['total_size'];
+
+ $myJSON = json_encode($myObj);
+ echo $myJSON;
+ } else {
+ echo "Aucun fichier trouvé dans le NZB.
+";
+ }
+}
+?>
diff --git a/autopost/common.sh b/autopost/common.sh
new file mode 100644
index 0000000..395e9e1
--- /dev/null
+++ b/autopost/common.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+source /home/$USER/autopost/conf.sh
+
+# 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'
diff --git a/autopost/conf.sh b/autopost/conf.sh
new file mode 100644
index 0000000..d171ee5
--- /dev/null
+++ b/autopost/conf.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+#CONFIG A MODIF
+URL_API="A NOUS DEMANDER SUR DISCORD"
+APIKEY="A RETROUVER DANS VOTRE PROFIL"
+DB_FILE="/home/$USER/autopost/base_autopost.db"
+DOSSIER_GLOBAL="/home/$USER/"
+DOSSIER_NFO="/home/$USER/autopost/mediainfo/"
+DOSSIER_NZB_ATTENTE="/home/$USER/ATTENTE/"
+DOSSIER_NZB_FINAL="/home/$USER/FINIS/"
+
+#CONFIG GLOBAL
+SCREEN_NAME="autopost"
+SCRIPT_PATH="/home/$USER/autopost/posteur.sh"
+ANALYZER="/home/$USER/autopost/analyzer.php"
+
+#CONFIG FOURNISSEUR USENET DE POST
+NG_HOST=""
+NG_PORT=""
+NG_USER=""
+NG_PASS=""
+NG_NBR_CONN=""
+
+
+
diff --git a/autopost/posteur.sh b/autopost/posteur.sh
new file mode 100644
index 0000000..f9dcbb2
--- /dev/null
+++ b/autopost/posteur.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+source /home/$USER/autopost/common.sh
+
+# Vérification et création des dossiers
+for dossier in "$DOSSIER_NFO" "$DOSSIER_NZB_ATTENTE" "$DOSSIER_NZB_FINAL"
+do
+ if [ ! -d "$dossier" ]; then
+ echo -e "${ROUGE} Le dossier $dossier n'existe pas. Création... ${NORMAL}"
+ mkdir -p "$dossier"
+ fi
+done
+
+attente() {
+ for ((i=$1; i>0; i--)); do
+ echo -ne "Attente : $i secondes\r"
+ sleep 1
+ done
+}
+
+checkusenet(){
+ SERVICE="nyuu"
+ if pgrep -x "$SERVICE" >/dev/null
+ then
+ echo "$SERVICE EN COURS"
+ sleep 16
+ else
+ echo "$SERVICE OK"
+ fi
+}
+
+
+while true
+do
+ verif=$(sqlite3 $DB_FILE "SELECT COUNT(ID) FROM release WHERE status = 0")
+ if [ $verif -ge 1 ]; then
+ verif=$(sqlite3 $DB_FILE "SELECT * FROM release WHERE status = '0' LIMIT 1")
+ id=$(echo $verif | awk -F "|" '{ print $1 }' | sed 's/^[ \t]*//;s/[ \t]*$//')
+ name=$(echo $verif | awk -F "|" '{ print $2 }' | sed 's/^[ \t]*//;s/[ \t]*$//')
+ FILESANSEXT=${name%.*}
+ echo -e ${VERT}"DEBUT DE TRAITEMENT DE" ${FILESANSEXT}${NORMAL}
+ echo -e ${CYAN}"CREATION DES PAR2"${NORMAL}
+ parpar -s10M -r20%+2 -m4096M -p1l -o ${FILESANSEXT}.par2 ${name}
+
+ echo -e ${VERT}"UPLOAD SUR USENET" ${NORMAL}
+ checkusenet
+ nyuu -h ${NG_HOST} -P ${NG_PORT} -S -u ${NG_USER} -p ${NG_PASS} -n ${NG_NBR_CONN} -g alt.binaries.boneless -o "{fnamebase}.nzb" --nzb-title "${FILESANSEXT}" -f "{rand(14)} {rand(14)}@{rand(5)}.{rand(3)}" --message-id "{rand(32)}@{rand(8)}.{rand(3)}" --subject "{rand(32)}" --nzb-subject "{filename}" --obfuscate-articles ${FILESANSEXT}.*
+ mv ${FILESANSEXT}.nzb ${DOSSIER_NZB_ATTENTE}
+ if [ -e "${DOSSIER_NFO}""${FILESANSEXT}".json ]; then
+ echo -e ${JAUNE}"VERIF DU NZB"${NORMAL}
+ nzbsizebit=$(php ${ANALYZER} ${DOSSIER_NZB_ATTENTE}${FILESANSEXT}.nzb | jq '.Taillebit')
+ echo -e "NZB_SIZE :"${nzbsizebit}
+ jsonsizebit=$(cat ${DOSSIER_NFO}${FILESANSEXT}.json | jq -r '.media.track[] | select(.["@type"] == "General") | .FileSize')
+ echo -e "MEDIAINFO_SIZE :"${jsonsizebit}
+ if [[ ${nzbsizebit} -le ${jsonsizebit} ]] || [[ ${nzbsizebit} = "NAN" ]]; then
+ echo -e "$ROUGE""PROBLEME TAILLE NZB""$NORMAL"
+ rm ${DOSSIER_NZB_ATTENTE}${FILESANSEXT}.nzb ${FILESANSEXT}.par2 ${FILESANSEXT}.vol*
+ sqlite3 $DB_FILE "UPDATE release SET status = '2' WHERE id = ${id}"
+ else
+ echo -e ${CYAN}"ENVOI SUR LE SITE"${NORMAL}
+ curl -s -k -L -m 60 --output /dev/null -F rlsname=${FILESANSEXT} -F generated_nfo_json=@${DOSSIER_NFO}${FILESANSEXT}.json -F nzb=@${DOSSIER_NZB_ATTENTE}${FILESANSEXT}.nzb -F upload=upload "${URL_API}${APIKEY}"
+ first_char=$(echo "${name:0:1}" | tr '[:lower:]' '[:upper:]')
+ if [ ! -d ${DOSSIER_NZB_FINAL}${first_char} ]; then
+ mkdir ${DOSSIER_NZB_FINAL}${first_char}
+ fi
+ mv ${DOSSIER_NZB_ATTENTE}${FILESANSEXT}.nzb ${DOSSIER_NZB_FINAL}${first_char}/
+ rm -rf ${FILESANSEXT}*
+ #rm ${DOSSIER_NFO}${FILESANSEXT}.json
+ sqlite3 $DB_FILE "UPDATE release SET status = '1' WHERE id = ${id}"
+ echo -e ${VERT}"FIN DE TRAITEMENT DE" ${FILESANSEXT}${NORMAL}
+ fi
+ else
+ echo -e ${ROUGE}"ENVOI SUR LE SITE IMPOSSIBLE NFO MANQUANT"${NORMAL}
+ fi
+ fi
+ attente 10 # Attente de 10 secondes
+done
+
diff --git a/bin/postauto b/bin/postauto
new file mode 100644
index 0000000..30d83f1
--- /dev/null
+++ b/bin/postauto
@@ -0,0 +1,172 @@
+ #!/bin/bash
+
+source /home/$USER/autopost/common.sh
+
+checkdb(){
+ if [ ! -f "$DB_FILE" ]; then
+ echo "La base de données n'existe pas. Création..."
+ do_createdb
+ fi
+}
+
+do_start() {
+ checkdb
+ if screen -list | grep -q "$SCREEN_NAME"; then
+ echo "Le screen '$SCREEN_NAME' est déjà en cours d'exécution."
+ else
+ screen -dmS "$SCREEN_NAME" bash -c "$SCRIPT_PATH"
+ echo "Screen '$SCREEN_NAME' démarré avec '$SCRIPT_PATH'."
+ fi
+}
+
+do_stop() {
+ if screen -list | grep -q "$SCREEN_NAME"; then
+ screen -S "$SCREEN_NAME" -X quit
+ echo "Screen '$SCREEN_NAME' arrêté."
+ else
+ echo "Aucun screen '$SCREEN_NAME' en cours d'exécution."
+ fi
+}
+
+do_restart() {
+ do_stop
+ sleep 10
+ do_start
+}
+
+do_show() {
+ if screen -list | grep -q "$SCREEN_NAME"; then
+ screen -r "$SCREEN_NAME"
+ else
+ echo "Aucun screen '$SCREEN_NAME' en cours d'exécution."
+ fi
+}
+
+
+do_add() {
+ checkdb
+ release_path="$2"
+ release_name=$(basename "$release_path")
+ release_without_ext="${release_name%.*}"
+
+ # Récupération de la réponse JSON complète
+ response=$(curl -s "${URL_API}${APIKEY}&check=${release_without_ext}")
+
+ # Extraction du champ "code" avec jq
+ code=$(echo "$response" | jq -r '.code')
+
+ # Extraction du champ "explain" avec jq
+ explain=$(echo "$response" | jq -r '.Explain')
+
+ # Arrêt du script si "code" vaut 1, en affichant le message "explain"
+ if [ "$code" = "2" ]; then
+ echo -e "$ROUGE""$explain""$NORMAL"
+ sqlite3 "$DB_FILE" "INSERT INTO release (nom, status) VALUES ('${release_name}', 3);"
+ exit 1
+ fi
+
+ echo -e "$VERT""DEPLACEMENT DE LA RELEASE DANS LE REPERTOIRE DE TRAVAIL""$NORMAL"
+ cp -rl "${release_path}" "${DOSSIER_GLOBAL}"
+
+ echo -e "$ROUGE""CREATION MEDIAINFO""$NORMAL"
+ mediainfo --output=JSON --full "${DOSSIER_GLOBAL}${release_name}" > "${DOSSIER_NFO}${release_without_ext}.json"
+
+ echo -e "$CYAN""AJOUT DE LA RELEASE DANS LA DATABASE""$NORMAL"
+ sqlite3 "$DB_FILE" "INSERT INTO release (nom, status) VALUES ('${release_name}', 0);"
+}
+
+do_status() {
+ checkdb
+ # Afficher la légende des couleurs
+ echo -e "${CYAN}${GRAS}■■■■■■${NORMAL} : EN ATTENTE"
+ echo -e "${ROSE}${GRAS}■■■■■■${NORMAL} : DEJA DISPONIBLE"
+ echo -e "${VERT}${GRAS}■■■■■■${NORMAL} : ENVOIR TERMINÉ"
+ echo -e "${ROUGE}${GRAS}■■■■■■${NORMAL} : ERREUR"
+ echo ""
+
+ # Exécuter la requête SQLite et récupérer les résultats dans une variable
+ results=$(sqlite3 "$DB_FILE" "SELECT nom, status FROM (SELECT * FROM release ORDER BY id DESC LIMIT 500) ORDER BY id DESC;")
+
+ # Trouver la longueur maximale du champ name
+ max_length=$(echo "$results" | awk -F'|' '{ if (length($1) > max) max = length($1) } END { print max }')
+
+ # Ajouter 10 à la longueur maximale pour définir la largeur de la première colonne
+ col1_width=$((max_length + 5))
+
+ # En-tête du tableau
+ printf "%-${col1_width}s %-35s %-19s\n" "Name"
+
+ # Parcourir les résultats et afficher avec la couleur appropriée
+ while IFS='|' read -r name status; do
+ case $status in
+ 0)
+ printf "${FOND_CYAN}${NOIR}${GRAS}%-${col1_width}s %-35s %-19s${NORMAL}\n" "$name"
+ ;;
+ 1)
+ printf "${FOND_VERT}${NOIR}${GRAS}%-${col1_width}s %-35s %-19s${NORMAL}\n" "$name"
+ ;;
+ 2)
+ printf "${FOND_ROUGE}${NOIR}${GRAS}%-${col1_width}s %-35s %-19s${NORMAL}\n" "$name"
+ ;;
+ 3)
+ printf "${FOND_ROSE}${NOIR}${GRAS}%-${col1_width}s %-35s %-19s${NORMAL}\n" "$name"
+ ;;
+ *)
+ printf "%-${col1_width}s %-30s %-15s\n" "$name"
+ ;;
+ esac
+ done <<< "$results"
+}
+
+do_createdb() {
+ if [ -f "$DB_FILE" ]; then
+ read -p "Voulez-vous vraiment supprimer $DB_FILE ? (y/n) : " choix
+ if [[ "$choix" =~ ^[Yy]$ ]]; then
+ rm "$DB_FILE"
+ fi
+ fi
+
+ sqlite3 "$DB_FILE" <"
+ exit 1
+ fi
+ do_add "$@"
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|show|add }"
+ exit 1
+ ;;
+esac
+
diff --git a/install.sh b/install.sh
new file mode 100644
index 0000000..93af903
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,200 @@
+#!/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'
+
+#Vérification des prérequis
+echo -e "$BLEU""Vérification si les prérequis sont disponibles""$NORMAL"
+LISTE_APPLIS="curl basename php"
+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
+
+LISTE_APPLIS=()
+
+# Vérifier et installer mediainfo si manquant
+if command -v mediainfo > /dev/null 2>&1; then
+ LISTE_APPLIS+=("mediainfo")
+else
+ echo -e "${ROUGE}mediainfo est manquant. Installation en cours...${NORMAL}"
+ curl -L -o "$BIN_DIR/mediainfo" "https://mediaarea.net/download/binary/mediainfo/20.09/mediainfo-20.09.glibc2.3-x86_64.AppImage"
+ chmod +x "$BIN_DIR/mediainfo"
+ LISTE_APPLIS+=("$BIN_DIR/mediainfo")
+ echo -e "${VERT}mediainfo installé dans $BIN_DIR${NORMAL}"
+fi
+
+# Vérifier et installer sqlite3 si manquant
+if command -v sqlite3 > /dev/null 2>&1; then
+ LISTE_APPLIS+=("sqlite3")
+else
+ echo -e "${ROUGE}sqlite3 est manquant. Installation en cours...${NORMAL}"
+ curl -L -o sqlite-tools.zip "https://www.sqlite.org/2025/sqlite-tools-linux-x64-3480000.zip"
+ unzip sqlite-tools.zip -d "$BIN_DIR"
+
+ # Recherche et déplacement du binaire sqlite3 uniquement
+ find "$BIN_DIR" -type f -name "sqlite3" -exec mv {} "$BIN_DIR/sqlite3" \;
+ chmod +x "$BIN_DIR/sqlite3"
+
+ # Nettoyage des fichiers inutiles
+ rm -rf sqlite-tools.zip "$BIN_DIR/sqlite-tools-linux-x64-3480000" "$BIN_DIR/sqldiff" "$BIN_DIR/sqlite3_analyzer" "$BIN_DIR/sqlite3_rsync"
+
+ LISTE_APPLIS+=("$BIN_DIR/sqlite3")
+ echo -e "${VERT}sqlite3 installé dans $BIN_DIR${NORMAL}"
+fi
+
+# Vérifier et installer jq si manquant
+if command -v jq > /dev/null 2>&1; then
+ LISTE_APPLIS+=("jq")
+else
+ echo -e "${ROUGE}jq est manquant. Installation en cours...${NORMAL}"
+ curl -L -o "$BIN_DIR/jq" "https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux-amd64"
+ chmod +x "$BIN_DIR/jq"
+ LISTE_APPLIS+=("$BIN_DIR/jq")
+ echo -e "${VERT}jq installé dans $BIN_DIR${NORMAL}"
+fi
+
+# Télécharger et extraire Nyuu
+echo -e "$BLEU""Téléchargement et installation de nyuu""$NORMAL"
+NYUU_URL="https://github.com/Antidote2151/Nyuu-Obfuscation/releases/download/v0.4.2-Obfuscate1.3/nyuu-v0.4.2-Obfuscate1.3-linux-amd64.tar.xz"
+NYUU_TAR="nyuu.tar.xz"
+NYUU_EXE="nyuu"
+
+wget -q -O "$NYUU_TAR" "$NYUU_URL"
+tar -xJf "$NYUU_TAR" > /dev/null 2>&1
+mv "$NYUU_EXE" "$BIN_DIR/nyuu"
+rm config-sample.json
+rm "$NYUU_TAR"
+chmod 777 "$BIN_DIR/nyuu"
+LISTE_APPLIS+=("$BIN_DIR/nyuu")
+
+# Télécharger et extraire ParPar
+echo -e "$BLEU""Téléchargement et installation de parpar""$NORMAL"
+PARPAR_URL="https://github.com/animetosho/ParPar/releases/download/v0.4.5/parpar-v0.4.5-linux-static-amd64.xz"
+PARPAR_XZ="parpar-v0.4.5-linux-static-amd64.xz"
+
+wget -q -O "$PARPAR_XZ" "$PARPAR_URL"
+xz -d "$PARPAR_XZ" > /dev/null 2>&1
+chmod 777 "parpar-v0.4.5-linux-static-amd64"
+mv "parpar-v0.4.5-linux-static-amd64" "$BIN_DIR/parpar"
+LISTE_APPLIS+=("$BIN_DIR/parpar")
+
+# Téléchargement et installation du script de post
+echo -e "$BLEU""Téléchargement de autopost""$NORMAL"
+
+# Création des répertoires si inexistants
+mkdir -p "$AUTOPOST_DIR"
+
+# Télécharger les fichiers dans autopost
+wget -q -O "$AUTOPOST_DIR/analyzer.php" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/analyzer.php"
+wget -q -O "$AUTOPOST_DIR/common.sh" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/common.sh"
+wget -q -O "$AUTOPOST_DIR/posteur.sh" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/posteur.sh"
+
+# Télécharger le fichier dans bin
+wget -q -O "$BIN_DIR/postauto" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/bin/postauto"
+
+if [ ! -f "$AUTOPOST_DIR/conf.sh" ]; then
+ wget -q -O "$AUTOPOST_DIR/conf.sh" "https://tig.unfr.pw/UNFR/postauto/raw/branch/main/autopost/conf.sh"
+fi
+
+# Donner les permissions d'exécution si nécessaire
+chmod 777 "$BIN_DIR/postauto"
+chmod -R 755 "$AUTOPOST_DIR"
+
+LISTE_APPLIS+=("$BIN_DIR/postauto")
+
+source ~/.bashrc
+
+manquants=()
+
+for i in $LISTE_APPLIS; do
+ if ! command -v "$i" > /dev/null 2>&1; then
+ manquants+=("$i")
+ fi
+done
+
+if [ ${#manquants[@]} -gt 0 ]; then
+ echo -e "${ROUGE}Programme(s) manquant(s) : ${manquants[*]}${NORMAL}"
+ exit 1
+else
+ echo -e "${VERT}Toutes les dépendances sont disponibles.${NORMAL}"
+fi
+
+# 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"
+
+ # 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
+if grep -q "$DEBUT_MARKER" "$BASHRC_FILE"; then
+ echo "La configuration de complétion pour 'postauto' est déjà présente dans $BASHRC_FILE."
+else
+ echo "Ajout de la configuration de complétion dans $BASHRC_FILE..."
+ # Ajouter une ligne vide pour séparer (optionnel)
+ echo "" >> "$BASHRC_FILE"
+ # Ajouter le code de complétion
+ echo "$COMPLETION_CODE" >> "$BASHRC_FILE"
+ echo "Mise à jour effectuée."
+fi
+
+echo "Suppression du script après exécution..."
+rm -- "$0"
diff --git a/uninstall.sh b/uninstall.sh
new file mode 100644
index 0000000..62668bb
--- /dev/null
+++ b/uninstall.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+source "$HOME/autopost/common.sh"
+
+BIN_DIR="$HOME/bin"
+AUTOPOST_DIR="$HOME/autopost"
+
+LISTE_APPLIS=(
+ "$BIN_DIR/mediainfo"
+ "$BIN_DIR/sqlite3"
+ "$BIN_DIR/jq"
+ "$BIN_DIR/nyuu"
+ "$BIN_DIR/parpar"
+ "$BIN_DIR/postauto"
+)
+
+# Vérifier et supprimer les fichiers existants
+for fichier in "${LISTE_APPLIS[@]}"; do
+ if [ -f "$fichier" ]; then
+ echo "Suppression de $fichier"
+ rm -f "$fichier"
+ fi
+done
+
+rm -f "$AUTOPOST_DIR/common.sh"
+rm -f "$AUTOPOST_DIR/posteur.sh"
+rm -f "$AUTOPOST_DIR/analyzer.php"
+rm -rf "${DOSSIER_NFO:-}"
+
+# Demander confirmation pour supprimer le fichier de conf
+read -r -p "Voulez-vous vraiment supprimer votre fichier de conf ? (y/n) : " conf
+if [[ "$conf" =~ ^[Yy]$ ]]; then
+ rm -f "$AUTOPOST_DIR/conf.sh"
+fi
+
+# Demander confirmation pour supprimer la base de données
+read -r -p "Voulez-vous vraiment supprimer $DB_FILE ? (y/n) : " filedb
+if [[ "$filedb" =~ ^[Yy]$ ]]; then
+ rm -f "$DB_FILE"
+fi
+
+# Demander confirmation pour supprimer les NZB
+read -r -p "Voulez-vous supprimer vos NZB ? (y/n) : " nzb
+if [[ "$nzb" =~ ^[Yy]$ ]]; then
+ rm -f "$DB_FILE"
+ rm -rf "${DOSSIER_NZB_ATTENTE:-}"
+ rm -rf "${DOSSIER_NZB_FINAL:-}"
+fi
+
+# Vérifier si le dossier existe et est vide
+if [ -d "$AUTOPOST_DIR" ] && [ -z "$(ls -A "$AUTOPOST_DIR" 2>/dev/null)" ]; then
+ echo "Suppression du dossier $AUTOPOST_DIR car il est vide."
+ rmdir "$AUTOPOST_DIR"
+fi
+
+# Chemin vers le fichier bashrc
+BASHRC_FILE="$HOME/.bashrc"
+
+# Définir les marqueurs qui encadrent le bloc à supprimer
+DEBUT_MARKER="# DEBUT COMPLETION POSTAUTO"
+FIN_MARKER="# FIN COMPLETION POSTAUTO"
+
+# Vérifier si le bloc est présent dans le fichier
+if grep -q "$DEBUT_MARKER" "$BASHRC_FILE"; then
+ echo "Suppression de la configuration de complétion dans $BASHRC_FILE..."
+
+ # 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 le bloc de code entre les marqueurs (inclusifs)
+ sed -i "/$DEBUT_MARKER/,/$FIN_MARKER/d" "$BASHRC_FILE"
+
+ echo "Bloc de configuration supprimé."
+else
+ echo "Aucun bloc de configuration de complétion trouvé dans $BASHRC_FILE."
+fi
+
+echo "Suppression du script après exécution..."
+rm -- "$0"
\ No newline at end of file