”LoginFailure: Improper token has been passed” / TokenInvalid
Cosa significa: Discord ha rifiutato il token con cui il tuo bot effettua il login. Il messaggio esatto dipende dalla libreria:- discord.py:
discord.errors.LoginFailure: Improper token has been passed. - discord.js v14:
Error [TokenInvalid]: An invalid token was provided. - discord.js meno recente:
Error [TOKEN_INVALID]: An invalid token was provided. - altre librerie: un HTTP
401 Unauthorizedal login.
- 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, oppure la variabile non è impostata su Square Cloud.
- Vai al Developer Portal → la tua applicazione → Bot → Reset Token.
- Aggiorna il token nelle variabili d’ambiente dell’applicazione (nella dashboard Impostazioni → Variabili d’ambiente, oppure con
squarecloud app env set). 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, così carica il nuovo valore.
”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.
- Il bot è stato arrestato per aver superato la RAM o la CPU, oppure per aver inondato l’API di Discord di richieste. In questo caso i log mostrano una riga
[SQUARE-SHIELD]e ricevi un’email: vedi la tabella degli stati.
- 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. - Aggiungi
AUTORESTART=trueal tuosquarecloud.appperché Square Cloud riavvii il bot dopo un crash. È disattivato per impostazione predefinita e riavvia solo nei casi elencati inAUTORESTART. Mantiene il bot vivo attraverso errori transitori, ma non risolve mai un token non valido, 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. Un bot che continua a inondare Discord di richieste viene arrestato conABUSE_REQUESTS.
Guide correlate
- Tutorial sull’hosting dei bot Discord: configura e pubblica un bot da zero.
- Variabili d’ambiente: conserva il token fuori dal codice.
- L’app non si avvia: errori di upload, moduli mancanti e altri errori di avvio.

