Как сделать бота музыки в дискорде
Перейти к содержимому

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

  • автор:

Музыкальный бот для 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.
  • Вопрос задан более двух лет назад
  • 9527 просмотров

Создание Discord-бота, используя библиотеку discord.js | Часть №1

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

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

Начало работы

Если вы уже знакомы с приведёнными ниже материалами, — смело можете пролистать этот раздел.

Установка среды разработки

Для начала работы с кодом нам нужно установить среду разработки, это может быть:

Среда разработки выбирается по удобству использования и практичности, она у вас может быть любая, но мы рассмотрим её на примере Visual Studio Code, так как она является одной из самых приемлемых для новичков, а также для опытных программистов.

Для установки переходим по этой ссылке.

Выбираем свою операционную систему и запускаем скачивание.

Установка среды выполнения

Для создания бота мы используем среду выполнения node.js. Для её установки нам необходимо перейти на этот сайт.

На данный момент нас интересует версия долгосрочной поддержки (LTS), скачиваем её.

Установка полезных расширений

В Visual Studio Code присутствует возможность устанавливать расширения.
Для этого, кликните по отмеченной ниже иконке.

В открывшемся окне вписываем название название/идентификатор нужного нам расширения, после чего устанавливаем его.

Из полезных расширений могу отметить:

    Discord Presence — расширение, позволяющее отображать рабочую область и файл, в котором вы работаете в вашей игровой активности (функция работает только при использовании приложения Discord).

Идентификатор расширения: icrawl.discord-vscode

  • Code runner — расширение, с помощью которого предоставляется возможность запускать определённые фрагменты кода.
    Идентификатор расширения: formulahendry.code-runner
  • Создание бота

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

    Здесь всё просто. Переходим на портал разработчиков и нажимаем на кнопку с надписью «New Application» — она находится в правом верхнем углу.

    В открывшемся окне вписываем имя бота, после чего, нажимаем на кнопку с надписью «Create».

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

    Теперь наша задача — воплотить бота в жизнь. Для этого переходим во вкладку «Bot».

    Нажимаем на кнопку с надписью «Add Bot» и воплощаем бота в жизнь.

    Поздравляю! Вы создали аккаунт для вашего бота. Теперь у него есть тег, токен, ник и иконка.

    Подготовка к написанию кода

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

    Первым делом создаём папку, после чего открываем её в VS Code (Файл > Открыть папку) / (Ctrl + K Ctrl + O)

    Далее нам нужно открыть терминал (Терминал > Создать терминал) / (Ctrl + Shift + `)

    Теперь мы должны создать файл с неким «описанием» нашего бота, сделаем это через терминал.

    Вписываем данную строку в терминал и нажимаем Enter:

    npm init

    После каждой появившейся строки нажимаем Enter или вписываем свои значения.
    Значения в этом файле можно будет изменить в любой момент.

    Далее, мы должны поочерёдно вводить в терминал эти строки:

    npm install
    npm install discord.js

    «Install» также можно сокращать в «I», но необязательно.

    Итого, если вы следовали инструкциям и всё сделали правильно, в вашей папке должны были появиться 3 объекта:

    Написание кода

    Об удобстве написания кода

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

    Существует множество вариантов для его написания: используя один файл, два, несколько, и т.д

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

    Но не волнуйтесь, весь код вам писать не придётся.

    О хранении данных

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

    Мы можем сделать это двумя способами:

    1. Создать отдельный файл
    2. Записать всё в константы

    Разберём хранение параметров в отдельном файле.

    Итак, создаем файл config.json

    Вставляем в него следующий код:

    * Для получения токена зайдите на портал разработчиков, перейдите во вкладку «Bot» и скопируйте его.

    * Самым распространённым среди разработчиков префиксом является !

    Далее нам нужно создать файл bot.js и вставить в него данный код:

    const Discord = require('discord.js'); // Подключаем библиотеку discord.js const robot = new Discord.Client(); // Объявляем, что robot - бот const comms = require("./comms.js"); // Подключаем файл с командами для бота const fs = require('fs'); // Подключаем родной модуль файловой системы node.js let config = require('./config.json'); // Подключаем файл с параметрами и информацией let token = config.token; // «Вытаскиваем» из него токен let prefix = config.prefix; // «Вытаскиваем» из него префикс robot.on("ready", function() < /* При успешном запуске, в консоли появится сообщение «[Имя бота] запустился!» */ console.log(robot.user.username + " запустился!"); >); robot.on('message', (msg) => < // Реагирование на сообщения if (msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator) < var comm = msg.content.trim() + " "; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for (comm_count in comms.comms) < var comm2 = prefix + comms.comms[comm_count].name; if (comm2 == comm_name) < comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token); // Авторизация бота 

    Теперь создаём файл comms.js, в нём будут сами команды.

    В нём должен быть следующий код:

    const config = require('./config.json'); // Подключаем файл с параметрами и информацией const Discord = require('discord.js'); // Подключаем библиотеку discord.js const prefix = config.prefix; // «Вытаскиваем» префикс // Команды // function test(robot, mess, args) < mess.channel.send('Test!') >// Список команд // var comms_list = [< name: "test", out: test, about: "Тестовая команда" >]; // Name - название команды, на которую будет реагировать бот // Out - название функции с командой // About - описание команды module.exports.comms = comms_list; 

    Чтобы добавить больше команд — просто объявляйте больше функций и добавляйте их в список, например:

    const config = require('./config.json'); const Discord = require('discord.js'); const prefix = config.prefix; const versions = config.versions; // Команды // function test(robot, mess, args) < mess.channel.send("Тест!") >function hello(robot, mess, args) < mess.reply("Привет!") >// Список комманд // var comms_list = [< name: "test", out: test, about: "Тестовая команда" >, < name: "hello", out: hello, about: "Команда для приветствия!" >> module.exports.comms = comms_list; 

    И вот, мы вышли на финишную прямую!

    Осталось всего ничего — запустить бота.

    Для этого открываем терминал и вставляем в него следующую строку:

    node bot.js

    Готово! Бот запущен и вы можете им пользоваться, ура!

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

    Перейдём во вкладку OAuth2, пролистаем чуть ниже, выберем «Bot» и отметим нужные боту привилегии.

    Теперь осталось скопировать ссылку-приглашение и добавить бота на свой сервер.

    Как вывести ссылку-приглашение в терминал, при запуске бота?

    Существует два способа:

      Заранее отметить нужные привилегии.

    Для этого, сначала мы должны скопировать ссылку-приглашение.
    После чего перейти в файл bot.js и вставить данную строчку кода сюда:

     robot.on("ready", function()< console.log(robot.user.username + " запустился!"); console.log("Ссылка-приглашение") // ) 

    Итоговый код должен быть таким:

     const Discord = require('discord.js'); const robot = new Discord.Client(); var comms = require("./comms.js"); const fs = require('fs'); let config = require('./config.json'); let token = config.token; let prefix = config.prefix; robot.on("ready", function()< console.log(robot.user.username + " запустился!"); console.log("Ссылка-приглашение") >) robot.on('message', (msg) => < if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator)< var comm = msg.content.trim()+" "; var ok = false; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for(comm_count in comms.comms)< var comm2 = prefix + comms.comms[comm_count].name; if(comm2 == comm_name)< comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token) robot.login(token); 
     robot.on("ready", function() < console.log(robot.user.username + " запустился!"); robot.generateInvite(["ADMINISTRATOR"]).then((link) =>< // < // console.log(link); // < // >)>) 
     const Discord = require('discord.js'); const robot = new Discord.Client(); var comms = require("./comms.js"); const fs = require('fs'); let config = require('./config.json'); let token = config.token; let prefix = config.prefix; robot.on("ready", function() < console.log(robot.user.username + " запустился!"); robot.generateInvite(["ADMINISTRATOR"]).then((link) =>< console.log(link); >)>) robot.on('message', (msg) => < if(msg.author.username != robot.user.username && msg.author.discriminator != robot.user.discriminator)< var comm = msg.content.trim()+" "; var ok = false; var comm_name = comm.slice(0, comm.indexOf(" ")); var messArr = comm.split(" "); for(comm_count in comms.comms)< var comm2 = prefix + comms.comms[comm_count].name; if(comm2 == comm_name)< comms.comms[comm_count].out(robot, msg, messArr); >> > >); robot.login(token); 

    Чтобы указать несколько привилегий, мы должны перечислить их в квадратных скобках, через запятую:

     robot.generateInvite(['KICK_MEMBERS', 'BAN_MEMBERS', 'SEND_MESSAGES']).then((link) => < console.log(link); 

    * Все привилегии указываются заглавными буквами

    Список доступных привилегий:

    ADMINISTRATOR
    CREATE_INSTANT_INVITE
    KICK_MEMBERS
    BAN_MEMBERS
    MANAGE_CHANNELS
    MANAGE_GUILD
    ADD_REACTIONS
    VIEW_AUDIT_LOG
    PRIORITY_SPEAKER
    STREAM
    VIEW_CHANNEL
    SEND_MESSAGES
    SEND_TTS_MESSAGES
    MANAGE_MESSAGES
    EMBED_LINKS
    ATTACH_FILES
    READ_MESSAGE_HISTORY
    MENTION_EVERYONE
    USE_EXTERNAL_EMOJIS
    VIEW_GUILD_INSIGHTS
    CONNECT
    SPEAK
    MUTE_MEMBERS
    DEAFEN_MEMBERS
    MOVE_MEMBERS
    USE_VAD
    CHANGE_NICKNAME
    MANAGE_NICKNAMES
    MANAGE_ROLES
    MANAGE_WEBHOOKS
    MANAGE_EMOJIS

    Полезные и интересные команды

    В предыдущем разделе я показал вам, как запустить бота и как писать для него команды.
    Теперь я хочу поделиться с вами несколькими своими командами.

      !say — с помощью этой команды бот может повторить ваше сообщение.

    if (!mess.member.hasPermission("MANAGE_MESSAGES")) return mess.channel.send("У вас нет прав"); /* Если у исполнителя команды нету привилегии MANGAGE_MESSAGES, он не сможет её использовать */ args = mess.content.split(' '); args.shift(); args = args.join(' '); mess.delete().catch(); // Удаление сообщения пользователя после отправки mess.channel.send(args) 
    mess.channel.send('Монета подбрасывается. ') var random = Math.floor(Math.random() * 4) + 1; // Объявление переменной random - она вычисляет случайное число от 1 до 3 if (random === 1) < // Если вычислено число 1, то выпадает орёл. mess.channel.send(':full_moon: Орёл!') >else if (random === 2) < // Если вычислено число 2, то выпадает решка. mess.channel.send(':new_moon: Решка!') >else if (random === 3) < // Если вычислено число 3, то монета падает ребром. mess.channel.send(':last_quarter_moon: Монета упала ребром!') >
    const arggs = mess.content.split(' ').slice(1); // Все аргументы за именем команды с префиксом const amount = arggs.join(' '); // Количество сообщений, которые должны быть удалены if (!amount) return mess.channel.send('Вы не указали, сколько сообщений нужно удалить!'); // Проверка, задан ли параметр количества if (isNaN(amount)) return mess.channel.send('Это не число!'); // Проверка, является ли числом ввод пользователя if (amount > 100) return mess.channel.send('Вы не можете удалить 100 сообщений за раз'); // Проверка, является ли ввод пользователя числом больше 100 if (amount < 1) return mess.channel.send('Вы должны ввести число больше чем 1'); // Проверка, является ли ввод пользователя числом меньше 1 async function delete_messages() < // Объявление асинхронной функции await mess.channel.messages.fetch(< limit: amount >).then(messages => < mess.channel.bulkDelete(messages) mess.channel.send(`Удалено $сообщений!`) >) >; delete_messages(); // Вызов асинхронной функции 

    Не стоит пугаться большого кода, здесь всё предельно просто.

    var name = [ // Объявление массива name и занесение в него большого количества имён 'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин', ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон', ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан', ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким', ' Алан', ' Алей', ' Александр', ' Алексей', ' Али', ' Альберт', ' Альфред', ' Амадей', ' Амадеус', ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий', ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей', ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх', ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен', ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард', ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав', ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер', ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон', ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл', ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон', ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав', ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр', ' Дарий', ' Дементий', ' Демид', ' Демосфен', ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня', ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат', ' Муслим', ' Назар', 'Абрам', ' Аваз', ' Аввакум', ' Август', ' Августин', ' Авдей', ' Авраам', ' Автандил', ' Агап', ' Агафон', ' Аггей', ' Адам', ' Адис', ' Адольф', ' Адриан', ' Азамат', ' Айдар', ' Айнур', ' Айрат', ' Аким', ' Алан', ' Алей', ' Александр', ' Алексей', ' Али', ' Альберт', ' Альфред', ' Амадей', ' Амадеус', ' Амаяк', ' Амвросий', ' Ананий', ' Анастасий', ' Анатолий', ' Анвар', ' Ангел', ' Андоим', ' Андрей', ' Аникита', ' Антон', ' Арам', ' Арий', ' Аристарх', ' Аркадий', ' Арман', ' Арно', ' Арнольд', ' Арон', ' Арсен', ' Арсений', ' Арслан', ' Артем', ' Артемий', ' Артур', ' Архип', ' Аскар', ' Аскольд', ' Аслан', ' Афанасий', ' Ахмет', ' Ашот', ' Бальтазар', ' Бежен', ' Бенедикт', ' Берек', ' Бернард', ' Бертран', ' Богдан', ' Болеслав', ' Борис', ' Бронислав', ' Булат', ' Вадим', ' Валентин', ' Валерий', ' Вальтер', ' Варфоломей', ' Василий', ' Вацлав', ' Велизар', ' Венедикт', ' Вениамин', ' Викентий', ' Виктор', ' Вилли', ' Вильгельм', ' Виссарион', ' Виталий', ' Витольд', ' Владимир', ' Владислав', ' Владлен', ' Володар', ' Вольдемар', ' Всеволод', ' Вячеслав', ' Гавриил', ' Галактион', ' Гарри', ' Гастон', ' Гаяс', ' Гевор', ' Геннадий', ' Генрих', ' Георгий', ' Геракл', ' Геральд', ' Герасим', ' Герман', ' Глеб', ' Гордей', ' Гордон', ' Горислав', ' Градимир', ' Григорий', ' Гурий', ' Густав', ' Давид', ' Дамир', ' Даниил', ' Даниэль', ' Данияр', ' Дарий', ' Дементий', ' Демид', ' Демосфен', ' Демьян', ' Денис', ' Джамал', ' Джордан', ' Дмитрий', ' Добрыня', ' Дональд', ' Донат', ' Дорофей', ' Евгений', ' Евграф', ' Евдоким', ' Евсевий', ' Евсей', ' Евстафий', ' Егор', ' Елеазар', ' Елисей', ' Емельян', ' Еремей', ' Ермолай', ' Ерофей', ' Ефим', ' Ефрем', ' Жан', ' Ждан', ' Жорж', ' Захар', ' Зиновий', ' Ибрагим', ' Иван', ' Игнатий', ' Игорь', ' Илларион', ' Ильдар', ' Ильнар', ' Ильнур', ' Илья', ' Ильяс', ' Иннокентий', ' Иоанн', ' Иосиф', ' Ипполит', ' Искандер', ' Ислам', ' Камиль', ' Карим', ' Карл', ' Кирилл', ' Клим', ' Кондрат', ' Константин', ' Корней', ' Кузьма', ' Лавр', ' Лаврентий', ' Лев', ' Леон', ' Леонид', ' Леонтий', ' Леопольд', ' Лука', ' Лукьян', ' Любим', ' Макар', ' Максим', ' Максимилиан', ' Марат', ' Марк', ' Марсель', ' Мартин', ' Матвей', ' Мирон', ' Мирослав', ' Митрофан', ' Михаил', ' Михей', ' Мишель', ' Мстислав', ' Мурат', ' Муслим', ' Назар' ]; var RandElement = name[Math.floor(Math.random() * (name.length))]; // Выбор случайного элемента из массива mess.channel.send(RandElement) // Отправка сообщения со случайным элементом из массива в чат 

    Заключение

    Вот и подошла к концу первая часть обучения, как вы могли заметить, создать бота, используя библиотеку discord.js очень просто.

    Итого, из этой статьи мы выяснили:

    • Как установить нужные модули и пакеты
    • Как установить среду разработки
    • Как установить среду выполнения
    • Как установить полезные расширения
    • Как создать аккаунт для бота
    • Как воплотить бота в жизнь
    • Как запустить бота
    • Как научить бота реагировать на команды
    • Как пригласить бота на свой сервер
    • Как писать код для работы команд

    Надеюсь, что вам понравилась моя статья и вы узнали из неё что-то новое.

    Сайты для самостоятельного изучения

    • Основная документация discord.js
    • Документация discord.js №2
    • Руководство discord.js
    • Руководство discord.js №2

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

    Пользователи мессенджера часто спрашивают, как в Дискорде добавить бота с музыкой, и в чем особенности таких программ. Ниже рассмотрим несколько вариантов, поговорим о том, как их установить на сервер 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 не будет опубликован. Обязательные поля помечены *