Перейти к содержимому

Как создать музыкального бота в discord

  • автор:

Музыкальный бот для Discord на Python

Написал музыкального бота, который при команде -play (link) входит в голосовой канал, но не включает музыку, а выдает ошибку Код:

import discord from discord.ext import commands import pafy import logging import youtube_dl logging.basicConfig(filename='bot.log', level=logging.INFO) TOKEN = 'token' PREFIX = '-' intents = discord.Intents.all() intents.members = True bot = commands.Bot(command_prefix=PREFIX, intents=intents) @bot.event async def on_ready(): print(f'Logged in as ') @bot.event async def on_message(message): if message.content.lower() == 'привет': await message.channel.send('Привет!') await bot.process_commands(message) @bot.command() async def play(ctx, url: str): if not ctx.author.voice: return await ctx.send("Вы не подключены к голосовому каналу!") voice_channel = ctx.author.voice.channel if ctx.voice_client is None: vc = await voice_channel.connect() else: await ctx.voice_client.move_to(voice_channel) vc = ctx.voice_client video = pafy.new(url) best = video.getbestaudio() source = await discord.FFmpegOpusAudio.from_probe(best.url, method='fallback') vc.play(source) @bot.command() async def leave(ctx): if ctx.voice_client: await ctx.guild.voice_client.disconnect() else: await ctx.send("Бот не подключен к голосовому каналу.") logging.info('Bot Online') bot.run(TOKEN) 

Ошибка:

ERROR discord.ext.commands.bot Ignoring exception in command play Traceback (most recent call last): File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 815, in wrapper return func(self, *args, **kwargs) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 836, in __extract_info ie_result = ie.extract(url) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\extractor\common.py", line 534, in extract ie_result = self._real_extract(url) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\extractor\youtube.py", line 1794, in _real_extract 'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None, File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\extractor\common.py", line 1012, in _search_regex raise RegexNotFoundError('Unable to extract %s' % _name) youtube_dl.utils.RegexNotFoundError: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "a:\Work\piton\discord3\venv\lib\site-packages\discord\ext\commands\core.py", line 229, in wrapped ret = await coro(*args, **kwargs) File "a:\Work\piton\discord3\main.py", line 37, in play info = ytdl.extract_info(url, download=False) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 808, in extract_info return self.__extract_info(url, ie, download, extra_info, process) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 824, in wrapper self.report_error(compat_str(e), e.format_traceback()) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 628, in report_error self.trouble(error_message, tb) File "a:\Work\piton\discord3\venv\lib\site-packages\youtube_dl\YoutubeDL.py", line 598, in trouble raise DownloadError(message, exc_info) youtube_dl.utils.DownloadError: ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. The above exception was the direct cause of the following exception: Traceback (most recent call last): File "a:\Work\piton\discord3\venv\lib\site-packages\discord\ext\commands\bot.py", line 1350, in invoke await ctx.command.invoke(ctx) File "a:\Work\piton\discord3\venv\lib\site-packages\discord\ext\commands\core.py", line 1023, in invoke await injected(*ctx.args, **ctx.kwargs) # type: ignore File "a:\Work\piton\discord3\venv\lib\site-packages\discord\ext\commands\core.py", line 238, in wrapped raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: DownloadError: ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. 

Как в Discord создать бота для проигрывания музыки

Discord позволяет приглашать на сервера дополнительных автоматизированных помощников. Это различные боты, которые отвечают за определенные направления деятельности. Вы можете найти на специализированный ресурсах готовые решения, и пригласить их к себе на канал. Но есть и другой вариант, позволяющий использовать ресурс мессенджера в полной мере. Расскажем, как сделать бота в Дискорде Онлайн для музыки, который сможет проигрывать, пропускать и останавливать музыку, и будет поддерживать иные функции.

как сделать (создать) бота в дискорде для музык

Как сделать бота в Discord для музыки, и с чего начать

Первое, что вам потребуется – это создание нового приложения. Каждый новый бот обязательно регистрируется на официальном ресурсе разработчиков мессенджера. Благодаря этому вы получите доступ ко всем настройкам при его создании и наделении его правами. Первые шаги будут следующими:

  1. Перейти на официальный сайт по ссылке https://discord.com/developer/application, и авторизуйтесь.
  2. Нажмите на кнопку «New Application» для создания нового приложения.
  3. Придумайте имя вашему приложению (боту). Придется подобрать такое, чтобы оно оказалось уникальным.
  4. В правом верхнем углу нажмите на горизонтальные полоски для вызова меню, и нажмите пункт «Bot».
  5. Нажмите на кнопку «Add Bot», и подтвердите действия кнопкой в окошке справа.
  6. Из меню справа перейдите в пункт с названием «OAuth2».
  7. Выберите блок «Scopes», поставьте маркер рядом с «bot».
  8. В блоке «Voice Permission» проставьте маркеры на всех пунктах, чтобы присоединить будущего музыкального бота к голосовым каналам.
  9. В блоке «Text Permission». Также выставьте разрешения метками напротив нужных пунктов.
  10. Для первой авторизации бота на сервере скопируйте ссылку, которую вы увидите на экране, и перейдите по ней через новую вкладку браузера.
  11. Выберите тестовый сервер, где будете проверять своего бота.
  12. Пройдите капчу, чтобы успешно авторизоваться.

как создать бота в дискорде для музык

Вы создали приложение будущего бота, который имеет уникальный токен. При этом ваш музыкальный помощник уже на сервере, но пока пребывает в оффлайн режиме.

Обратите внимание! Созданный бот сначала неактивен и не наделен правами, однако он уже загружен на сервер и имеет уникальный токен.

как сделать бота в дискорде для музык

Зачем при создании музыкального бота нужен токен

Следующие действия связаны с созданием каталогов и файлов, установки инструментов и зависимостей для них. Если выполнять действия поочередно, то многие из вас справятся с этой задачей. Порядок действий следующий:

  1. На ПК создайте папку с именем бота.
  2. Создайте в ней 2 файла: «config.json», в нем запишите общую конфигурацию (префикс и токен), и «index.js», в ней прописывается весь программный код, и команды с задачами инструмента.
  3. Чтобы робот мог работать потребуется инструмент «Node.js», он применяется для запуска скриптов на локальных ПК.
  4. Установите модуль для работы с API Discord.

как сделать (создать) бота в discord для музык

После выполнения всех действий в вашей папке робота должны появиться новые файлы, которые связаны с компонентами Node.js и добавленным модулем. Выполните перезагрузку ПК, и переходите далее. Теперь вам снова потребуется токен для редактирования файла конфигурации. Для этого выполните следующее:

  1. Запустите файл скрипта js.
  2. Перейдите на вкладку страницы разработчика, где находится ваш бот, и скопируйте уникальный токен.
  3. Вместо надписи, которую вы видите в строке конфигуратора, вставьте его, сохранив имеющиеся кавычки.
  4. Сохраните изменения, и закройте файл.

Исходные коды для работы вы сможете отыскать на GitHub, и скопировать их на свой ПК, Принцип по регистрации и запуску будет единым, так что просто редактируйте имеющийся код, и переходите к тестированию музыкального бота.

Частые вопросы:

  • Как добавить музыкального бота на сервер Дискорд Онлайн
  • Как сделать бота, выдающего роли в Discord
  • Как в Discord включить трансляцию музыки из ВКонтакте
  • Как сделать трансляцию музыки в Discord

Как сделать музыкального бота в Discord?

Сразу извиняюсь, если вопрос глупый, но я не могу понять из-за чего эта ошибка. Сам бот заходит в голосовой канал и подсвечивает, т.е. работает, но ничего не слышно.

60ae95992ec62845244225.png

import asyncio import discord import youtube_dl from discord.ext import commands # Suppress noise about console usage from errors youtube_dl.utils.bug_reports_message = lambda: '' ytdl_format_options = < 'format': 'bestaudio/best', 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s', 'restrictfilenames': True, 'noplaylist': True, 'nocheckcertificate': True, 'ignoreerrors': False, 'logtostderr': False, 'quiet': True, 'no_warnings': True, 'default_search': 'auto', 'source_address': '0.0.0.0' # bind to ipv4 since ipv6 addresses cause issues sometimes >ffmpeg_options = < 'options': '-vn' >ytdl = youtube_dl.YoutubeDL(ytdl_format_options) class YTDLSource(discord.PCMVolumeTransformer): def __init__(self, source, *, data, volume=0.5): super().__init__(source, volume) self.data = data self.title = data.get('title') self.url = data.get('url') @classmethod async def from_url(cls, url, *, loop=None, stream=False): loop = loop or asyncio.get_event_loop() data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream)) if 'entries' in data: # take first item from a playlist data = data['entries'][0] filename = data['url'] if stream else ytdl.prepare_filename(data) return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data) class Music(commands.Cog): def __init__(self, bot): self.bot = bot @commands.command() async def join(self, ctx, *, channel: discord.VoiceChannel): """Joins a voice channel""" if ctx.voice_client is not None: return await ctx.voice_client.move_to(channel) await channel.connect() @commands.command() async def play(self, ctx, *, query): """Plays a file from the local filesystem""" source = discord.PCMVolumeTransformer(discord.FFmpegPCMAudio(query)) ctx.voice_client.play(source, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(query)) @commands.command() async def yt(self, ctx, *, url): """Plays from a url (almost anything youtube_dl supports)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) ctx.voice_client.play(player, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(player.title)) @commands.command() async def stream(self, ctx, *, url): """Streams from a url (same as yt, but doesn't predownload)""" async with ctx.typing(): player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) ctx.voice_client.play(player, after=lambda e: print('Player error: %s' % e) if e else None) await ctx.send('Now playing: <>'.format(player.title)) @commands.command() async def volume(self, ctx, volume: int): """Changes the player's volume""" if ctx.voice_client is None: return await ctx.send("Not connected to a voice channel.") ctx.voice_client.source.volume = volume / 100 await ctx.send("Changed volume to <>%".format(volume)) @commands.command() async def stop(self, ctx): """Stops and disconnects the bot from voice""" await ctx.voice_client.disconnect() @play.before_invoke @yt.before_invoke @stream.before_invoke async def ensure_voice(self, ctx): if ctx.voice_client is None: if ctx.author.voice: await ctx.author.voice.channel.connect() else: await ctx.send("You are not connected to a voice channel.") raise commands.CommandError("Author not connected to a voice channel.") elif ctx.voice_client.is_playing(): ctx.voice_client.stop() def setup(client): client.add_cog(Music(client)) print('Music: activated')
Ignoring exception in command yt: Traceback (most recent call last): File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped ret = await coro(*args, **kwargs) File "C:\Users\volva\Desktop\botTest\cogs\music.py", line 82, in yt player = await YTDLSource.from_url(url, loop=self.bot.loop, stream=True) File "C:\Users\volva\Desktop\botTest\cogs\music.py", line 52, in from_url return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 225, in __init__ super().__init__(source, executable=executable, args=args, **subprocess_kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 138, in __init__ self._process = self._spawn_process(args, **kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 147, in _spawn_process raise ClientException(executable + ' was not found.') from None discord.errors.ClientException: ffmpeg was not found. The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke await ctx.command.invoke(ctx) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke await injected(*ctx.args, **ctx.kwargs) File "C:\Users\volva\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ClientException: ffmpeg was not found.
  • Вопрос задан более двух лет назад
  • 9838 просмотров

Создание музыкального бота с помощью Discord.js

API discord предоставляет инструмент для создания и использования ботов. Рассмотрим пример создания базового музыкального бота и добавления его на сервер. Бот сможет проигрывать, пропускать и останавливать музыку, а также будет поддерживать функцию очереди воспроизведения.

Установка discord-бота

Создаем новое приложение на портале разработки discord.

Переходим на портал и нажимаем на “new application”.

Затем вводим название приложения и нажимаем на кнопку “create”.

Затем переходим на вкладку бот и нажимаем на “add bot”.

Бот создан! Теперь можно перейти к добавлению его на сервер.

Добавление бота на сервер

Добавляем созданный бот с помощью генератора OAuth2 URL.

Для этого переходим на страницу OAuth2 и выбираем бота в панели scope.

Затем выбираем необходимые разрешения для проигрывания музыки и чтения сообщений.

Теперь копируем сгенерированный URL и вставляем его в браузер.

Затем выбираем сервер, на который хотим добавить URL и нажимаем на кнопку “authorize”.

Создание проекта

Переходим к созданию проекта с использованием терминала.

Для начала создаем директорию и переходим в нее, используя две следующие команды:

mkdir musicbot && cd musicbot

Затем создаем модули проекта с помощью команды npm init. После введения команды будут заданы несколько вопросов. Ответьте на них и продолжайте.

Создаем два файла, в которых мы будем работать.

touch index.js && touch config.json

Теперь откройте проект в текстовом редакторе. Я использую VS Code и открываю его с помощью следующей команды:

code.

Основы Discord js

Прежде чем начать, нужно установить несколько зависимостей.

npm install discord.js ffmpeg-binaries opusscript ytdl-core --save

После завершения установки продолжаем написание файла config.json. Сохраните для бота токен и префикс, который он должен слушать.

"prefix": "!",
"token": "your-toke"
>

Для получения токена снова зайдите на портал разработки discord и скопируйте его из раздела bot.

Это все, что нужно выполнить в файле config.json. Приступим к написанию кода javascript.

Сначала импортируем все зависимости.

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

Затем с помощью токена создаем клиента и логин.

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

Добавляем несколько базовых listeners, выполняющих метод console.log при запуске.

client.once('ready', () => console.log('Ready!');
>);
client.once('reconnecting', () => console.log('Reconnecting!');
>);
client.once('disconnect', () => console.log('Disconnect!');
>);

Теперь можно начать работу с ботом с помощью команды node. Бот должен быть online в discord и в консоль выведется“Ready!”

node index.js

Чтение сообщений

Бот находится на сервере и может выходить online. Теперь можно начать читать сообщения в чате и отвечать на них.

Для чтения сообщений нужно написать лишь одну простую функцию.

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

Создаем listener для события message, получаем сообщение и сохраняем его в объект message.

Проверяем: если сообщение пришло от бота, то игнорируем его.

if (message.author.bot) return;

В этой строке проверяется, является ли автором сообщения бот. Сообщение возвращается, если это так.

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

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

После этого проверяем, какую команду нужно запустить. Это можно выполнить с помощью простых операторов if.

const serverQueue = queue.get(message.guild.id);

if (message.content.startsWith(`$play`)) execute(message, serverQueue);
return;
> else if (message.content.startsWith(`$skip`)) skip(message, serverQueue);
return;
> else if (message.content.startsWith(`$stop`)) stop(message, serverQueue);
return;
> else message.channel.send('You need to enter a valid command!')
>

В этом блоке кода проверяется, какую команду нужно запустить, а также осуществляется вызов команды. Если полученная команда недопустима, то вводим сообщение об ошибке в чат с использованием функции send().

Узнав, какие команды нужно запустить, можно перейти к их реализации.

Добавление песен

Начнем с добавления команды play. Для этого понадобится песня и гильдия (гильдия представляет собой изолированную коллекцию пользователей и каналов и часто упоминается в качестве сервера). Также понадобится ранее установленная библиотека ytdl.

Для начала создаем map с названием очереди, в котором будут сохранены все песни, введенные в чат.

const queue = new Map();

Затем создаем функцию async под названием execute и проверяем, находится ли пользователь в голосовом чате, и есть ли у бота соответствующее разрешение. Если нет, то пишем сообщение об ошибке и возвращаем.

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!');
>
>

Переходим к получению информации о песне и сохранении ее в объект song. Для этого используем библиотеку ytdl, которая получает информацию о песне по ссылке на youtube.

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

Необходимая информация сохраняется в объект song.

После сохранения информации нужно создать контракт для добавления в очередь. Для этого проверяем, определен ли serverQueue, что означает, что музыка уже играет. Если да, то добавляем песню в существующий serverQueue и отправляем сообщение об успешном выполнении. Если нет, то создаем его, подключаемся к голосовому каналу и начинаем проигрывать музыку.

if (!serverQueue) 
>else serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`$ has been added to the queue!`);
>

В этом фрагменте мы проверяем, является ли serverQueue пустым. Если нет добавляем туда песню.

Если serverQueue имеет значение null, создаем контракт.

// Creating the contract for our queue
const queueContruct = textChannel: message.channel,
voiceChannel: voiceChannel,
connection: null,
songs: [],
volume: 5,
playing: true,
>;
// Setting the queue using our contract
queue.set(message.guild.id, queueContruct);
// Pushing the song to our songs array
queueContruct.songs.push(song);

try // Here we try to join the voicechat and save our connection into our object.
var connection = await voiceChannel.join();
queueContruct.connection = connection;
// Calling the play function to start a song
play(message.guild, queueContruct.songs[0]);
> catch (err) // Printing the error message if the bot fails to join the voicechat
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
>

В этом блоке кода создается контракт, а песня добавляется в массив songs.

Затем присоединяемся к голосовому чату пользователя и вызываем функцию play(), которую затем реализуем.

Проигрывание песен

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

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

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

Затем начинаем проигрывать песню с помощью функции playStream() и URL-адреса песни.

const dispatcher = serverQueue.connection.playStream(ytdl(song.url)) 
.on('end', () => console.log('Music ended!');
// Deletes the finished song from the queue
serverQueue.songs.shift();
// Calls the play function again with the next song
play(guild, serverQueue.songs[0]);
>)
.on('error', error => console.error(error);
>);
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);

В этом фрагменте мы создаем stream и передаем его URL-адресу песни. Также добавляем два listeners, которые обрабатывают события end и error.

Примечание: это рекурсивная функция, которая повторяет вызов самой себя. Рекурсия используется для проигрывания следующей песни, когда другая заканчивается.

Теперь можно проиграть песню, введя !play URL в чат.

Пропуск песен

Переходим к реализации функции пропуска. Для этого нужно выполнить завершения диспетчера, созданного в функции play() для начала проигрывания следующей песни.

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();
>

В этом фрагменте мы проверяем, находится ли пользователь, который ввел команду, в голосовом канале, а также есть ли песни для пропуска.

Остановка песен

Функция stop() похожа на skip(), за исключением того, что массив songs очищается, из-за чего бот удаляет очередь и покидает голосовой чат.

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();
>

Исходный код для index.js:

Полный исходный код для музыкального бота:

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('Ready!');
>);

client.once('reconnecting', () => console.log('Reconnecting!');
>);

client.once('disconnect', () => console.log('Disconnect!');
>);

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(`$play`)) execute(message, serverQueue);
return;
> else if (message.content.startsWith(`$skip`)) skip(message, serverQueue);
return;
> else if (message.content.startsWith(`$stop`)) stop(message, serverQueue);
return;
> else message.channel.send('You need to enter a valid command!')
>
>);

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(`$ 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);

Заключение

У вас все получилось! Надеюсь, эта статья помогла вам разобраться в API Discord и создании с его помощью простого бота.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *