В тази статия ще говорим за ръчно създаване на бот за възпроизвеждане на музика в Discord. Можете или просто да копирате целия предоставен код, или да го редактирате според себе си, ако владеете уменията по JavaScript. Създаденият от нас бот е тестван, но на някои етапи потребителят все пак може да се сблъска с различни проблеми, затова съветваме внимателно да четете не само нашата инструкция, но и появяващите се на екрана кодове за грешки, ако има такива.

Ако се окаже, че този материал е твърде сложен за вас или не е подходящ по други причини, използвайте готови безплатни ботове за възпроизвеждане на музика. В статията по линка по-долу ще намерите подробна информация за това и ще можете да реализирате поставената задача.

Повече информация:
Добавяне на музикален бот на сървър в Discord
Възпроизвеждане на музика чрез бот в Discord

Стъпка 1: Създаване на ново приложение

Всеки бот за Discord трябва да бъде регистриран на официалния портал за разработчици.Така получавате достъп до всички необходими настройки, свързани с разрешенията и общото поведение на бота, ще можете да копирате линка за неговата авторизация в личния сървър и да използвате уникалния токен, който е необходим за по-нататъшното разработване на команди.

Отидете на официалния сайт на Discord Developer Portal

  1. Използвайте линка по-горе, за да отворите главната страница на портала за разработчици, влезте в личния си акаунт в Discord и натиснете на "New Application" за създаване на ново приложение.
  2. Преминаване към регистрация на ново приложение за създаване на музикален бот в Discord
  3. Въведете името му, като имате предвид уникалността, тъй като ако вече съществуват много ботове с такова име, няма да можете да го създадете — ще се появи уведомление за необходимостта от преименуване.
  4. Въведете името при регистрацията на ново приложение за създаване на музикален бот в Discord
  5. След завършване, отворете менюто на сайта и изберете категорията "Bot".
  6. Преход към свързването на компонентите на новото приложение за създаване на музикален бот в Discord
  7. Срещу реда "Build-A-Bot" кликнете на "Add Bot".
  8. Бутон за свързване на компонентите на новото приложение за създаване на музикален бот в Discord
  9. Потвърдете добавянето на бота за избраното приложение.
  10. Потвърждение за свързване на компонентите с новото приложение за създаване на музикален бот в Discord
  11. Чрез вече познатото меню преминете в "OAuth2".
  12. Преминаване към страницата за настройки на приложението за създаване на музикален бот в Discord
  13. Тази секция отговаря за общите параметри на бота и неговата авторизация. В блока "Scopes" отбележете с маркер точката "bot".
  14. Избор на типа работа на приложението за създаване на музикален бот в Discord
  15. В списъка с разрешения задължително активирайте присъединяването към гласовите канали и възможността за говорене, тъй като това е необходимо за по-нататъшното предаване на музика.
  16. Търсене на разрешения за гласови канали при настройка на приложение за създаване на музикален бот в Discord
  17. Ботът трябва да може да чете и изпраща съобщения, затова не забравяйте да включите тези опции в раздела с разрешенията за текстови чатове. Разбира се, можете да предоставите всички разрешения наведнъж, но такъв подход е неправилен, особено в случаите, когато правите бот за масов потребител.
  18. Търсене на разрешения за текстови канали при настройка на приложение за създаване на музикален бот в Discord
  19. След като настройката на разрешенията бъде завършена, копирайте линка за първоначалната авторизация на бота на сървера, защото в противен случай няма да можете да го добавите.
  20. Копиране на линка за авторизация на инструмента за създаване на музикален бот в Discord
  21. Отидете по този линк и изберете тестовия сървър, където искате да извършите проверка на бота.
  22. Първоначалната авторизация след преминаване по връзката за създаване на музикален бот в Discord
  23. Потвърдете капчата и изчакайте появата на информация за успешна авторизация.
  24. Успешна авторизация след преминаване по линка за създаване на музикален бот в Discord

Сега имате приложение на бота с уникален токен, а ботът вече е добавен на сървера, но все още е в офлайн режим.За да започне работата му, ще трябва да се извършат още няколко действия на локалния компютър, тъй като все още не качваме бота на хостинг за автономно функциониране.

Стъпка 2: Подготвителни действия

Към подготвителните действия спада създаването на необходимите директории и файлове, инсталирането на инструменти и зависимости за тях. Няма нищо сложно в това, просто трябва последователно да извършите всяко действие, внимателно следейки да не се появят грешки на нито един етап.

  1. Създайте папка с името на бота. Можете да изберете всяко място, но най-добре е за това да използвате домашната папка на потребителя.
  2. Добавяне на потребителска папка за създаване на музикален бот в Discord
  3. В нея създайте два файла: "config.json" и "index.js". В първия ще запишем общата конфигурация на бота — неговия префикс и уникален токен, а във втория — целия програмен код с командите и общите задачи на този инструмент.
  4. Добавяне на файлове в потребителската папка за създаване на музикален бот в Discord
  5. За работата на бота ще е необходим Node.js. Този инструмент е предназначен за стартиране на скриптове на локалния компютър. Отидете на линка по-долу и изтеглете инсталатора за Windows.

    Свалете Node.js от официалния сайт

  6. Изтегляне на компонента за създаване на музикален бот в Discord
  7. Очаквайте завършването на изтеглянето на изпълнимия файл, стартирайте го и преминете през простата процедура на инсталиране, следвайки инструкциите, които ще се появят на екрана.
  8. Стартиране и инсталиране на компонента за създаване на музикален бот в Discord
  9. След това отворете "Командния ред" по удобен за вас начин, например, като въведете cmd в утилитата "Изпълни" (тя се стартира с комбинацията от клавиши Win + R).
  10. Стартиране на командния ред за създаване на музикален бот в Discord
  11. Инсталирайте модула за работа с API на Discord, който се нарича "discord.js". За целта в отвореното прозорче на конзолата въведете npm install discord.js ffmpeg-binaries opusscript ytdl-core --save и натиснете Enter — така веднага ще добавите и всички необходими зависимости.
  12. Команда за инсталиране на допълнителни модули за създаване на музикален бот в Discord
  13. Изчакайте появата на уведомления на екрана за успешна инсталация, без да затваряте текущото прозорче на конзолата. Ако се появят грешки, проучете кода им и използвайте търсачката, за да намерите работно решение на форумите или на официалния сайт.
  14. Процесът на инсталиране на допълнителни модули за създаване на музикален бот в Discord

В крайна сметка в домашната папка на потребителя трябва да се появят файлове, свързани с компонента Node.js и добавения след модула.Рестартирайте компютъра, за да не възникнат трудности при следващото стартиране на бота, след което преминете към следващата стъпка.

Стъпка 3: Редактиране на конфигурационния файл на бота

Вие вече знаете, че в създадения конфигурационен файл на бота ще има само няколко реда код, отговарящи за използвания префикс (символ преди въвеждането на команда на сървъра) и уникалния токен, определящ приложението в API. За извършване на всички последващи действия препоръчваме да изтеглите програма с поддръжка на синтаксис JS или някой напреднал текстов редактор, ако това не е направено по-рано. В статията по линка по-долу можете да се запознаете с наличните подходящи решения.

Повече информация: Избор на среда за разработка за програмиране

След като софтуерът е инсталиран на компютъра и е готов за работа, можете смело да започнете редактирането на конфигурационния файл, въвеждайки там потребителските данни.

  1. Стартирайте файла config.js чрез текстов редактор или среда за разработка, и поставете там представения по-долу код.

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

    Промяна на префикса при редактиране на конфигурационния файл за създаване на музикален бот в Discord

    Променете префикса в двойни кавички на необходимия или оставете удивителния знак. Пример за команда с използване на този знак изглежда така: !play.

  2. Отидете на страницата на своя бот в портала за разработка, намерете уникалния токен и го копирайте.
  3. Копиране на уникален токен за създаване на музикален бот в Discord
  4. Поставете вместо надписа your-toke, без да премахвате двойните кавички.
  5. Смяна на уникален токен в конфигурационния файл за създаване на музикален бот в Discord
  6. Запазете промените и затворете този файл. Между другото, същото действие може да се извърши и чрез стандартния "Блокнот".
  7. Използването на текстов редактор при редактиране на конфигурационния файл за създаване на музикален бот в Discord

С това действията с конфигурационния файл са завършени, не е необходимо да се добавя нито един ред код.Затворете го, не забравяйки да запазите направените промени, и преминете към по-нататъшното написване на бота за възпроизвеждане на музика.

Стъпка 4: Пробен старт на бота

Първо трябва да се уверим, че ботът изобщо стартира на сървъра и преминава в онлайн режим, за което ще е необходимо да запишем основната част от кода в index.js, а след това да използваме Node.js за стартиране.

  1. Чрез средата за разработка или избрания текстов редактор отворете споменатия файл за редактиране.
  2. Отваряне на файла за въвеждане на код за създаване на музикален бот в Discord
  3. Вмъкнете там блока код, отговарящ за инсталирането на зависимости и указващ на използваните модули:

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

  4. Код за обявяване на зависимости за създаване на музикален бот в Discord
  5. С помощта на посочения по-рано токен създайте клиент и логин, което се осъществява чрез въвеждането на само две прости реда:

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

  6. Добавяне на клиент и токен за създаване на музикален бот в Discord
  7. Остава само да посочите последните основни редове за слушане на бота.

    client.once('ready', () => {
    console.log('Готово!');
    });
    client.once('reconnecting', () => {
    console.log('Преподключване!');
    });
    client.once('disconnect', () => {
    console.log('Разединен!');
    });

  8. Команди за свързване в кода за създаване на музикален бот в Discord
  9. Разгънете менюто "File" и запазете направените промени.
  10. Запазване на промените след редактиране на кода за създаване на музикален бот в Discord
  11. Отново стартирайте конзолата по удобен начин.
  12. Стартиране на командния ред за активиране на бота за създаване на музикален бот в Discord
  13. Въведете командата node index.js за стартиране на скрипта на бота.
  14. Команда за активиране на бота за създаване на музикален бот в Discord
  15. Ако файловете му не са разположени в домашната директория на потребителя, след node ще трябва да посочите пълния път до тях.
  16. Въвеждане на друга команда за активиране на бота за създаване на музикален бот в Discord
  17. За успешен старт на бота свидетелства появилото се съобщение "Готово!".
  18. Резултатът от успешното стартиране за създаване на музикален бот в Discord
  19. Отворете Discord и се уверете, че ботът е преминал в статус "Онлайн".
  20. Проверка на бота в онлайн режим за създаване на музикален бот в Discord

Стъпка 5: Написване на основния код на музикалния бот

Остана най-сложният процес — написването на основния код за музикалния бот.Има списък с задачи, които той трябва да изпълнява: четене на съобщения и обработка на команди, определяне на заглавието на песента или нейния адрес, свързване с гласов канал и възпроизвеждане. Разрешенията за всичко това са налични за бота, затова е нужно само да му укажете действията с помощта на функции JavaScript, което се извършва в същия файл "index.js".

Редактиране на кода за осигуряване на нормалната работа на музикалния бот в Discord

Добавете проста функция за четене на съобщения:

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

Тя се състои само от две реда, но ще позволи на бота да приеме потребителска заявка и да я обработи коректно. Може да се каже, че това е една от най-важните команди за ботове от всякакъв тип. Обязательно добавете игнориране на съобщения от други ботове, като въведете

if (message.author.bot) return;

Това позволява да се избегнат конфликти при едновременното използване на няколко бота на сървъра. След това ще е необходимо да проверите префикса, за да може ботът да приеме командата или да я върне.

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

Проверка на стартираните команди се извършва с помощта на прости оператори if, а конструкцията в нашия случай изглежда по следния начин:

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('Трябва да използвате съществуваща команда!')
}

Обърнете внимание, че функцията send('') изпраща съобщение на потребителя, ако той случайно въведе неработеща команда. Това съобщение можете да редактирате, променяйки текста в кавичките.

Сега ботът е научил да приема команди, но все още не може да взаимодейства с тях, тъй като действията не са указани. Първо добавете командата play, която отговаря за възпроизвеждането. За нея е необходим масив, който има следния вид:

const queue = new Map();

Той изпраща всички команди в опашка и кара песните да се възпроизвеждат само когато предишната завърши.Следва да създадете функция, която ще проверява дали потребителят е свързан с гласовия канал и дали ботът има съответните разрешения.

async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('За да слушате музика, трябва да сте в гласовия канал!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Нужни са ми разрешения, за да се присъединя и да говоря в гласовия ви канал!');
}
}

Следващата стъпка е свързването на библиотеката ytdl, тъй като този бот ще извлича заглавието на песента от линк в YouTube и след това ще я възпроизвежда на сървъра. За това е необходимо да се добави само малък фрагмент код.

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

Следващият блок код ще позволи да се разбере дали има песни в опашката или може веднага да се свържете с гласовия канал и да започнете възпроизвеждането.

if (!serverQueue) {

}else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} е добавена в опашката!`);
}

Следва малко сложна за начинаещи програмисти схема на контракта, която добавя песента в масива и прави същото при всеки вход !play, проверявайки опашката и избирайки правилното действие.Обърнете внимание на представените коментари, които позволяват да се разберат всички нюанси.

// Създаване на контракт за опашката
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);
}

С опашката всичко е ясно, но все още песните не се възпроизвеждат, тъй като липсва назначение за функцията play. За това в кода е необходимо да се добави структура

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

Възпроизвеждането започва с помощта на функцията playStream() и указаната връзка към трака.

const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
.on('end', () => {
console.log('Музиката свърши!');
// Премахва завършената песен от опашката
serverQueue.songs.shift();
// Отново извиква функцията за възпроизвеждане с следващата песен
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

Ако искате да добавите функция за пропускане на песни, например, когато решите да възпроизведете плейлист, първо се погрижете за съответната команда, а след това добавете следния фрагмент:

function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Трябва да сте в гласов канал, за да спрете музиката!');
if (!serverQueue) return message.channel.send('Няма песен, която мога да пропусна!');
serverQueue.connection.dispatcher.end();
}

Примерно по същата схема работи и функцията за спиране, но блокът с кода придобива малко различен вид:

function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('
Трябва да сте в гласов канал, за да спрете музиката!');
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}

Имайте предвид, че представената по-горе информация е подходяща единствено за потребители, които вече са запознати с езика JavaScript или току-що започват да го изучават и са решили да създадат музикален бот.Ако не притежавате умения изобщо и посочените блокове с код не ви говорят нищо, просто поставете целия изходен код в файл, заменете съобщенията от бота с руски (те са в кавички) и запазете промените.Целият изходен код изглежда така:

Външен вид на целия изходен код за създаване на музикален бот в Discord

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('Готово!');
});
client.once('reconnecting', () => {
console.log('Преподключавам се!');
});
client.once('disconnect', () => {
console.log('Разединен!');
});
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('Трябва да въведете валидна команда!')
}
});
async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('Трябва да сте в гласов канал, за да пуснете музика!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('Нуждая се от разрешения да се присъединя и да говоря в вашия гласов канал!');
}
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} беше добавена в опашката!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Трябва да сте в гласов канал, за да спрете музиката!');
if (!serverQueue) return message.channel.send('Няма песен, която дапропусна!');
serverQueue.connection.dispatcher.end();
}
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('Трябва да сте в гласов канал, за да спрете музиката!');
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('Музиката приключи!');
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}
client.login(token);

След завършване е по-добре да рестартирате бота, след което можете да отидете на своя сървър, да се свържете с гласов канал и да въведете всяка команда за взаимодействие, проверявайки как ще реагира ботът.

Отбор за проверка на изходния код за създаване на музикален бот в Discord

Ако предоставеният по-горе вариант на бота не ви подхожда, можете да намерите изходните кодове на същия GitHub и да ги копирате на своя компютър.Принципът на регистрация и стартиране остава същият, затова при необходимост просто редактирайте готовия код и след това преминете към тестване на бота.

Търсене на готови решения за създаване на музикален бот в Discord

В тази статия не разгледахме качването на бота на хостинг, разпространението му сред други потребители, създаването на аватар и използването на отворени платформи, откъдето може да бъде авторизиран. Всичко това са отделни процеси, с които трябва да се занимавате само в случай, че сте усъвършенствали умението си за създаване на ботове и сте готови да разпространявате проекти в мрежата.