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

Как создать музыкального бота в 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?

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

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.
  • Вопрос задан более двух лет назад
  • 9579 просмотров

Создание музыкального бота с помощью 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 и создании с его помощью простого бота.

Музыкальные боты для Дискорда

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

Виды и особенности

Музыкальный бот для Discord — специальное дополнение, которое устанавливается на один из серверов Дискорд и открывает доступ к прослушиванию музыки с разных ресурсов. Сегодня в распоряжении пользователей несколько вариантов помощников, которые можно добавить на сервер. Для удобства сведем их функции, плюсы и минусы в таблицу.

Название Функции Плюсы Минусы
Rythm Автоматическое воспроизведение.

Поиск результатов на YouTube.

Возможность изменения серверного префикса.

Поддержка плейлистов на Ютуб.

Отображение текста песни.

Черный и белый списки.

Отсутствие премиум версии.

Быстрое перемешивание плейлиста.

Обновление списка воспроизведения.

Создание разрешений на больших серверах.

Поиск Ютуб из чата.

Не нужно настраивать. Можно сразу добавить и пользоваться.

Минимальные потери качества.

Открытый исходный код.

Нет дополнительных функций (кроме музыки).

Больше подходит для небольших серверов Дискорд.

Аудио-эффекты с контролем басов и режима работы.

Большой объем сервера.

Поддержка многих сайтов

Добавление аудио-эффектов, контроля громкости и сохранения очереди только после оплаты.

Просмотр Ютуб в прямом эфире.

Быстрая установка на Дискорд.

Возможность трансляции звука в течение всего дня.

Высокое качество звука.

Кроме рассмотренных выше, можно добавить и других помощников — Tony Bamanaboni, ErisBot, ZandrCraft и другие. Много вопросов касается того, какие бывают боты на русском языке. Большинство из них имеют англоязычный интерфейс, но это не создает трудностей с управлением, ведь для этого используются специальные команды.

Как установить

Много вопросов касается того, как добавить бота с музыкой в Дискорде. Вне зависимости от типа помощника его можно пригласить по следующему алгоритму:

  1. Перейдите на официальный сайт бота с музыкой для Дискорд.

  1. Найдите кнопку добавления и жмите на нее.
  2. Выберите сервер, куда необходимо поставить бота.

  1. Задайте опции, которые будут доступны Дискорд-боту.
  2. Жмите на кнопку Авторизовать.

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

Как пользоваться

Многие после установки не могут разобраться, как включить музыку через бота, и как вообще пользоваться такими утилитами. Во всех случаях управление осуществляется с помощью команд, которые вбиваются в чат. К примеру, в Groovy для использования можно использовать следующие сообщения:

  • -play [link or search query] — играть музыку, добавить в плейлист;
  • -queue — информация о списке;
  • -next — переход к следующей песне;
  • -play file — играть файл из сообщения;
  • -join — фиксация бота на голосовом канале;
  • -clear — очистка трека из списка и т. д.

Точная информация о боте с музыкой в Дискорд (как добавить, команды, функции, стоимость) описаны на официальных сайтах. Именно с них необходимо начинать изучение.

Итоги

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

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

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

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar