Questa guida spiega come creare un'applicazione e un bot nel portale sviluppatori Discord, proteggere il token, invitarlo in un server della community e ospitarlo 24/7 su un VPS Linux (systemd, pm2 o Docker). Servono 30-45 minuti; un VPS entry-level basta per un piccolo bot.
Installazione passo dopo passo
Attiva l'autenticazione a due fattori sul tuo account Discord e installa una versione LTS attuale di Node.js (o Python).
Crea un'applicazione su discord.com/developers/applications (New Application).
Scheda Bot: genera il token (Reset Token) e copialo una sola volta in un gestore di password o in un file .env.
Attiva solo i Privileged Gateway Intents che usi davvero (Presence, Server Members, Message Content).
Genera il link di invito (scope bot + applications.commands, permessi minimi) con lo strumento «Link di invito bot».
Apri il link, scegli il tuo server (serve il permesso «Gestisci server») e autorizza.
Scrivi un bot minimo (discord.js) e provalo in locale con il token in .env.
Prepara un VPS Linux: utente non root, firewall, Node.js (vedi la guida «Preparare un VPS»).
Distribuisci il codice, metti il token in un file .env (chmod 600) e avvia il bot con systemd, pm2 o Docker.
Configura il server della community: ruoli, canali, permessi, webhook e moderazione.
Prerequisiti
Servono un account Discord (con 2FA), un server di cui sei proprietario o amministratore e Node.js LTS (o Python): controlla la versione minima richiesta dalla release di discord.js che installi. Per l'hosting: un VPS Linux (1 vCPU e da 512 MB a 1 GB di RAM bastano di solito per un piccolo bot, da adeguare al codice). Non condividere mai il token del bot: dà il controllo completo del bot.
Creare l'applicazione e il bot
- discord.com/developers/applications → New Application → nome → Create.
- General Information: copia l'Application ID (il client_id pubblico).
- Bot → Reset Token → copia il token (mostrato una sola volta).
- Se il token trapela (repo Git pubblico, screenshot…), fai subito Reset Token.
Proteggere il token (.env)
Non mettere mai il token nel codice. Usa un file .env escluso da Git e leggibile solo dal tuo utente. Esempio (valore fittizio):
echo 'DISCORD_TOKEN=ChangeMe!' > .env
chmod 600 .env
echo '.env' >> .gitignorePrivileged Intents
- Server Members Intent: eventi di ingresso/uscita ed elenco completo dei membri.
- Message Content Intent: lettura del testo dei messaggi (inutile se usi solo comandi slash).
- Presence Intent: stati di presenza dei membri.
- Oltre un certo numero di server (100 secondo la policy Discord al momento della stesura) questi intent richiedono la verifica del bot: controlla la policy attuale.
Invitare il bot
Il link di invito ha questa forma (client_id fittizio, permissions = 3072: vedere e scrivere nei canali). Calcola l'intero con il calcolatore di permessi e componi il link con lo strumento dedicato:
https://discord.com/oauth2/authorize?client_id=123456789012345678&scope=bot%20applications.commands&permissions=3072Bot minimo (discord.js)
Installazione: npm init -y && npm install discord.js dotenv. File index.js (vedi discordjs.guide per l'API aggiornata):
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => console.log(`Logged in as ${c.user.tag}`));
client.login(process.env.DISCORD_TOKEN);Ospitare con systemd
File /etc/systemd/system/discord-bot.service (adatta User e percorsi; verifica il percorso di node con «which node»). Poi: sudo systemctl daemon-reload && sudo systemctl enable --now discord-bot; log: journalctl -u discord-bot -f.
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
EnvironmentFile=/home/botuser/bot/.env
ExecStart=/usr/bin/node index.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetOspitare con pm2
pm2 riavvia il processo in caso di crash. Il comando «pm2 startup» mostra un comando sudo da eseguire per avviare pm2 al boot.
sudo npm install -g pm2
pm2 start index.js --name discord-bot
pm2 save
pm2 startup
pm2 logs discord-botOspitare con Docker
Dockerfile qui sotto (adatta la versione di Node a quella richiesta da discord.js). Costruisci ed esegui passando il token con un file env: docker build -t discord-bot . && docker run -d --restart unless-stopped --env-file .env --name discord-bot discord-bot
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]Configurare il server della community
- Ruoli: crea ruoli per funzione (admin, moderatore, membro) con permessi minimi; il ruolo del bot deve stare sopra i ruoli che gestisce.
- Canali: categorie (benvenuto, regole, generale, supporto, vocale) e permessi per categoria anziché per canale.
- Webhook: per pubblicare lo stato dei tuoi server di gioco, costruisci l'embed con lo strumento «Creatore di embed per webhook».
- Moderazione: livello di verifica, AutoMod, registro attività; attiva il requisito 2FA per i moderatori nelle impostazioni del server.
- Visibilità: inserisci il tuo server di gioco su game-rank.com/jeux per farti trovare.
Risoluzione dei problemi
- «TokenInvalid» / «An invalid token was provided»: token errato, spazio extra o token reimpostato. Ricopialo con Reset Token.
- «Used disallowed intents»: attiva l'intent privilegiato corrispondente nella scheda Bot o rimuovilo dal codice.
- «Missing Access» / «Missing Permissions»: il bot non ha il permesso in quel canale o il suo ruolo è troppo in basso nella gerarchia.
- I comandi slash non compaiono: mancava lo scope applications.commands nell'invito o i comandi non sono registrati (deploy); reinvita il bot con il link giusto.
- Il bot si disconnette sul VPS: leggi i log (journalctl -u discord-bot -f), verifica la memoria disponibile e che Restart=on-failure sia impostato.
Domande frequenti
- Un bot Discord è gratuito?
- Creare un bot nel portale sviluppatori è gratuito. Solo l'hosting (VPS o macchina sempre accesa) può costare qualche euro al mese.
- Cosa fare se il mio token è trapelato?
- Clicca subito su Reset Token nella scheda Bot, aggiorna il file .env, riavvia il bot e controlla il registro attività del server.
- systemd, pm2 o Docker?
- systemd è il più leggero e integrato in Linux; pm2 è comodo con più processi Node.js; Docker isola l'ambiente e rende il deploy riproducibile. Tutti e tre riavviano il bot dopo un crash.
- Mi serve una porta aperta per ospitare un bot?
- No: il bot apre da sé una connessione in uscita verso Discord. Solo la porta SSH deve restare raggiungibile per l'amministrazione (a meno di esporre un server web).
