Creare un bot musicale in Discord

Contenuto

Questo articolo parlerà della creazione manuale di un bot per riprodurre musica in Discord. Potete semplicemente copiare tutto il codice presentato o modificarlo da soli se siete abili in JavaScript. Il nostro bot è stato testato, ma in alcune fasi l’utente può ancora incontrare alcuni problemi, quindi vi consigliamo di leggere attentamente non solo le nostre istruzioni, ma anche i codici di errore che appaiono sullo schermo, se presenti.

Se trovate questo materiale troppo complicato per voi o altrimenti inadatto, usate i bot gratuiti già pronti per suonare la musica. L’articolo sul link qui sotto vi darà informazioni dettagliate su questo e vi aiuterà a realizzare il compito.

Per saperne di più:
Aggiungi un bot musicale al server Discord
Riproduci la musica via bot in Discord

Passo 1: creare una nuova applicazione

Ogni bot per Discord deve essere registrato sul portale ufficiale degli sviluppatori. In questo modo si ottiene l’accesso a tutte le impostazioni necessarie relative ai permessi e al comportamento generale del bot, si sarà in grado di copiare il link alla sua autorizzazione nel vostro server personale e utilizzare un token unico, che è necessario per un ulteriore sviluppo dei comandi.

Vai al sito ufficiale di Discord Developer Portal

  1. Usa il link qui sopra per aprire la pagina principale del portale degli sviluppatori, accedi al tuo account Discord personale e clicca su “Nuova applicazione” per creare una nuova applicazione.
  2. Inserisci il suo nome, tenendo presente la sua unicità, poiché se esistono già molti bot con lo stesso nome, non potrai crearlo – ti verrà notificato che devi rinominarlo.
  3. Quando hai finito, apri il menu del sito e seleziona la categoria “Bot”.
  4. Davanti alla linea “Build-A-Bot” clicca su “Add Bot”.
  5. Confermare l’aggiunta del bot per l’applicazione selezionata.
  6. Naviga verso “OAuth2” attraverso il menu familiare.
  7. Questa sezione è responsabile dei parametri generali del bot e della sua autorizzazione. Nel blocco “Ambiti”, spunta la casella di controllo “bot”.
  8. Nella lista dei permessi, assicuratevi di attivare la connessione ai canali vocali e la capacità di parlare, poiché questo è necessario per l’ulteriore trasmissione della musica.
  9. Il bot deve essere in grado di leggere e inviare messaggi, quindi assicurati di abilitare queste opzioni nella sezione delle autorizzazioni della chat di testo. Naturalmente, è possibile concedere tutti i permessi in una volta, ma questo approccio non è quello giusto, soprattutto quando si sta facendo un bot per l’utente di massa.
  10. Non appena la configurazione dei permessi è completa, copiate il link per la prima autorizzazione del bot sul server, perché non c’è ancora un altro modo per aggiungerlo.
  11. Vai a questo link e seleziona il server di prova dove vuoi testare il bot.
  12. Conferma il captcha e aspetta che appaia l’informazione sull’autorizzazione riuscita.

Ora avete un’applicazione bot con un token unico, e il bot è già stato aggiunto al server, ma è ancora in modalità offline. Dovrai eseguire alcuni passi in più sul tuo computer locale per farlo funzionare, dato che non stiamo ancora scaricando il bot sull’hosting per il funzionamento offline.

Fase 2: Fasi preparatorie

I passi preparatori includono la creazione delle directory e dei file necessari, l’installazione degli strumenti e delle dipendenze per essi. Non c’è niente di complicato, basta eseguire ogni azione una per una, facendo attenzione a non fare errori in nessun passo.

  1. Crea una cartella con il nome del bot. Puoi scegliere qualsiasi posizione, ma il posto migliore per questo è la cartella home dell’utente.
  2. In esso crea due file: “config.json” e “ index .js”. Nel primo scriveremo la configurazione generale del bot – il suo prefisso e il token unico, e nel secondo – tutto il codice del programma con i comandi e i compiti generali di questo strumento.
  3. Avrete bisogno di Node.js per eseguire il bot. Questo strumento è progettato per eseguire script sul vostro computer locale. Vai al link qui sotto e scarica il suo installer per Windows.

    Scarica Node.js dal sito ufficiale

  4. Aspetta che il download del file eseguibile sia completato, eseguilo e passa attraverso una semplice procedura di installazione, seguendo le istruzioni visualizzate sullo schermo.
  5. Dopo di che aprite la linea di comando in un modo conveniente, per esempio, digitando cmd nell’utilità “Esegui( si avvia con la combinazione di tasti Win + R).
  6. Installa il modulo per lavorare con l’API di Discord, che si chiama “discord.js”. Per farlo, nella finestra della console che si apre, digita npm install discord.js ffmpeg-binaries opusscript ytdl-core --save e premi Invio – in questo modo aggiungerai anche tutte le dipendenze necessarie.
  7. Aspettate la notifica sullo schermo che l’installazione ha avuto successo, senza chiudere la finestra della console corrente. Se si verificano errori, controlla i loro codici e usa il motore di ricerca per trovare una soluzione praticabile sui forum o sul sito ufficiale.

Di conseguenza, i file associati al componente Node.js e il modulo aggiunto dopo dovrebbero apparire nella cartella home dell’utente. Riavviate il computer in modo da non avere difficoltà quando lanciate di nuovo il bot, poi procedete al passo successivo.

Passo 3: modificare il file di configurazione del bot

Sapete già che il file di configurazione del bot creato conterrà solo un paio di righe di codice responsabili del prefisso utilizzato (il carattere prima che il comando venga inserito sul server) e un token unico che identifica l’applicazione nell’API. Per tutti i passi successivi si consiglia di scaricare un programma che supporti la sintassi JS o un qualsiasi editor di testo avanzato, se non l’avete mai fatto prima. Nell’articolo qui sotto troverete le soluzioni adatte disponibili.

Leggi tutto: Scegliere un ambiente di sviluppo per la programmazione

Una volta che il software è installato sul vostro computer e pronto a lavorare, potete tranquillamente iniziare a modificare il file di configurazione inserendovi i dati utente.

  1. Eseguite il file config.js con un editor di testo o un ambiente di sviluppo e incollateci il seguente codice.

    {
    "prefix": "!",
    "token": "your-toke"
    }

    Cambia il prefisso tra virgolette con quello richiesto o lascia il punto esclamativo. Un esempio di comando che usa questo segno si presenta così: giocare

    .

  2. Vai alla pagina del tuo bot sul portale di sviluppo, trova lì il token unico e copialo.
  3. Incolla al posto di your-toke senza rimuovere le doppie virgolette.
  4. Salva le tue modifiche e chiudi il file. A proposito, è possibile eseguire la stessa azione attraverso il Blocco note standard.

A questo punto le azioni con il file di configurazione sono complete, non c’è bisogno di scrivere altre righe di codice. Chiudetelo, ricordandovi di salvare le vostre modifiche, e procedete a scrivere ulteriormente il bot per la riproduzione della musica.

Passo 4: provare ad eseguire il bot

Per prima cosa dobbiamo assicurarci che il bot funzioni sul server e vada online, quindi dobbiamo scrivere la maggior parte di esso in index.js e poi usare Node.js per eseguirlo.

  1. Usate l’ambiente di sviluppo o un editor di testo di vostra scelta per aprire il file di cui sopra per la modifica.
  2. Inserire lì un blocco di codice responsabile dell’impostazione delle dipendenze e del puntamento ai moduli utilizzati:

    const Discord = require('discord.js');
    const {
    prefix,
    token,
    } = require('./config.json');
    const ytdl = require('ytdl-core');

  3. Utilizzando il token menzionato in precedenza, create il client e il login, che viene fatto inserendo solo due semplici righe:

    const client = nuovo Discord.Client();
    client.login(token);

  4. Resta solo da specificare le ultime linee di base per ascoltare il bot.

    client.once('ready', () => {
    console.log('Ready!');
    });
    client.once('reconnecting', () => {
    console.log('Reconnecting!');
    });
    client.once('disconnect', () => {
    console.log('Disconnect!');
    })

  5. Espandi il menu File e salva le modifiche che hai fatto.
  6. Esegui di nuovo la console in modo conveniente.
  7. Inserisci il comando node index.js per eseguire lo script bot.
  8. Se i suoi file non si trovano nella home directory dell’utente, dovrete specificare il percorso completo ad essi dopo il nodo.
  9. Il lancio riuscito del bot è indicato dal messaggio “Ready!” che appare.
  10. Apri Discord e assicurati che il bot sia passato allo stato “Online”.

Passo 5: scrivere il codice principale del bot musicale

Quello che rimane è il processo più difficile: scrivere il codice di base per il bot musicale. C’è una lista di compiti che deve eseguire: leggere i messaggi ed elaborare i comandi, identificare il titolo della canzone o il suo indirizzo, connettersi al canale vocale e suonare. Il bot ha i permessi per tutto questo, quindi devi solo dirgli di agire usando le funzioni JavaScript, che viene eseguito nello stesso file “index.js”.

Aggiungere una semplice funzione per leggere i messaggi:

client.on('message', async message => {

}

Consiste solo di due righe, ma permetterà al bot di accettare la richiesta dell’utente e di processarla correttamente. È uno dei comandi più importanti per qualsiasi tipo di bot. Assicurati di aggiungere un’opzione per ignorare i messaggi di altri bot digitando

if (message.author.bot) return;

Questo evita i conflitti quando più bot sono usati simultaneamente sul server. Poi, dovrete controllare il prefisso per il bot per accettare o restituire il comando.

if (!message.content.startsWith(prefix)) return;

Il controllo dei comandi da eseguire è fatto usando semplici istruzioni if, e il costrutto nel nostro caso assomiglia a questo

const serverQueue = queue.get(message.guild.id);

se (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue);
return;
} else {
message.channel.send('Devi usare il comando esistente!')
}

Notate che la funzione send('') invia un messaggio all’utente se improvvisamente inserisce un comando non funzionante. Puoi modificare questo messaggio cambiando la didascalia tra virgolette.

Ora il bot ha imparato ad accettare i comandi, ma non può ancora interagire con essi perché le azioni non sono specificate. Per prima cosa, aggiungiamo il comando play, che è responsabile della riproduzione. Richiede un array della seguente forma:

const queue = new Map();

Invia tutti i comandi alla coda e fa suonare le canzoni solo quando finisce la precedente. Poi dobbiamo creare una funzione che controllerà se l’utente si è collegato al canale vocale e se il bot ha i permessi appropriati.

async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('Devi essere nel canale vocale per ascoltare la musica!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Ho bisogno dei permessi per unirmi e parlare sul tuo canale vocale!');
}
}

L’azione successiva è quella di collegare la libreria ytdl , poiché questo bot leggerà il titolo della canzone dal link di YouTube e poi la riprodurrà sul server. Avrete solo bisogno di inserire un piccolo pezzo di codice per questo.

const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.title,
url: songInfo.video_url,
}

Il prossimo blocco di codice vi farà sapere se ci sono canzoni in coda o se potete connettervi immediatamente al canale vocale e iniziare a giocare.

se (!serverQueue) {

}else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} è stato aggiunto alla coda!`);
}

Poi viene uno schema contrattuale un po’ complicato per i programmatori inesperti, che aggiunge la canzone all’array e fa lo stesso ogni volta che viene inserito !play, controllando la coda e selezionando l’azione corretta. Fate attenzione ai commenti forniti, che sono quelli che chiariscono tutte le sottigliezze.

// Creare un contratto per la coda
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
};
// Impostare la coda usando il nostro contratto
queue.set(message.guild.id, queueContruct);
// Inserire una canzone nel nostro array di canzoni
queueContruct.songs.push(song);

try {
// Qui cerchiamo di unirci alla chat vocale e salviamo la connessione nell'oggetto
var connection = await voiceChannel.join();
queueContruct.connection = connection;
// Chiamiamo la funzione play per iniziare la canzone
play(message.guild, queueContruct.songs[0]);
} catch (err) {
// Visualizza messaggio di errore se il bot non può unirsi alla chat vocale
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}

Tutto è chiaro con la coda, ma le canzoni non sono ancora suonate, perché non c’è un’assegnazione per la funzione play. Per fare questo abbiamo bisogno di aggiungere la seguente struttura al codice

function play(guild, song) {
const serverQueue = queue.get(guild.id);
if (!song) {
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
}

La riproduzione, d’altra parte, inizia con playStream() e il riferimento alla traccia specificata.

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on('end', () => {
console.log('Musica finita!');
// Rimuove la canzone finita dalla coda
serverQueue.songs.shift();
// Richiama la funzione play di nuovo con la prossima canzone
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

Se vuoi aggiungere una funzione di salto, per esempio quando decidi di riprodurre una playlist, prima occupati del comando appropriato e poi aggiungi un tale snippet:

function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Devi essere nel canale vocale per fermare la musica!');
if (!serverQueue) return message.channel.send('Nessuna canzone che potrei saltare!');
serverQueue.connection.dispatcher.end();
}

Più o meno lo stesso schema funziona per la funzione stop, ma il blocco di codice assume un aspetto leggermente diverso:

function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('
Devi essere nel canale voce per fermare la musica!');
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}

Si prega di notare che le informazioni di cui sopra sono adatte solo per quegli utenti che hanno già familiarità con JavaScript o che lo stanno appena imparando e hanno deciso di creare un bot musicale. Se non siete affatto esperti e i blocchi di codice specificati non vi dicono assolutamente nulla, incollate semplicemente l’intero codice sorgente nel file, sostituite i messaggi del bot con quelli russi (sono tra virgolette) e salvate le modifiche. L’intero codice sorgente si presenta così:

const Discord = require('discord.js');
const {
prefix,
token,
} = require('./config.json');
const ytdl = require('ytdl-core');

const client = nuovo Discord.Client();

const queue = new Map();

client.once('ready', () => {
console.log('Ready!');
});

client.once('reconnecting', () => {
console.log('Reconnecting!');
});

client.once('disconnect', () => {
console.log('Disconnect!');
});

client.on('message', async message => {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;

const serverQueue = queue.get(message.guild.id);

se (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue);
return;
} else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue);
return;
} else {
message.channel.send('Devi inserire un comando valido!')
}
})

async function execute(message, serverQueue) {
const args = message.content.split(' ');

const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('Devi essere in un canale vocale per suonare musica!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Ho bisogno dei permessi per unirmi e parlare nel tuo canale vocale!');
}

const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.title,
url: songInfo.video_url,
}

if (!serverQueue) {
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
}

queue.set(message.guild.id, queueContruct);

queueContruct.songs.push(song);

try {
var connection = await voiceChannel.join();
queueContruct.connection = connection;
play(message.guild, queueContruct.songs[0]);
} catch (err) {
console.log(err);
queue.delete(message.guild.
id);
return message.channel.send(err);
}
} else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} è stato aggiunto alla coda!}

}

function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Devi essere in un canale vocale per fermare la musica!');
if (!serverQueue) return message.channel.send('Non c'è nessuna canzone che potrei saltare!');
serverQueue.connection.dispatcher.end();
}

function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Devi essere in un canale vocale per fermare la musica!');
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}

function play(guild, song) {
const serverQueue = queue.get(guild.id);

if (!song) {
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on('end', () => {
console.log('Musica finita!');
serverQueue.songs.shift();
play(guild, serverQueueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueueue.volume / 5);
}

client.login(token);

Una volta finito, è meglio riavviare il bot, dopo di che potete andare sul vostro server, connettervi al canale vocale e inserire qualsiasi comando di interazione, controllando come il bot reagisce ad esso.

Se la versione precedente del bot non soddisfa le vostre esigenze, potete trovare il codice sorgente sullo stesso GitHub e copiarlo sul vostro computer. Il principio della registrazione e del lancio rimane lo stesso, quindi basta modificare il codice pronto come necessario e poi procedere al test del bot.

In questo articolo non abbiamo toccato il caricamento del bot sull’hosting, la sua distribuzione tra altri utenti, la creazione di avatar e l’utilizzo di luoghi aperti da cui può essere autorizzato. Tutti questi sono processi separati in cui dovresti impegnarti solo quando hai affinato le tue abilità di costruzione di bot e sei pronto a distribuire i tuoi progetti online.