U ovom članku će biti reči o ručnom kreiranju bota za reprodukciju muzike na Discordu. Možete ili jednostavno kopirati sav predstavljeni kod, ili ga prilagoditi sebi, ako posedujete veštine u JavaScript-u. Bot koji smo kreirali je testiran, ali na nekim koracima korisnik se može suočiti sa raznim problemima, stoga savetujemo da pažljivo čitate ne samo našu instrukciju, već i kodove grešaka koji se pojavljuju na ekranu, ako ih bude.

Ako se ispostavi da je ovaj materijal previše složen za vas ili ne odgovara iz drugih razloga, koristite gotove besplatne botove za reprodukciju muzike. U članku na linku ispod naći ćete detaljne informacije o tome i moći ćete da realizujete postavljeni zadatak.

Više informacija:
Dodavanje muzičkog bota na server u Discordu
Reprodukcija muzike preko bota u Discordu

Korak 1: Kreiranje nove aplikacije

Svaki bot za Discord mora biti registrovan na zvaničnom portalu za programere.Так добијате приступ свим потребним подешавањима везаним за дозволе и опште понашање бота, моћи ћете да копирате линк за његову ауторизацију на личном серверу и користите јединствени токен који је потребан за даљи развој команди.

Пређите на званични сајт Discord Developer Portal

  1. Искористите линк изнад да отворите главну страницу портала за програмере, пријавите се на свој лични Discord налог и кликните на "New Application" за креирање нове апликације.
  2. Прелазак на регистрацију нове апликације за креирање музичког бота у Discord-у
  3. Унесите његово име, водећи рачуна о јединствености, јер ако већ постоји много ботова са истим именом, нећете моћи да га креирате — појавиће се обавештење о потреби преименовања.
  4. Unos naziva prilikom registracije nove aplikacije za kreiranje muzičkog bota na Discordu
  5. По завршетку, отворите мени на сајту и изаберите категорију "Bot".
  6. Prelazak na povezivanje komponenti nove aplikacije za kreiranje muzičkog bota na Discordu
  7. Напротив реда "Build-A-Bot" кликните на "Add Bot".
  8. Dugme za povezivanje komponenti nove aplikacije za pravljenje muzičkog bota na Discordu
  9. Потврдите додавање бота за изабрану апликацију.
  10. Potvrda povezivanja komponenti sa novom aplikacijom za kreiranje muzičkog bota na Discordu
  11. Кроз већ познати мени пређите у "OAuth2".
  12. Прелазак на страницу подешавања апликације за креирање музичког бота у Discord-у
  13. Овај одељак одговара за општа подешавања бота и његову ауторизацију. У блоку "Scopes" означите маркером ставку "bot".
  14. Izbor tipa rada aplikacije za kreiranje muzičkog bota na Discordu
  15. У списку дозвола обавезно активирајте прикључење на гласовне канале и могућност говора, јер је то потребно за даљу транслацију музике.
  16. Pretraga dozvola glasovnih kanala prilikom podešavanja aplikacije za kreiranje muzičkog bota na Discordu
  17. Бот мора да уме да чита и шаље поруке, па не заборавите да укључите ове опције у одељку са дозволама текстуалних ћаскања. Наравно, можете дати све дозволе одједном, али такав приступ није исправан, посебно у случајевима када правите бота за масовне кориснике.
  18. Pretraga dozvola tekstualnih kanala prilikom podešavanja aplikacije za kreiranje muzičkog bota na Discordu
  19. Када завршите подешавање дозвола, копирајте линк за прву ауторизацију бота на серверу, јер иначе нећете моћи да га додате.
  20. Копирање линка за ауторизацију алата за креирање музичког бота у Дискорду
  21. Пређите на овај линк и изаберите тест сервер на коме желите да проверите бота.
  22. Prva autorizacija nakon prelaska na link za kreiranje muzičkog bota na Discordu
  23. Потврдите капчу и сачекајте појаву информације о успешном ауторизацији.
  24. Успешна ауторизација након преласка на линк за креирање музичког бота у Discordu

Сада имате апликацију бота са јединственим токеном, а бот је већ додат на сервер, али тренутно је у офлајн режиму.Za početak njegovog rada biće potrebno izvršiti još nekoliko radnji na lokalnom računaru, pošto još nismo postavili bota na hosting za autonomno funkcionisanje.

Korak 2: Pripremne radnje

Pripremne radnje uključuju kreiranje potrebnih direktorijuma i fajlova, instalaciju alata i zavisnosti za njih. U tome nema ništa komplikovano, potrebno je samo redom izvršiti svaku radnju, pažljivo prateći da na nijednom koraku ne dođe do grešaka.

  1. Kreirajte folder sa imenom bota. Možete izabrati bilo koje mesto, ali najbolje je da to bude korisnička domaća mapa.
  2. Dodavanje korisničke fascikle za kreiranje muzičkog bota na Discordu
  3. U njemu kreirajte dva fajla: "config.json" i "index.js". U prvom ćemo zapisati opštu konfiguraciju bota — njegov prefiks i jedinstveni token, a u drugom — sav programski kod sa komandama i opštim zadacima ovog alata.
  4. Dodavanje fajlova u korisničku fasciklu za kreiranje muzičkog bota na Discordu
  5. Za rad bota biće potreban Node.js. Ovaj alat je namenjen za pokretanje skripti na lokalnom računaru. Pređite na link ispod i preuzmite njegov instalacioni program za Windows.

    Preuzmite Node.js sa zvaničnog sajta

  6. Preuzimanje komponente za pravljenje muzičkog bota na Discordu
  7. Sačekajte da se preuzimanje izvršnog fajla završi, pokrenite ga i prođite kroz jednostavnu proceduru instalacije, prateći uputstva koja se prikazuju na ekranu.
  8. Pokretanje i instalacija komponente za kreiranje muzičkog bota na Discordu
  9. Nakon toga otvorite "Komandnu liniju" na način koji vam odgovara, na primer, upisivanjem cmd u alatu "Pokreni" (pokreće se kombinacijom tastera Win + R).
  10. Pokretanje komandne linije za kreiranje muzičkog bota na Discordu
  11. Instalirajte modul za rad sa API-jem Discord-a, koji se zove "discord.js". Za to u otvorenom prozoru konzole unesite npm install discord.js ffmpeg-binaries opusscript ytdl-core --save i pritisnite Enter — tako ćete odmah dodati i sve potrebne zavisnosti.
  12. Tim za instalaciju dodatnih modula za kreiranje muzičkog bota na Discordu
  13. Sačekajte da se na ekranu pojave obaveštenja o uspešnoj instalaciji, ne zatvarajući trenutno otvoreni prozor konzole. Ako se pojave greške, proučite njihov kod i koristite pretraživač da pronađete rešenje na forumima ili zvaničnom sajtu.
  14. Процес инсталације додатних модула за креирање музичког бота у Дискорду

Na kraju, u korisničkoj domaćoj mapi trebali bi se pojaviti fajlovi povezani sa komponentom Node.js i dodatim modulom.Ponovo pokrenite računar kako ne bi bilo problema prilikom daljeg pokretanja bota, a zatim pređite na sledeći korak.

Korak 3: Uređivanje konfiguracione datoteke bota

Već znate da će u kreiranoj konfiguracionoj datoteci bota biti samo nekoliko redova koda koji se odnose na korišćeni prefiks (simbol ispred unosa komande na serveru) i jedinstveni token koji definiše aplikaciju u API-ju. Preporučujemo da preduzmete sve dalje korake tako što ćete preuzeti program koji podržava JS sintaksu ili bilo koji napredni tekstualni editor, ako to već nije učinjeno. U članku na linku ispod možete se upoznati sa dostupnim odgovarajućim rešenjima.

Detaljnije: Izbor razvojnog okruženja za programiranje

Kada je softver instaliran na računar i spreman za rad, možete slobodno početi sa uređivanjem konfiguracione datoteke, unoseći korisničke podatke.

  1. Pokrenite datoteku config.js kroz tekstualni editor ili razvojno okruženje, i umetnite kod koji sledi.

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

    Измена префикса при уређивању конфигурационог фајла за креирање музичког бота у Discordu

    Promenite prefiks unutar dvostrukih navodnika na potreban ili ostavite uzvičnik. Primer komande koja koristi ovaj znak izgleda ovako: !play.

  2. Pređite na stranicu svog bota na razvojnog portalu, pronađite jedinstveni token i kopirajte ga.
  3. Копирање јединственог токена за креирање музичког бота у Discordu
  4. Zamenite tekst your-toke, ne brišući pri tom dvostruke navodnike.
  5. Zamena jedinstvenog tokena u konfiguracionom fajlu za kreiranje muzičkog bota na Discordu
  6. Sačuvajte promene i zatvorite ovu datoteku. Usput, isto to možete učiniti i putem standardnog "Notepad".
  7. Korišćenje tekstualnog urednika prilikom uređivanja konfiguracione datoteke za kreiranje muzičkog bota na Discordu

Time su završene radnje sa konfiguracionom datotekom, više nije potrebno upisivati nijednu liniju koda.Zatvorite ga, ne zaboravljajući da sačuvate unesene izmene, i pređite na dalju izradu bota za reprodukciju muzike.

Korak 4: Probno pokretanje bota

Prvo treba da se uverimo da se bot uopšte pokreće na serveru i prelazi u online režim, za to će biti potrebno da zapišemo njegovu glavnu deo koda u index.js, a zatim koristiti Node.js za pokretanje.

  1. Kroz razvojno okruženje ili odabrani tekstualni editor otvorite pomenuti fajl za uređivanje.
  2. Otvaranje datoteke za unos koda za kreiranje muzičkog bota na Discordu
  3. Umetnite tamo blok koda koji se odnosi na instalaciju zavisnosti i ukazuje na korišćene module:

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

  4. Kod objavljivanja zavisnosti za kreiranje muzičkog bota na Discordu
  5. Pomoću prethodno navedenog tokena kreirajte klijenta i prijavite se, što se vrši unosom samo dve jednostavne linije:

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

  6. Dodavanje klijenta i tokena za kreiranje muzičkog bota na Discordu
  7. Preostaje samo da navedete poslednje osnovne linije za slušanje bota.

    client.once('ready', () => {
    console.log('Spreman!');
    });
    client.once('reconnecting', () => {
    console.log('Ponovno povezivanje!');
    });
    client.once('disconnect', () => {
    console.log('Diskonektovan!');
    });

  8. Команде за повезивање у коду за креирање музичког бота у Дискорду
  9. Proširite meni "File" i sačuvajte unesene izmene.
  10. Čuvanje promena nakon uređivanja koda za pravljenje muzičkog bota na Discordu
  11. Ponovo pokrenite konzolu na pogodan način.
  12. Pokretanje komandne linije za uključivanje bota za kreiranje muzičkog bota na Discordu
  13. Unesite komandu node index.js za pokretanje skripte bota.
  14. Команда за активирање бота за креирање музичког бота на Дискорду
  15. Ako se njegovi fajlovi ne nalaze u kućnoj direktoriji korisnika, nakon node biće potrebno navesti punu putanju do njih.
  16. Unos druge komande za aktivaciju bota za kreiranje muzičkog bota na Discordu
  17. O uspešnom pokretanju bota svedoči pojava natpisa "Spreman!".
  18. Rezultat uspešnog pokretanja za kreiranje muzičkog bota na Discordu
  19. Otvorite Discord i uverite se da je bot prešao u status "Online".
  20. Provera bota u režimu online za kreiranje muzičkog bota na Discordu

Korak 5: Pisanje glavnog koda muzičkog bota

Ostao je najteži proces — pisanje glavnog koda za muzičkog bota.Postoji spisak zadataka koje treba da izvršava: čitanje poruka i obrada komandi, određivanje naziva pesme ili njenog linka, povezivanje na glasovni kanal i reprodukcija. Bot ima dozvole za sve to, tako da je potrebno samo ukazati mu na radnje pomoću JavaScript funkcija, što se obavlja u istom fajlu "index.js".

Uređivanje koda za obezbeđivanje normalnog rada muzičkog bota na Discordu

Dodajte jednostavnu funkciju za čitanje poruka:

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

Ona se sastoji od samo dve linije, ali će omogućiti botu da prihvati korisnički zahtev i pravilno ga obradi. Može se reći da je ovo jedna od najvažnijih komandi za botove svih tipova. Obavezno dodajte ignorisanje poruka od drugih botova, tako što ćete uneti

if (message.author.bot) return;

To omogućava izbegavanje sukoba prilikom istovremenog korišćenja više botova na serveru. Zatim će biti potrebno proveriti prefiks, kako bi bot prihvatio komandu ili je vratio.

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

Provera pokrenutih komandi vrši se pomoću jednostavnih operatora if, a konstrukcija u našem slučaju izgleda ovako:

const serverQueue = queue.get(message.guild.id);
if (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('Morate koristiti postojeću komandu!')
}

Obratite pažnju na to da funkcija send('') šalje poruku korisniku, ukoliko unese neispravnu komandu. Ovu poruku možete uređivati menjajući tekst unutar navodnika.

Sada je bot naučio da prihvata komande, ali još uvek ne može da interaguje sa njima, pošto radnje nisu navedene. Prvo ćemo dodati komandu play, koja je odgovorna za reprodukciju. Za nju je potreban niz koji ima sledeći oblik:

const queue = new Map();

Ona šalje sve komande u red i omogućava pesmama da se reprodukuju samo kada prethodna završi.Dalje je potrebno kreirati funkciju koja će proveravati da li se korisnik povezao na glasovni kanal i da li bot ima odgovarajuće dozvole.

async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('Da biste slušali muziku, morate biti u glasovnom kanalu!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Potrebne su mi dozvole da se pridružim i govorim na vašem glasovnom kanalu!');
}
}

Sledeća akcija je povezivanje biblioteke ytdl, pošto će ovaj bot čitati naziv pesme sa linka sa YouTube-a, nakon čega će je reprodukovati na serveru. Za to je potrebno dodati samo mali deo koda.

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

Sledeći blok koda će omogućiti da se shvati da li postoje pesme u redu ili se može odmah povezati na glasovni kanal i početi reprodukciju.

if (!serverQueue) {

}else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} je dodat u red!`);
}

Dalje sledi malo složenija shema ugovora za početnike programere, koja dodaje pesmu u niz i radi isto pri svakom unosu !play, proveravajući red i birajući ispravnu akciju.Obratite pažnju na predstavljene komentare koji omogućavaju razumevanje svih nijansi.

// Kreiranje ugovora za red čekanja
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
};
// Postavljanje reda čekanja pomoću našeg ugovora
queue.set(message.guild.id, queueContruct);
// Umetanje kompozicije u naš niz pesama
queueContruct.songs.push(song);

try {
// Ovde pokušavamo da se pridružimo glasovnom čatu i sačuvamo vezu u objektu
var connection = await voiceChannel.join();
queueContruct.connection = connection;
// Poziv funkcije za reprodukciju kako bismo pokrenuli pesmu
play(message.guild, queueContruct.songs[0]);
} catch (err) {
// Ispisivanje poruke o grešci ako bot ne može da se pridruži glasovnom čatu
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}

Sa redom čekanja je sve jasno, ali pesme još uvek ne sviraju, jer nedostaje dodela za funkciju play. Za to je potrebno dodati strukturu u kod

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

Reprodukcija počinje pomoću funkcije playStream() i navedene veze na pesmu.

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on('end', () => {
console.log('Muzika je završena!');
// Uklanja završenu pesmu iz reda čekanja
serverQueue.songs.shift();
// Ponovo poziva funkciju reprodukcije sa sledećom pesmom
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

Ako želite da dodate funkciju preskakanja pesama, na primer, kada odlučite da reprodukujete plejlistu, prvo se pobrinite za odgovarajuću komandu, a zatim dodajte ovakav deo:

function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Morate biti u glasovnom kanalu da biste zaustavili muziku!');
if (!serverQueue) return message.channel.send('Nema pesme koju bih mogao da preskočim!');
serverQueue.connection.dispatcher.end();
}

Otprilike po istoj šemi funkcioniše i funkcija zaustavljanja, ali blok sa kodom dobija malo drugačiji oblik:

function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('
Morate biti u glasovnom kanalu da biste zaustavili muziku!');{{
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}

Imajte na umu da je gornja informacija namenjena isključivo onim korisnicima koji su već upoznati sa jezikom JavaScript ili tek uče i odlučili su da kreiraju muzičkog bota.Ako nemate nikakve veštine i navedeni blokovi sa kodom vam ništa ne znače, jednostavno kopirajte ceo izvorni kod u datoteku, zamenite poruke od bota na ruski (one se nalaze u navodnicima) i sačuvajte izmene.Ceo izvorni kod ima ovakav izgled:

Izgled kompletnog izvornog koda za pravljenje muzičkog bota na Discordu

const Discord = require('discord.js');
const {
prefix,
token,
} = require('./config.json');
const ytdl = require('ytdl-core');
const client = new Discord.Client();
const queue = new Map();
client.once('ready', () => {
console.log('Spreman!');
});
client.once('reconnecting', () => {
console.log('Ponovno se povezujem!');
});
client.once('disconnect', () => {
console.log('Prekid veze!');
});
client.on('message', async message => {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
const serverQueue = queue.get(message.guild.id);
if (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('Morate uneti važeću komandu!')
}
});
async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('Morate biti u glasovnom kanalu da biste puštali muziku!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Potrebne su mi dozvole da se pridružim i govorim u vašem glasovnom kanalu!');
}
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} je dodat u red!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Morate biti u glasovnom kanalu da biste zaustavili muziku!');
if (!serverQueue) return message.channel.send('Nema pesme koju bih mogao da preskočim!');
serverQueue.connection.dispatcher.end();
}
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Morate biti u glasovnom kanalu da biste zaustavili muziku!');
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('Muzika je završena!');
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}
client.login(token);

Po završetku, najbolje je ponovo pokrenuti bota, nakon čega možete preći na svoj server, povezati se sa glasovnim kanalom i uneti bilo koju komandu interakcije, proveravajući kako će bot reagovati.

Tim za proveru izvornog koda za pravljenje muzičkog bota na Discordu

Ako vam navedena verzija bota ne odgovara, možete pronaći izvorne kodove na istom GitHub-u i kopirati ih na svoj računar.Princip registracije i pokretanja ostaje isti, stoga po potrebi jednostavno uredite gotov kod, a zatim pređite na testiranje bota.

Pretraga gotovih rešenja za pravljenje muzičkog bota u Discordu

U ovom članku nismo obradili postavljanje bota na hosting, njegovo deljenje sa drugim korisnicima, kreiranje avatara i korišćenje otvorenih platformi, sa kojih se može autorizovati. Sve to su odvojeni procesi kojima treba da se bavite samo kada usavršite svoje veštine u pravljenju botova i budete spremni da delite projekte na mreži.