В этой статье мы расскажем, как вручную создать бота для воспроизведения музыки в Discord. Вы можете просто скопировать весь представленный код или отредактировать его самостоятельно, если у вас есть навыки JavaScript. Созданный нами бот был протестирован, но на некоторых этапах пользователь все еще может сталкиваться с различными проблемами, поэтому мы советуем вам внимательно прочитать не только наши инструкции, но и коды ошибок, которые появляются на экране, если таковые имеются.
Если окажется, что этот материал вам слишком сложен или не подходит по другим причинам, используйте готовых бесплатных роботов для воспроизведения музыки. В статье по ссылке ниже вы найдете подробную информацию об этом и сможете реализовать действие.
Шаг 1: Создание нового приложения
Каждый бот Discord должен быть зарегистрирован на официальном портале разработчиков. Таким образом, вы можете получить доступ ко всем необходимым настройкам, связанным с разрешениями и общим поведением бота, вы можете скопировать ссылку на его авторизацию на свой персональный сервер и использовать уникальный токен, необходимый для дальнейшей разработки команд.
- Воспользуйтесь ссылкой выше, чтобы открыть главную страницу портала разработчика, войдите в свою личную учетную запись Discord и нажмите «Новое приложение», чтобы создать новое приложение.
- Введите его имя с учетом уникальности, ведь если ботов с таким именем уже много, создать его не получится — появится уведомление о необходимости переименования.
- Когда закончите, откройте меню сайта и выберите категорию «Боты».
- Перед строкой «Build-A-Bot» нажмите «Добавить бота».
- Подтвердите добавление бота для выбранного приложения.
- Зайдите в «OAuth2» через уже знакомое меню».
- Этот раздел отвечает за общие параметры бота и его авторизацию. В блоке «Область действия» отметьте элемент «бот» маркером».
- В списке разрешений обязательно активируйте подключение к голосовым каналам и возможность говорить, так как это необходимо для дальнейшей передачи музыки.
- Бот должен уметь читать и отправлять сообщения, поэтому убедитесь, что вы включили эти параметры в разделе разрешений текстового чата. Конечно, вы можете предоставить все разрешения одновременно, но этот подход неверен, особенно в тех случаях, когда вы создаете бота для массового пользователя.
- После установки разрешений скопируйте ссылку для первой авторизации бота на сервер, иначе вы еще не сможете ее добавить.
- Перейдите по этой ссылке и выберите тестовый сервер, на котором вы хотите проверить бота.
- Подтвердите капчу и дождитесь появления информации об авторизации.
Теперь у вас есть приложение-бот с уникальным токеном, и бот уже был добавлен на сервер, но все еще не в сети. Чтобы начать его работу, вам нужно будет выполнить еще несколько действий уже на локальном компьютере, так как мы еще не загружаем бота на хостинг для автономной работы.
Шаг 2: Подготовительные действия
Подготовительные задачи включают создание необходимых каталогов и файлов, установку для них инструментов и зависимостей. В этом нет ничего сложного, вам просто нужно выполнять каждое действие по очереди, внимательно следя за тем, чтобы ни на одном этапе не появлялись ошибки.
- Создайте папку с именем бота. Вы можете выбрать любое местоположение, но лучше всего для этого подходит домашняя папка пользователя.
- Создайте в нем два файла: «config.json» и «index.js». В первом запишем общую конфигурацию бота — его префикс и уникальный токен, а во втором — весь программный код с общими командами и действиями этого инструмента.
- Для работы бота требуется Node.js. Этот инструмент предназначен для запуска сценариев на локальном компьютере. Перейдите по ссылке ниже и загрузите его установщик для Windows.
- Дождитесь завершения загрузки исполняемого файла, запустите его и следуйте простой процедуре установки, следуя инструкциям на экране.
- Далее откройте «Командную строку» удобным для вас способом, например, введя cmd в утилите «Выполнить» (запускается комбинацией клавиш Win + R).
- Установите модуль для работы с Discord API под названием «discord.js». Для этого в открывшемся окне консоли введите npm install discord.js ffmpeg-binaries opusscript ytdl-core —save и нажмите Enter — это сразу добавит все необходимые зависимости.
- Подождите, пока на экране не появится уведомление об установке, не закрывая текущее окно консоли. Если появляются ошибки, изучите их код и воспользуйтесь поисковой системой, чтобы найти рабочее решение на форумах или официальном сайте.
В результате файлы, связанные с компонентом Node.js и добавленные после модуля, должны появиться в домашней папке пользователя. Перезагрузите компьютер, чтобы не было проблем при запуске бота позже, и переходите к следующему шагу.
Шаг 3: Редактирование файла конфигурации бота
Вы уже знаете, что сгенерированный файл конфигурации бота будет содержать только пару строк кода, отвечающих за используемый префикс (символ перед вводом команды на сервере) и уникальный токен, который идентифицирует приложение в API. Для выполнения всех дальнейших действий мы рекомендуем вам скачать программу с поддержкой синтаксиса JS или любой расширенный текстовый редактор, если это не было сделано ранее. В статье по ссылке ниже вы можете ознакомиться с доступными подходящими решениями.
Как только программное обеспечение установлено на вашем компьютере и готово к работе, вы можете спокойно приступить к редактированию файла конфигурации, введя данные пользователя.
- Запустите файл config.js в текстовом редакторе или в среде разработки, вставьте туда следующий код.
{
«префикс»: «!»,
«токен»: «твой токен»
}Поменяйте префикс в кавычках на нужный или оставьте восклицательный знак. Пример команды, использующей этот символ, выглядит так: Играть.
- Зайдите на страницу своего бота на портале разработки, найдите там уникальный токен и скопируйте его.
- Введите вместо, не удаляя двойные кавычки, your-toke.
- Сохраните изменения и закройте этот файл. Кстати, то же действие вы можете выполнить через стандартный «Блокнот».
На этом действия с файлом конфигурации завершены, вам больше не нужно писать там ни одной строчки кода. Закройте его, не забудьте сохранить изменения и приступить к написанию бота для воспроизведения музыки.
Шаг 4: Пробный запуск бота
Во-первых, нам нужно убедиться, что бот обычно запускается на сервере и выходит в онлайн, для этого нам нужно написать его основную часть кода в index.js, а затем использовать Node.js для его запуска.
- Откройте указанный файл для редактирования в среде разработки или в выбранном текстовом редакторе.
- Введите туда блок кода, отвечающий за установку зависимостей, и укажите используемые модули:
const Discord = require (‘discord.js’);
стоимость {
префикс,
жетон
} = требуется (‘./config.json’);
const ytdl = require (‘ytdl-core’); - Используя ранее указанный токен, создайте клиента и войдите в систему, для чего нужно ввести всего две простые строки:
const client = новый Discord.Client();
client.login (токен); - Осталось только указать последние фундаментальные строчки для прослушивания бота.
client.once (‘готово’, () => {
console.log («Готово!’);
});
client.once (‘reconnect’, () => {
console.log («Переподключитесь!’);
});
client.once (‘отключиться’, () => {
console.log («Выйти!’);
}); - Разверните меню «Файл» и сохраните изменения.
- Перезагрузите консоль удобным способом.
- Введите командный узел index.js, чтобы запустить сценарий бота.
- Если его файлы не находятся в домашнем каталоге пользователя, после узла вам нужно будет указать им полный let.
- Об успешном запуске бота свидетельствует сообщение «Готово!» что появляется!».
- Откройте Discord и убедитесь, что бот онлайн».
Шаг 5: Написание основного кода музыкального бота
Остается самый сложный процесс: написание основного кода для музыкального бота. Есть список задач, которые он должен выполнить: чтение сообщений и обработка команд, определение названия песни или ее адреса, подключение к голосовому каналу и воспроизведение. У бота есть разрешения на все это, поэтому вам просто нужно указать действия, используя функции JavaScript, которые выполняются в том же файле index.js».
Добавьте простую функцию для чтения сообщений:
client.on (‘сообщение’, асинхронное сообщение => {
}
Он состоит всего из двух строк, но позволит боту принять запрос пользователя и правильно его обработать. Можно сказать, что это одна из самых важных команд для всех видов ботов. Убедитесь, что вы добавили сообщения игнорирования от других ботов, введя
если (message.author.bot) возвращается;
Это позволяет избежать конфликтов при одновременном использовании нескольких ботов на сервере. Далее нужно проверить префикс, чтобы бот принял команду или вернул ее.
если (! message.content.startsWith (префикс)) return;
Проверка запущенных команд выполняется с помощью простых операторов if, а конструкция в нашем случае выглядит так:
const serverQueue = queue.get (message.guild.id);
if (message.content.startsWith (`$ {prefix} play`)) {
выполнить (сообщение, serverQueue);
возвращение;
} else if (message.content.startsWith (`$ {prefix} skip`)) {
пропустить (сообщение, serverQueue);
возвращение;
} else if (message.content.startsWith (`$ {prefix} stop`)) {
стоп (сообщение, serverQueue);
возвращение;
} Другой {
message.channel.send («Вы должны использовать существующую команду!’)
}
Обратите внимание, что функция send (») отправляет сообщение пользователю, если он вводит неверную команду. Вы можете изменить это сообщение, изменив текст в кавычках.
Теперь бот научился принимать команды, но пока не может с ними взаимодействовать, так как не указано никаких действий. В первую добавляем команду play, которая отвечает за воспроизведение. Для этого требуется массив, подобный этому:
const queue = новая карта();
Отправляйте все команды в очередь и воспроизводите песни только в конце предыдущей. Затем вам нужно создать функцию, которая будет проверять, подключился ли пользователь к голосовому каналу и имеет ли бот соответствующие разрешения.
выполнение асинхронной функции (сообщение, 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 (‘ПОДКЛЮЧИТЬ’) ||! permissions.has (‘РАЗГОВОР’)) {
return message.channel.send («Мне нужно разрешение, чтобы присоединиться и говорить на вашем голосовом канале!’);
}
}
Следующим шагом является подключение библиотеки ytdl, так как этот бот прочитает название песни из ссылки YouTube, а затем воспроизведет ее на сервере. Для этого вам просто нужно ввести небольшой фрагмент кода.
const songInfo = ждать ytdl.getInfo (args [1]);
const song = {
название: songInfo.title,
url: songInfo.video_url,
};
Следующий блок кода позволит вам выяснить, есть ли песни в очереди или вы можете сразу подключиться к вокальному каналу и начать воспроизведение.
if (! serverQueue) {
} Другой {
serverQueue.songs.push (песня);
console.log (serverQueue.songs);
return message.channel.send (`$ {song.title} добавлен в очередь!`);
}
Далее идет схема контракта, немного сложная для начинающих программистов, которая добавляет песню в массив и делает то же самое каждый раз, когда вы входите в систему! Играйте, проверяйте очередь и выбирайте правильное действие. Обратите внимание на предоставленные комментарии, которые позволяют разобраться во всех тонкостях.
// Создаем контракт для очереди
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
соединение: ничего,
песни: ,
объем: 5,
играет: правда,
};
// Настраиваем очередь, используя наш контракт
queue.set (message.guild.id, queueContruct);
// Вставляем песню в нашу серию песен
queueContruct.songs.push (песня);
пытаться {
// Здесь мы пытаемся подключиться к голосовому чату и сохранить связь в теме
var connection = ждать voiceChannel.join();
queueContruct.connection = соединение;
// Вызов функции воспроизведения, чтобы начать песню
играть (message.guild, queueContruct.songs [0]);
} take (err) {
// Отображаем сообщение об ошибке, если бот не может участвовать в голосовом чате
console.log (ошибка);
coda.delete (message.guild.id);
вернуть message.channel.send (ошибка);
}
С очередью все понятно, но песни пока не проигрываются, так как нет назначения на функцию воспроизведения. Для этого нужно добавить в код структуру
функция воспроизведения (гильдия, песня) {
const serverQueue = queue.get (guild.id);
if (! song) {
serverQueue.voiceChannel.leave();
coda.delete (guild.id);
возвращение;
}
}
Воспроизведение начинается с функции playStream () и указанной ссылки на дорожку.
const диспетчер = serverQueue.connection.playStream (ytdl (song.url))
.on (‘конец’, () => {
console.log («Музыка окончена!’);
// Удаляем готовую песню из очереди
serverQueue.songs.shift();
// Вызов функции воспроизведения со следующей дорожкой
играть (гильдия, serverQueue.songs [0]);
})
.on (‘ошибка’, error => {
console.error (ошибка);
});
dispatcher.setVolumeLogarithmic (serverQueue.volume / 5);
Если вы хотите добавить функцию для пропуска песен, например, когда вы решите воспроизвести список воспроизведения, сначала позаботьтесь о соответствующей команде, а затем добавьте такой фрагмент:
функция пропуска (сообщение, serverQueue) {
if (! message.member.voiceChannel) return message.channel.send (‘Вы должны быть в голосовом канале, чтобы остановить музыку!’);
if (! serverQueue) return message.channel.send (‘Нет песни, которую я мог бы пропустить!’);
serverQueue.connection.dispatcher.end();
}
Функция остановки работает примерно так же, но блокировка с помощью кода выглядит несколько иначе:
остановка функции (сообщение, serverQueue) {
если (! message.member.voiceChannel) return message.channel.send(‘
Вы должны быть в голосовом канале, чтобы остановить музыку!’);
serverQueue.songs = ;
serverQueue.connection.dispatcher.end();
}
Обратите внимание, что информация, представленная выше, подходит только для тех пользователей, которые уже знакомы с JavaScript или только изучают его и решили создать музыкального бота. Если у вас совсем нет навыков и блоки, указанные в коде, вам вообще ничего не говорят, просто вставьте весь исходный код в файл, замените сообщения бота на русские (они в кавычках) и сохраните изменения. Весь исходный код выглядит так:
const Discord = require (‘discord.js’);
стоимость {
префикс,
жетон
} = требуется (‘./config.json’);
const ytdl = require (‘ytdl-core’);
const client = новый Discord.Client();
const queue = новая карта();
client.once (‘готово’, () => {
console.log («Готово!’);
});
client.once (‘reconnect’, () => {
console.log («Переподключитесь!’);
});
client.once (‘отключиться’, () => {
console.log («Выйти!’);
});
client.on (‘сообщение’, асинхронное сообщение => {
если (message.author.bot) возвращается;
если (! message.content.startsWith (префикс)) return;
const serverQueue = queue.get (message.guild.id);
if (message.content.startsWith (`$ {prefix} play`)) {
выполнить (сообщение, serverQueue);
возвращение;
} else if (message.content.startsWith (`$ {prefix} skip`)) {
пропустить (сообщение, serverQueue);
возвращение;
} else if (message.content.startsWith (`$ {prefix} stop`)) {
стоп (сообщение, serverQueue);
возвращение;
} Другой {
message.channel.send («Вы должны ввести правильную команду!’)
}
});
выполнение асинхронной функции (сообщение, 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 (‘ПОДКЛЮЧИТЬ’) ||! permissions.has (‘РАЗГОВОР’)) {
return message.channel.send («Мне нужно разрешение, чтобы войти в ваш голосовой канал и говорить по нему!’);
}
const songInfo = ждать ytdl.getInfo (args [1]);
const song = {
название: songInfo.title,
url: songInfo.video_url,
};
if (! serverQueue) {
const queueContruct = {
textChannel: message.channel,
voiceChannel: voiceChannel,
соединение: ничего,
песни: ,
объем: 5,
играет: правда,
};
queue.set (message.guild.id, queueContruct);
queueContruct.songs.push (песня);
пытаться {
var connection = ждать voiceChannel.join();
queueContruct.connection = соединение;
играть (message.guild, queueContruct.songs [0]);
} take (err) {
console.log (ошибка);
coda.delete (message.guild.id);
вернуть message.channel.send (ошибка);
}
} Другой {
serverQueue.songs.push (песня);
console.log (serverQueue.songs);
return message.channel.send (`$ {song.title} добавлен в очередь!`);
}
}
функция пропуска (сообщение, serverQueue) {
if (! message.member.voiceChannel) return message.channel.send (‘Вы должны быть в голосовом канале, чтобы остановить музыку!’);
if (! serverQueue) return message.channel.send (‘Нет песни, которую я мог бы пропустить!’);
serverQueue.connection.dispatcher.end();
}
остановка функции (сообщение, serverQueue) {
if (! message.member.voiceChannel) return message.channel.send (‘Вы должны быть в голосовом канале, чтобы остановить музыку!’);
serverQueue.songs = ;
serverQueue.connection.dispatcher.end();
}
функция воспроизведения (гильдия, песня) {
const serverQueue = queue.get (guild.id);
if (! song) {
serverQueue.voiceChannel.leave();
coda.delete (guild.id);
возвращение;
}
const диспетчер = serverQueue.connection.playStream (ytdl (song.url))
.on (‘конец’, () => {
console.log («Музыка окончена!’);
serverQueue.songs.shift();
играть (гильдия, serverQueue.songs [0]);
})
.on (‘ошибка’, error => {
console.error (ошибка);
});
dispatcher.setVolumeLogarithmic (serverQueue.volume / 5);
}
client.login (токен);
По завершении лучше всего перезапустить бота, после чего вы можете перейти на свой сервер, подключиться к голосовому каналу и ввести любые команды взаимодействия, проверяя, как бот на это отреагирует.
Если вариант с ботом вам не подходит, вы можете найти исходные коды на том же GitHub и скопировать их на свой компьютер. Принцип регистрации и запуска остается прежним, поэтому при необходимости просто модифицируйте готовый код и затем приступайте к тестированию бота.
В этой статье мы не говорили о загрузке бота на хостинг, распространении его среди других пользователей, создании аватара и использовании открытых сайтов, с которых вы можете его авторизовать. Все это отдельные процессы, которые стоит выполнять только в том случае, если вы отточили свои навыки создания ботов и готовы развертывать проекты в Интернете.