”LoginFailure: Improper token has been passed” / TOKEN_INVALID
Cosa significa: la libreria rifiuta il token con cui stai effettuando il login (discord.js lanciaLoginFailure/“An invalid token was provided”; altri stack restituiscono un TOKEN_INVALID 401).
Perché accade:
- Il token è stato rigenerato o revocato nel Discord Developer Portal. Generare un nuovo token invalida istantaneamente quello vecchio ovunque venga usato.
- La stringa del token ha spazi o virgolette extra copiati per errore.
- Il codice sta leggendo la variabile d’ambiente sbagliata.
- Vai al Developer Portal → la tua applicazione → Bot → Reset Token.
- Aggiorna il token nelle Variabili d’ambiente di questa applicazione nella dashboard di Square Cloud. Non fare mai commit del token in un file che viene caricato nello
.zip. - Controlla che non ci siano spazi o virgolette estranei intorno al valore.
- Aggiorna la libreria (
discord.js@latestoppurepip install -U discord.py). - Riavvia l’applicazione.
”Used disallowed intents” / Message Content Intent
Cosa significa: il bot effettua il login e appare online, ma ignora ogni messaggio, oppure il gateway rifiuta la connessione con “used disallowed intents”. Perché accade: dal 2022, Message Content è un intent privilegiato. Senza averlo abilitato esplicitamente in entrambi i punti, il contenuto dei messaggi arriva vuoto (oppure la connessione al gateway viene rifiutata se il tuo codice dichiara un intent non abilitato per l’app). Come risolvere, in entrambi i punti:- Discord Developer Portal → la tua applicazione → Bot → Privileged Gateway Intents → abilita Message Content Intent.
- Dichiaralo anche nel codice:
- Riavvia l’applicazione.
Una volta che un bot supera i 100 server, gli intent privilegiati (incluso Message Content) richiedono anche l’approvazione di Discord, richiedibile dalla stessa pagina del Developer Portal.
Connessione Lavalink chiusa con codice 1006
Cosa significa: il client Lavalink del bot chiude il WebSocket in modo anomalo con codice 1006, spesso preceduto da “Unexpected server response: 400”. Perché accade: si tratta di un’incompatibilità di versione. Lavalink v4 è basato su REST ed è incompatibile con un wrapper client costruito per v3, quindi l’handshake fallisce e il socket si chiude con 1006. Come risolvere:- Allinea la versione del wrapper client Lavalink del tuo bot con la versione principale del server Lavalink (client v3 con server v3, client v4 con server v4).
- Su Square Cloud, il server Lavalink stesso è collegato alla porta
80, ma il tuo bot deve connettersi tramite l’edge sulla porta443consecure: true. - Riavvia sia l’applicazione Lavalink che l’applicazione del bot dopo aver risolto l’incompatibilità di versione.
Il bot va offline dopo aver funzionato in locale
Cosa significa: il bot effettua il login correttamente quando lo esegui sulla tua macchina, ma va offline (o si riavvia ripetutamente) una volta effettuato il deploy. Perché accade, più comunemente:- Una connessione instabile a livello di gateway senza gestione della riconnessione.
- Versioni delle dipendenze in conflitto o incompatibili tra quello che hai testato in locale e quello che è nel tuo file delle dipendenze.
- Trigger di abuso dell’API di Discord (in questo caso l’account riceve un’email di notifica) dovuti a un uso troppo aggressivo dei rate limit.
- Controlla prima i log dell’applicazione nella dashboard, mostrano il motivo reale del crash.
- Aggiungi error handler in modo che un errore transitorio non faccia crashare il processo:
process.on("unhandledRejection", ...)eclient.on("error", ...)in discord.js, gestione equivalente in discord.py. - Square Cloud riavvia automaticamente un’app in crash (
AUTORESTARTnel manifest) quando l’uptime precedente è stato superiore a 60 secondi, lo stato di uscita era 1, e non si è auto-riavviata negli ultimi 60 minuti. Questo mantiene il bot vivo attraverso errori transitori, ma non risolve mai un errore di codice sottostante, un errore di sintassi o una dipendenza mancante, quelli richiedono comunque una correzione nel codice. - Fai attenzione ai rate limit dell’API di Discord (429): il limite globale è di circa 50 richieste/secondo per token del bot, con bucket per-route più stretti (creazione/modifica canale consente circa 2 modifiche ogni 10 minuti per canale). Usa la cache in modo aggressivo, usa una coda asincrona che rispetti gli header
X-RateLimit-Remaining/X-RateLimit-Reset-After, e usa i webhook per gli invii di massa.

