Зміст
У цій статті мова піде про ручне створення бота для відтворення музики в Discord. Ви можете як просто скопіювати весь представлений код, так і редагувати його під себе, якщо володієте навичками JavaScript. Створений нами бот був перевірений, але на деяких етапах користувач все ж може зіткнутися з різними проблемами, тому радимо уважно читати не тільки нашу інструкцію, але і з'являються на екрані коди помилок, якщо такі будуть.
Якщо ж виявиться, що даний матеріал занадто складний для вас або не підходить з інших причин, використовуйте готові безкоштовні боти для відтворення музики. У статті за посиланням нижче ви знайдете детальну інформацію про це і зможете реалізувати поставлене завдання.
Детальніше:
додавання музичного бота на сервер у Discord
відтворення музики через бота в Discord
Крок 1: Створення нового додатка
Кожен Бот для Дискорду повинен бути зареєстрований на офіційному порталі для розробників. Так ви отримуєте доступ до всіх необхідних налаштувань, пов'язаних з дозволами і загальною поведінкою бота, зможете скопіювати посилання на його авторизацію в особистому сервері і використовувати унікальний токен, який потрібен для подальшої розробки команд.
Перейти на офіційний сайт Discord Developer Portal
- Скористайтеся посиланням вище, щоб відкрити головну сторінку порталу для розробників, увійдіть в особистий обліковий запис Discord і натисніть на &171;New Application&187; для створення нового додатка.
- Введіть його ім'я, враховуючи унікальність, оскільки якщо вже існує багато ботів з такою ж назвою, створити його не вийде &8212; з'явиться повідомлення про потребу перейменування.
- Після завершення відкрийте меню на сайті та виберіть категорію &171;Bot&187; .
- Навпроти рядка &171;Build-A-Bot&187; клікніть на &171;Add Bot&187; .
- Підтвердьте додавання бота для вибраної програми.
- Через вже знайоме меню перейдіть в &171;OAuth2&187; .
- Цей розділ відповідає за загальні параметри бота та його авторизацію. У блоці &171;Scopes&187; відзначте маркером пункт &171;bot&187; .
- У списку дозволів обов'язково активуйте приєднання до голосових каналів і можливість говорити, оскільки це потрібно для подальшої трансляції музики.
- Бот повинен вміти читати та надсилати повідомлення, тому не забудьте ввімкнути ці параметри в розділі з дозволами текстових чатів. Звичайно, можна надати всі дозволи відразу, але такий підхід неправильний, особливо в тих випадках, коли ви робите бота для масового користувача.
- Як тільки налаштування дозволів буде завершено, скопіюйте посилання для першої авторизації бота на сервері, тому що інакше додати його поки не вийде.
- Перейдіть за цим посиланням і виберіть тестовий сервер, де хочете здійснювати перевірку бота.
- Підтвердіть капчу і дочекайтеся появи інформації про успішну авторизацію.
Тепер у вас є додаток бота з унікальним маркером, і бот вже додано на сервер, але поки що в автономному режимі. Для початку його роботи доведеться виконати ще кілька дій вже на локальному комп'ютері, оскільки поки ми не вивантажуємо бота на хостинг для автономного функціонування.
Крок 2: підготовчі дії
До підготовчих дій відноситься створення необхідних каталогів і файлів, установка інструментів і залежностей для них. В цьому немає нічого складного, потрібно лише по черзі провести кожну дію, уважно стежачи за тим, щоб ні на одному етапі не з'явилися помилки.
- Створіть папку з назвою бота. Ви можете вибрати будь-яке місце, але найкраще для цього підійде домашня папка користувача.
- У ній створіть два файли: &171;config.json&187; і &171;index.js&187; . У першому запишемо загальну конфігурацію бота &8212; його префікс і унікальний токен, а в другому &8212; весь програмний код з командами і загальними завданнями даного інструменту.
- Для роботи бота знадобиться Node.js. Цей інструмент призначений для запуску скриптів на локальному комп'ютері. Перейдіть за посиланням нижче та завантажте його інсталятор для Windows.
- Чекайте завершення скачування виконуваного файлу, запустіть його і пройдіть просту процедуру установки, слідуючи відобразилися на екрані інструкцій.
- Після цього відкрийте &171;командний рядок&187;
зручним для Вас чином, наприклад, ввівши
cmd
в утиліті & 171; виконати & 187; (вона запускається комбінацією клавіш Win + R ). - Встановіть модуль для роботи з API Discord, який називається &171;discord.js&187;
. Для цього у вікні консолі введіть
npm install discord.js ffmpeg-binaries opusscript ytdl-core --save
і натисніть Enter &8212; так ви відразу додасте і всі необхідні залежності. - Дочекайтеся появи повідомлень на екрані про успішну установку, не закриваючи поточне вікно консолі. Якщо з'являться помилки, вивчіть їх код і скористайтеся пошукачем, щоб відшукати робоче рішення на форумах або офіційному сайті.
У підсумку в домашній папці користувача повинні з'явитися файли, пов'язані з компонентом Node.js і доданим після модулем. Перезавантажте комп'ютер, щоб при подальшому запуску бота не виникло труднощів, потім переходите до наступного кроку.
Крок 3: редагування файлу конфігурації бота
Ви вже знаєте, що у створеному файлі конфігурації бота буде лише кілька рядків коду, відповідальних за використовуваний префікс (символ перед введенням команди на сервері) та унікальний маркер, що визначає програму в API. Для виконання всіх подальших дій рекомендуємо завантажити програму з підтримкою синтаксису JS або будь-який просунутий текстовий редактор, якщо цього не було зроблено раніше. У статті за посиланням нижче ви зможете ознайомитися з доступними відповідними рішеннями.
Детальніше: вибір середовища розробки для програмування
Як тільки по встановлено на комп'ютер і готове до роботи, можна сміливо приступати до редагування конфігураційного файлу, вводячи туди призначені для користувача дані.
- Запустіть файл
config.js
через текстовий редактор або середовище розробки, вставте туди представлений далі код.{
"prefix": "!",
"token": "your-toke"
}Змініть префікс у подвійних лапках на необхідний або залиште знак оклику. Приклад команди з використанням цього знака виглядає так:
!play
. - Перейдіть на сторінку свого бота на порталі розробки, знайдіть там унікальний маркер і скопіюйте його.
- Вставте замість напису your-toke , не видаляючи подвійні лапки.
- Збережіть зміни та закрийте даний файл. ДО РЕЧІ, виконати те ж саме дію можна і через стандартний &171; Блокнот&187; .
На цьому дії з конфігураційним файлом завершені, більше там не потрібно прописувати жодного рядка коду. Закрийте його, не забувши зберегти внесені правки, і приступайте до подальшого написання бота для відтворення музики.
Крок 4: пробний запуск бота
Спочатку нам потрібно переконатися в тому, що бот взагалі запускається на сервері і переходить в онлайн-режим, для цього знадобиться записати його основну частину коду в index.js
, а потім вже використовувати Node.js для запуску.
- Через середовище розробки або вибраний текстовий редактор відкрийте згаданий файл для редагування.
- Вставте туди блок коду, що відповідає за установку залежностей і вказує на використовувані модулі:
Const Discord = require('discord.js');
const {
prefix,
token,
} = require('./config.json');
const ytdl = require('ytdl-core'); - За допомогою зазначеного раніше токена створіть клієнта і логін, що здійснюється шляхом введення всього двох простих рядків:
Const client = new Discord.Client();
client.login(token); - Залишається тільки вказати останні базові рядки для прослуховування бота.
Client.once('ready', () => {
console.log('Ready!');
});
client.once('reconnecting', () => {
console.log('Reconnecting!');
});
client.once('disconnect', () => {
console.log('Disconnect!');
}); - Розгорніть меню &171;File&187; і збережіть внесені зміни.
- Знову запустіть консоль зручним способом.
- Введіть команду
node index.js
для запуску сценарію бота. - Якщо його файли розташовані не в домашній директорії користувача, після
node
доведеться вказати повний нехай до них. - Про успішний запуск бота свідчить з'явилася напис & 171; Готово!&187; .
- Усуньте розбіжності і вбийте, що бот перейшов до стат &171;Онлайн&187; .
Крок 5: Написання основного коду музичного бота
Залишився найскладніший процес &8212; написання основного коду для музичного бота. Є перелік завдань, який він повинен виконувати: читання повідомлень і обробка команд, визначення назви пісні або її адреси, підключення до голосового каналу і відтворення. Дозволи на це у бота є все, тому йому потрібно лише вказати на дії за допомогою функцій на JavaScript, що виконується в тому ж файлі &171;index.js&187; .
Додайте просту функцію для читання повідомлень:
Client.on ('повідомлення', асинхронне Повідомлення = & gt; {
}
Вона складається всього з двох рядків, але дозволить боту прийняти користувальницький запит і коректно обробити. Можна сказати, що це одна з найважливіших команд для ботів будь-яких типів. Обов'язково додайте ігнорування повідомлень від інших ботів, ввівши
If (повідомлення.автор.бот) повертає;
Це дозволяє уникнути конфліктів при одночасному використанні декількох ботів на сервері. Далі знадобиться перевірити префікс, щоб бот прийняв команду або повернув її.
If (!message.content.StartsWith (префікс)) повертає;
Перевірка запускаються команд здійснюється за допомогою простих операторів якщо , то констракція в нашому випадку є результатом:
Const serverQueue = черга. отримати(message.guild.id );
if (message.content.StartsWith(`${prefix}play`)) {
виконати(повідомлення, серверна черга);
повернувши;
} else if (message.content.StartsWith (`${префікс}пропустити')) {
пропустити (повідомлення, черга сервера);
повернувши;
} else if (message.content.StartsWith (`${префікс}stop')) {
зупинка (повідомлення, серверна черга);
повернення;
} ще {
message.channel.send("ви продовжуєте користуватися Послугами Компанії!")
}
Зверніть увагу на те, що функція надіслати(")
відправляє користувачеві повідомлення, якщо раптом він вводить неробочу команду. Це повідомлення ви можете редагувати, змінюючи напис в лапках.
Тепер бот навчився приймати команди, але поки не може взаємодіяти з ними, оскільки дії не вказані. В першу додамо команду Грай
, яка відповідає за відтворення. Для неї необхідний масив, що має наступний вигляд:
Постійна черга = нова карта ();
Він надсилає всі команди в чергу і змушує пісні грати лише тоді, коли попередня закінчується. Далі знадобиться створити функцію, яка буде перевіряти, чи підключився Користувач до голосового каналу і чи є у бота відповідні дозволи.
Виконання асинхронної функції (повідомлення, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = повідомлення.учасник.голосовий канал;
if (!voiceChannel) повертає повідомлення.channel.send(' що слухати музику, вам потрібно бути в голосовому каналі!');
постійні дозволи = voiceChannel.permissionsFor (повідомлення.клієнт.користувач);
if (!permissions.has ('підключатися')||!permissions.has ('говорити')) {
відповідь повідомлення.channel.send ("мені потрібні зміни, що б підключитися і говорити на вашому каналі!");
}
}
Наступна дія &8212; підключення бібліотеки з початку року , попрошу бота будетсчитивать назву пісні за посиланням з YouTube, щоб потім відтворити її на сервері. Для неї знадобиться вставити всього невеликий шматочок коду.
Const songInfo = очікування ytdl.getInfo (аргументи[1]);
постійна пісня = {
назва: songInfo.title,
url: songInfo.video_url,
};
Наступний блок коду дозволить зрозуміти, чи є пісні в черзі або можна відразу ж підключитися до голосового каналу і почати відтворення.
If (!serverQueue) {
}більше {
Черга на сервер.пісня.поштовх(пісня);
console.log(serverQueue.пісня);
відповідь повідомлення.канал.надсилання ('${пісня.назва} Додано в чергу!`);
}
Далі йде трохи складна для початківців програмістів схема контракту, яка додає пісню в масив і робить те ж саме при кожному введенні !грати , перевіряючи чергу та вибираючи правильну дію. Зверніть увагу на представлені коментарі, які і дозволяють розібратися з усіма тонкощами.
/ / створення контракту для черги
const queueContruct = {
Текстовий канал: повідомлення.канал,
Голосовий канал: голосовий канал,
підключення: нульове,
пісня: [],
гучність: 5,
відтворення: true,
};
// Встановлення черги за допомогою нашого контракту
черга. встановити(message.guild.id , побудова черги);
// Вставляємо композицію в наш масив пісень
queueContruct.songs.push (пісня);
Спробуй {
// Тут ми намагаємось приєднатися до голосового чату та зберегти з'єднання в об'єкті
var connection = очікування голосового каналу.join();
queueconstruct.connection = підключення;
// Виклик функції відтворення для запуску пісні
відтворення (message.guild, queueContruct.songs[0]);
} зловити (помилка) {
// Вихід повідомлення про помилку, якщо бот не може приєднатися до голосового чату
console.log (помилка);
черга. видалити(message.guild.id );
відповідь повідомлення.канал.надсилання (помилка);
}
З чергою все зрозуміло, але поки ще пісні не відтворюються, оскільки відсутнє призначення для функції Грай
. Для цього в код необхідно додати структуру
Функціональна гра(Гільдія, пісня) {
const serverQueue = черга. отримати(guild.id );
якщо (!пісня) {
serverQueue.voiceChannel.leave();
черга. видалити(guild.id );
повернувши;
}
}
Програвання ж починається за допомогою функції потік відтворення ()
і зазначеної посилання на трек.
Const dispatcher = serverQueue.підключення.Потік відтворення (ytdl (song.url))
.on ('кінець', () = & gt; {
console.log ('Музика Закінчилася!');
// Видаляє готову пісню з черги
Черга на сервер.пісня.shift();
// Знову викликає функцію відтворення з наступною піснею
грати (Гільдія, серверна черга.пісні[0]);
})
.on ('помилка', error = & gt; {
console.error (Помилка);
});
dispatcher.setVolumeLogarithmic (серверна черга.обсяг / 5);
Якщо ви хочете додати функцію пропуску пісень, наприклад, коли ви вирішили відтворити список відтворення, спочатку подбайте про відповідну команду, а потім додайте такий фрагмент:
Пропуск функції (повідомлення, черга сервера) {
if (!message.member.voiceChannel) повертає повідомлення.channel.send(' ви продовжуєте бути в голосовому каналі, що б відключити музику!');
if (!serverQueue) повертає message.channel.send ('немає відповіді, кого я можу попросити!');
serverQueue.connection.dispatcher.end();
}
Приблизно за тією ж схемою працює і функція зупинки, але блок з кодом знаходить трохи інший вигляд:
Зупинка функції (повідомлення, черга сервера) {
if (!message.member.voiceChannel) повертає повідомлення.channel.send('
Ви повинні бути в голосовому каналі, щоб зупинити музику!');
Черга на сервер.пісня = [];
serverQueue.connection.dispatcher.end();
}
Враховуйте, що представлена вище інформація підходить виключно для тих користувачів, хто вже знайомий з мовою JavaScript-коду або тільки займається його вивченням і вирішив створити музичного бота. Якщо ви не володієте навичками взагалі і зазначені блоки з кодом вам взагалі ні про що не говорять, просто вставте весь вихідний код в файл, замініть повідомлення від бота на російські (вони знаходяться в лапках) і збережіть зміни. Весь вихідний код має такий вигляд:
Const Discord = потрібно('discord.js ');
const {
префікс,
токен,
} = вимагатися('./config.json');
const ytdl = require('ytdl-core');
постійний клієнт = новий дискорд.Клієнт();
постійна черга = нова карта ();
клієнт.once ('готово', () = & gt; {
console.log ('Готово!');
});
клієнт.once ('повторне підключення', () = & gt; {
console.log ('повторне підключення!');
});
клієнт.once ('вимкнути', () = & gt; {
console.log ('відключитися!');
});
client.on ('повідомлення', асинхронне Повідомлення = & gt; {
if (message.author.Bot) повертає;
if (!message.content.StartsWith (префікс)) повертає;
const serverQueue = черга. отримати(message.guild.id );
if (message.content.StartsWith(`${prefix}play`)) {
виконати(повідомлення, серверна черга);
повернувши;
} else if (message.content.StartsWith (`${префікс}пропустити')) {
пропустити (повідомлення, черга сервера);
повернувши;
} else if (message.content.StartsWith (`${префікс}stop')) {
зупинка (повідомлення, серверна черга);
повернувши;
} ще {
message.channel.send ("вам потрібно ввести дійсну команду!")
}
});
async function execute(message, serverQueue) {
const args = message.content.split(' ');
const voiceChannel = message.member.voiceChannel;
if (!voiceChannel) return message.channel.send('You need to be in a voice channel to play music!');
const permissions = voiceChannel.permissionsFor(message.client.user);
if (!permissions.has('CONNECT') || !permissions.has('SPEAK')) {
return message.channel.send('I need the permissions to join and speak in your voice channel!');
}
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} has been added to the queue!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
if (!serverQueue) return message.channel.send('There is no song that I could skip!');
serverQueue.connection.dispatcher.end();
}
function stop(message, serverQueue) {
if (!message.member.voiceChannel) return message.channel.send('You have to be in a voice channel to stop the music!');
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('Music ended!');
serverQueue.songs.shift();
play(guild, serverQueue.songs[0]);
})
.on('error', error => {
console.error(error);
});
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
}
client.login(token);
Після завершення краще перезапустити бота, після чого можна перейти до свого сервера, підключитися до голосового каналу і ввести будь-яку команду взаємодії, перевіривши, як на це відреагує бот.
Якщо наведений вище варіант бота вам не підходить, можна знайти вихідні коди на тому ж GitHub і скопіювати їх на свій комп'ютер. Принцип реєстрації і запуску залишається той же, тому за необхідності просто Редагуйте готовий код, а потім приступайте до тестування бота.
У цій статті ми не торкнулися вивантаження бота на хостинг, поширення його серед інших користувачів, створення аватарки і використання відкритих майданчиків, звідки його і можна авторизувати. Все це & 8212; окремі процеси, якими варто займатися тільки в тому випадку, коли ви відточили свій навик створення ботів і готові поширювати проекти в мережі.