+
+
+
+ Dernier test {{ formatRelative(integ.spotify.lastTest.at, nowDate) }} : {{ integ.spotify.lastTest.message }}
+
+ Liens publics uniquement (albums, playlists, titres), convertis vers YouTube.
+
+
+
-
-
+
+
+
+
Les secrets ne sont jamais renvoyés au navigateur ni écrits dans les journaux : seule leur longueur est affichée.
Chaque modification est enregistrée dans config.json et journalisée (nom du paramètre uniquement).
+
+
+
+
+ En direct
+
+
-
- Journal interrompu : la dernière ligne est « END OF LOGS ». Plus rien n'est écrit dans ce fichier.
-
+
+ La dernière ligne est « END OF LOGS » : plus rien n'est écrit dans ce fichier.
+
-
-
-
-
+
+
+
+ {{ visibleLines.length }} ligne(s) affichée(s) sur {{ lines.length }}
+ · les plus anciennes ont été retirées
+
+ {{ live ? "Lecture en direct activée" : "" }}
+
+
+
diff --git a/src/components/Admin/AdminMeter.vue b/src/components/Admin/AdminMeter.vue
new file mode 100644
index 0000000..4d7f66b
--- /dev/null
+++ b/src/components/Admin/AdminMeter.vue
@@ -0,0 +1,67 @@
+
+
+
+ {{ label }}
+ {{ valueText || percentText }}
+
+
+
+
+
+
+
diff --git a/src/components/Admin/AdminMetrics.vue b/src/components/Admin/AdminMetrics.vue
index c7529c6..51812a1 100644
--- a/src/components/Admin/AdminMetrics.vue
+++ b/src/components/Admin/AdminMetrics.vue
@@ -1,88 +1,141 @@
-
- Réparer {{ invalidCount }} valeur(s) invalide(s)
-
- Actualiser
+ Actualiser
-
-
-
-
+
+ Des compteurs contiennent une valeur non numérique (fichier modifié à la main ou écriture interrompue).
+ La réparation les remet à zéro.
+
+ Réparer
+
+
+
+
+
+
+
-
+ :tone="invalidCount ? 'error' : 'success'" :sub="safeNum(data.raw?.length) + ' compteur(s) au total'"/>
+
-
- Par serveur
- Par utilisateur
- Brutes
-
+
+
+
+
-
+ C'est ton compte : tes propres droits et sessions ne sont pas modifiables ici.
+
+ {{ detail.banReason ? "Raison : " + detail.banReason : "Aucune raison indiquée." }}
+ · {{ formatDate(detail.bannedAt) }}
+
-
-
+
diff --git a/src/components/Admin/AdminYoutube.vue b/src/components/Admin/AdminYoutube.vue
index a4c4546..17d8b54 100644
--- a/src/components/Admin/AdminYoutube.vue
+++ b/src/components/Admin/AdminYoutube.vue
@@ -1,262 +1,288 @@
- Actualiser
+ Actualiser
-
- yt-dlp est introuvable sur la machine du bot : aucune musique YouTube ne peut être lue.
- Installez yt-dlp (ou définissez la variable YTDLP_PATH) puis redémarrez Subsonics.
-
-
-
- Le compte YouTube a été invalidé {{ formatRelative(cookies.invalidatedAt, nowDate) }} : {{ cookies.invalidReason || "cookies refusés par YouTube" }}.
- Le bot continue sans compte en attendant une nouvelle connexion.
-
- Reconnecter le compte
-
- Le fichier de cookies enregistré est illisible : {{ cookies.error }}. Importez de nouveaux cookies.
-
- ffmpeg est introuvable : la lecture fonctionne, mais l'avance rapide (seek) dans une musique YouTube échouera.
-
+
+
+ Aucune musique YouTube ne peut être lue. Installez yt-dlp (ou définissez la variable
+ YTDLP_PATH) puis redémarrez Subsonics.
+
+
+ Invalidé {{ formatRelative(cookies.invalidatedAt, nowDate) }} : {{ cookies.invalidReason || "cookies refusés par YouTube" }}.
+ Le bot continue sans compte en attendant une nouvelle connexion.
+
+ Reconnecter le compte
+
+
+
+ {{ cookies.error }}. Importez de nouveaux cookies.
+
+
+ {{ expiryDays < 0
+ ? "Des cookies de connexion ont expiré : reconnectez le compte."
+ : "Des cookies de connexion expirent dans " + Math.max(0, Math.floor(expiryDays)) + " jour(s) : prévoyez de reconnecter le compte." }}
+
+ Reconnecter
+
+
+
+ La lecture fonctionne, mais l'avance rapide (seek) dans une musique YouTube échouera.
+
-
-
- {{ expiryDays < 0 ? "Des cookies de connexion ont expiré : reconnectez le compte." : "Des cookies de connexion expirent dans " + Math.max(0, Math.floor(expiryDays)) + " jour(s) : prévoyez de reconnecter le compte." }}
-
+ Aucun compte : le bot lit YouTube anonymement. Connectez un compte avec l'assistant pour débloquer
+ les vidéos soumises à une vérification anti-robot ou à une restriction d'âge.
+
+
+ Connecter un compte
-
- Aucun compte : le bot lit YouTube anonymement. Connectez un compte avec l'assistant pour débloquer
- les vidéos soumises à une vérification anti-robot ou à une restriction d'âge.
-
-
-
- Mise à jour…
-
- {{ ytdlp.autoUpdate ? "Auto" : "Manuelle" }}
+
+
+ Mise à jour…
+
+ {{ ytdlp.autoUpdate ? "Mise à jour auto" : "Mise à jour manuelle" }}
-
YouTube change souvent : une version récente de yt-dlp corrige la plupart des erreurs 403 et anti-robot.
+
+
{{ updateBusy ? "Mise à jour…" : "Mettre à jour" }}
-
-
YouTube change souvent : une version récente de yt-dlp corrige la plupart des erreurs 403 et anti-robot.
+
-
-
- Environ 2 minutes
+
+
+ Environ 2 minutes
-
+
YouTube n'accepte plus de mot de passe pour les robots : la connexion se fait en donnant au bot les cookies
d'une session YouTube. Suivez les étapes dans l'ordre.
-
-
- 1
-
-
Ouvrez une fenêtre de navigation privée et connectez-vous
-
- Ouvrez une fenêtre privée (Ctrl+Maj+N sur Chrome / Edge, Ctrl+Maj+P sur Firefox),
- collez-y le lien ci-dessous puis connectez-vous au compte Google à utiliser.
-
-
-
- Pourquoi une fenêtre privée ? YouTube renouvelle régulièrement les cookies des onglets ouverts, ce qui rend
- les anciens inutilisables. Une session privée, fermée juste après l'export, ne sera plus jamais renouvelée :
+
+
+
+ Ouvrez une fenêtre privée (Ctrl+Maj+N sur Chrome / Edge, Ctrl+Maj+P sur Firefox),
+ collez-y le lien ci-dessous puis connectez-vous au compte Google à utiliser.
+
« Ouvrir » utilise un onglet normal : ne l'utilisez que si cette page est elle-même en navigation privée.
+
+ Pourquoi une fenêtre privée ?
+
+ YouTube renouvelle régulièrement les cookies des onglets ouverts, ce qui rend les anciens inutilisables.
+ Une session privée, fermée juste après l'export, ne sera plus jamais renouvelée :
les cookies donnés au bot restent valides beaucoup plus longtemps.
« Ouvrir » utilise un onglet normal : ne l'utilisez que si cette page est elle-même en navigation privée.
-
-
+
+
-
- 2
-
-
Exportez les cookies depuis la page youtube.com/robots.txt
-
- Après la connexion, vous arrivez sur une page de texte brut (youtube.com/robots.txt) : c'est normal, restez sur cet onglet.
- Exportez les cookies avec l'extension de votre navigateur, au format Netscape (cookies.txt) :
-
- Les extensions sont désactivées en navigation privée par défaut : autorisez-la dans la fiche de l'extension
- (Chrome / Edge : « Autoriser en navigation privée » ; Firefox : « Exécuter dans les fenêtres privées »),
- puis cliquez sur son icône et choisissez « Export » (site actuel). Un fichier .txt est téléchargé.
-
+
+
+ Après la connexion, vous arrivez sur une page de texte brut (youtube.com/robots.txt) : c'est normal, restez sur cet onglet.
+ Exportez les cookies avec l'extension de votre navigateur, au format Netscape (cookies.txt) :
+
+ Les extensions sont désactivées en navigation privée par défaut : autorisez-la dans la fiche de l'extension
+ (Chrome / Edge : « Autoriser en navigation privée » ; Firefox : « Exécuter dans les fenêtres privées »),
+ puis cliquez sur son icône et choisissez « Export » (site actuel). Un fichier .txt est téléchargé.
+
+
-
- 3
-
-
Donnez le fichier au bot
-
-
-
{{ importing ? "Import en cours…" : "Glissez le fichier ici ou cliquez pour le choisir" }}
-
Fichier .txt (Netscape) ou .json (export d'extension), 1 Mo maximum