Iniziare a Sviluppare il Bot Discord

Dopo aver aggiunto il bot ad un server Discord, il passaggio successivo è iniziare con la programmazione vera e propria per mandarlo online. Iniziamo creando un file di configurazione in […]

Avatar di gbfactory
gbfactory 3 Agosto 2022

Dopo aver aggiunto il bot ad un server Discord, il passaggio successivo è iniziare con la programmazione vera e propria per mandarlo online. Iniziamo creando un file di configurazione in cui memorizzare il token del client e un file principale per l’applicazione vera e propria.

Configurazione del Bot Discord

Come abbiamo spiegato nella precedente lezione, il token è essenzialmente la password del bot che dobbiamo proteggere nel miglior modo possibile per impedire che venga accidentalmente resa pubblica. Questo può essere fatto tramite un file di configurazione, solitamente chiamato config.json, oppure utilizzando le variabili d’ambiente.

Prima di iniziare con questa procedura è importante copiare il proprio token dal Portale Sviluppatori di Discord per averlo sempre a portata di mano.

File config.json

Un file di configurazione può essere utilizzato per memorizzare molti dati variabili che il nostro bot deve utilizzare, ma non vogliamo ripetere più volte nel codice, per evitare di dover impiegare troppo tempo nel caso dovessimo sostituirli tutti. È anche un ottimo modo per mantenere dei dati sensibili lontano da occhi indiscreti, proprio quello che serve per il nostro token.

Creiamo un file chiamato config.json nella directory del nostro progetto e inseriamo al suo interno il token come valore di una chiave chiamata token.

{
  “token”: “ciao123”;
}

Potremmo poi accedere a questo file dalla nostra applicazione utilizzando la funzione require() disponibile in Node.js.

Se stai utilizzando Git per gestire il codice del tuo progetto ricordati di non inserire mai questo file all’interno di un commit, dovresti ignorarlo inserendolo nel file .gitignore.

Variabili d'Ambiente

Le variabili d’ambiente sono valori speciali che andiamo ad impostare per il nostro ambiente, che può essere la sessione del terminale, un contenitore Docker, ecc.). Possiamo accedere in qualsiasi momento a questi valori dal nostro codice per poterli utilizzare.

Usando il Terminale

Il modo più semplice per passare le variabili d’ambiente al nostro processo è tramite la riga di comando. Quando avviamo la nostra applicazione, invece di digitare direttamente node index.js, usiamo TOKEN=il-nostro-tokenn node index.js. Con lo stesso sistema possiamo passare anche altri valori.

A=123 B=456 DISCORD_TOKEN=your-token-goes-here node index.js

All’interno del codice possiamo recuperare questi valori tramite la variabile globale process.env, accessibile da qualsiasi file. Tieni presente che i valori passati in questo modo sono sempre delle stringhe, e in alcuni casi potrebbe essere necessario effettuare una conversione in numero, per esempio per l’esecuzione di calcoli.

console.log(process.env.A);
console.log(process.env.B);
console.log(process.env.DISCORD_TOKEN);

Usando dotenv

Un altro sistema per utilizzare le variabili d’ambiente all’interno della nostra applicazione è quello di salvare i valori in un file .env. Questo ci consentirà di evitare l’inserimento dei valori tramite riga di comando ogni volta che andiamo ad avviare l’applicazione. All’interno di un file .env ogni riga dovrebbe contenere una coppia struttura in questo modo: CHIAVE=valore.

A=123
B=456
DISCORD_TOKEN=token-del-tuo-bot

Per accedere a questo file possiamo utilizzare il pacchetto dotenv che installiamo eseguendo il seguente comando:

npm install dotenv

All’interno del nostro codice richiediamo il pacchetto dotenv utilizzando require() e poi saremo liberi di accedere alle variabili d’ambiente utilizzando process.env.

const dotenv = require('dotenv');

dotenv.config();

console.log(process.env.A);
console.log(process.env.B);
console.log(process.env.DISCORD_TOKEN);

Anche in questo caso, se stai utilizzando Git dovresti evitare che questo file venga pubblicato attraverso un commit. Ricordati sempre di inserirlo nel file .gitignore per escluderlo.

Git e file .gitignore

Git è un ottimo strumento per tenere traccia dei cambiamenti effettuati sul codice e caricarlo su servizi online come GitHub, GitLab o BitBucket. Git ci torna molto utile per condividere il codice con altri sviluppatori, ma così facendo corriamo anche il rischio di caricare file di configurazioni con all’interno valori riservati.

Utilizzando un file .gitignore possiamo specificare quali file Git deve ignorare ed escludere dal sistema di controllo della versione. Procediamo creando un file .gitignore all’interno della directory del nostro bot e inseriamo al suo interno i file e le cartelle vogliamo vengano ignorate:

node_modules
.env
config.json

Oltre ad escludere il file con le nostre credenziali, possiamo ignorare anche la cartella node_modules dato che questa cartella può essere generata nuovamente con npm install sulla base delle informazioni contenute all’interno dei file package.json e package-lock.json, non deve quindi essere memorizzata su Git.

Creare il File Principale

Ora possiamo aprire il nostro editor di codice e creare un nuovo file. Se non abbiamo modificato la configurazione del progetto, il file dovrà chiamarsi index.js, ma possiamo modificare il nome a nostro piacimento.

Ecco il codice di base da inserire all’interno del file per ottenere un bot funzionante:

// Importare le classi necessarie da discord.js
const { Client, GatewayIntentBits } = require('discord.js');

// Importare il token
 dal file di configurazione
const { token } = require('./config.json');

// Crea una nuova istanza della classe Client
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

// Quando il client è online eseguiamo questo codice, solo una volta
client.once('ready', () => {
  console.log('Ready!');
});

// Accediamo a Discord con il token del client
client.login(token);

Questo è il codice di base per creare una nuova istanza del Client per il nostro bot e farlo accedere a Discord. L'opzione intents impostata a GatewayIntentBits.Guilds è necessaria affinché il nostro client possa funzionare correttamente.

Una volta aver finito di scrivere il codice apriamo il terminale all'interno della cartella del nostro progetto ed eseguiamo il comando node index.js per avviare il processo. Se vedi in console il messaggio che abbiamo inserito nell'istruzione per stampare in console dopo qualche secondo, significa che tutto è andato a buon fine!

È possibile aprire il file package.json e modificare il campo "main": "index.js" per farlo puntare ad un file principale con nome diverso da quello impostato automaticamente. Nel terminale possiamo anche eseguire il comando node . per avviare automaticamente il processo senza specificare il file.

Per stoppare il processo è possibile utilizzare la combinazione di tasti Ctrl + C. Con il tasto della freccia in su è possibile richiamare gli ultimi comandi eseguiti. Dopo aver fermato il processo, premere il tasto e poi Invio è un modo veloce per riavviare il processo.