У цій статті йдеться про ручне створення бота для відтворення музики в 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();
}

Приблизно за тією ж схемою працює і функція зупинки, але блок з кодом набуває трохи іншого вигляду:

{{t_

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

У цій статті ми не торкнулися вивантаження бота на хостинг, розповсюдження його серед інших користувачів, створення аватарки та використання відкритих майданчиків, звідки його і можна авторизувати. Усе це — окремі процеси, якими варто займатися лише в тому випадку, коли ви відточили свій навик створення ботів і готові розповсюджувати проекти в мережі.