envoi du script
This commit is contained in:
parent
189450fa23
commit
dfcf1a5799
130
autopost/analyzer.php
Normal file
130
autopost/analyzer.php
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<?php
|
||||||
|
function formatBytesnzb($size, $precision = 2) {
|
||||||
|
$base = log($size, 1024);
|
||||||
|
$suffixes = array('', 'Ko', 'Mo', 'Go', 'To');
|
||||||
|
return round(pow(1024, $base - floor($base)), $precision) . ' ' . $suffixes[floor($base)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Charger le fichier NZB
|
||||||
|
$nzbFilePath = $argv[1];
|
||||||
|
if (!file_exists($nzbFilePath)) {
|
||||||
|
die('Fichier NZB non trouvé.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Charger le contenu du fichier NZB
|
||||||
|
$xmlContent = file_get_contents($nzbFilePath);
|
||||||
|
if ($xmlContent === false) {
|
||||||
|
die('Impossible de lire le fichier NZB.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier si le fichier contient <meta type="password"> pour choisir la méthode d'analyse
|
||||||
|
if (strpos($xmlContent, '<meta type="password">') !== 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 type="password">(.*?)<\/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>(.*?)<\/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.
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
29
autopost/common.sh
Normal file
29
autopost/common.sh
Normal file
@ -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'
|
||||||
24
autopost/conf.sh
Normal file
24
autopost/conf.sh
Normal file
@ -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=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
77
autopost/posteur.sh
Normal file
77
autopost/posteur.sh
Normal file
@ -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
|
||||||
|
|
||||||
172
bin/postauto
Normal file
172
bin/postauto
Normal file
@ -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" <<EOF
|
||||||
|
CREATE TABLE release (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
nom TEXT NOT NULL,
|
||||||
|
status INTEGER NOT NULL DEFAULT 0 CHECK(status IN (0, 1, 2, 3))
|
||||||
|
);
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sqlite3 "$DB_FILE" "PRAGMA journal_mode=WAL;"
|
||||||
|
sqlite3 "$DB_FILE" "PRAGMA busy_timeout = 5000;"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
do_start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
do_stop
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
do_restart
|
||||||
|
;;
|
||||||
|
show)
|
||||||
|
do_show
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
do_status
|
||||||
|
;;
|
||||||
|
createdb)
|
||||||
|
do_createdb
|
||||||
|
;;
|
||||||
|
add)
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
echo "Usage: $0 add <release_path>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
do_add "$@"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|restart|show|add <release_path>}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
200
install.sh
Normal file
200
install.sh
Normal file
@ -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"
|
||||||
79
uninstall.sh
Normal file
79
uninstall.sh
Normal file
@ -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"
|
||||||
Loading…
x
Reference in New Issue
Block a user