Музыкальный бот для 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 — специальное дополнение, которое устанавливается на один из серверов Дискорд и открывает доступ к прослушиванию музыки с разных ресурсов. Сегодня в распоряжении пользователей несколько вариантов помощников, которые можно добавить на сервер. Для удобства сведем их функции, плюсы и минусы в таблицу.
| Название | Функции | Плюсы | Минусы |
| Rythm | Автоматическое воспроизведение. |
Поиск результатов на YouTube.
Возможность изменения серверного префикса.
Поддержка плейлистов на Ютуб.
Отображение текста песни.
Черный и белый списки.
Отсутствие премиум версии.
Быстрое перемешивание плейлиста.
Обновление списка воспроизведения.
Создание разрешений на больших серверах.
Поиск Ютуб из чата.
Не нужно настраивать. Можно сразу добавить и пользоваться.
Минимальные потери качества.
Открытый исходный код.
Нет дополнительных функций (кроме музыки).
Больше подходит для небольших серверов Дискорд.
Аудио-эффекты с контролем басов и режима работы.
Большой объем сервера.
Поддержка многих сайтов
Добавление аудио-эффектов, контроля громкости и сохранения очереди только после оплаты.
Просмотр Ютуб в прямом эфире.
Быстрая установка на Дискорд.
Возможность трансляции звука в течение всего дня.
Высокое качество звука.
Кроме рассмотренных выше, можно добавить и других помощников — Tony Bamanaboni, ErisBot, ZandrCraft и другие. Много вопросов касается того, какие бывают боты на русском языке. Большинство из них имеют англоязычный интерфейс, но это не создает трудностей с управлением, ведь для этого используются специальные команды.
Как установить
Много вопросов касается того, как добавить бота с музыкой в Дискорде. Вне зависимости от типа помощника его можно пригласить по следующему алгоритму:
- Перейдите на официальный сайт бота с музыкой для Дискорд.

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

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

После этого можно настроить бота Дискорд для прослушивания музыки, если эта опция предусмотрена.
Как пользоваться
Многие после установки не могут разобраться, как включить музыку через бота, и как вообще пользоваться такими утилитами. Во всех случаях управление осуществляется с помощью команд, которые вбиваются в чат. К примеру, в Groovy для использования можно использовать следующие сообщения:
- -play [link or search query] — играть музыку, добавить в плейлист;
- -queue — информация о списке;
- -next — переход к следующей песне;
- -play file — играть файл из сообщения;
- -join — фиксация бота на голосовом канале;
- -clear — очистка трека из списка и т. д.
Точная информация о боте с музыкой в Дискорд (как добавить, команды, функции, стоимость) описаны на официальных сайтах. Именно с них необходимо начинать изучение.
Итоги
Теперь вы знаете, как добавить помощника с музыкой на Дискорд, и какому варианту отдать предпочтение. Сегодня существует десятки таких Discord-ботов, поэтому перед установкой изучите их возможности, а уже после принимайте решение.
Как сделать музыкального бота в Discord?
Сразу извиняюсь, если вопрос глупый, но я не могу понять из-за чего эта ошибка. Сам бот заходит в голосовой канал и подсвечивает, т.е. работает, но ничего не слышно.

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.
- Вопрос задан более двух лет назад
- 9520 просмотров
Как написать музыкального бота для discord
Если вы хотите установить готового музыкального бота, без лишних проблем и траты времени, то этот гайд специально для вас. Мы объясним на конкретном примере, как поставить на ваш сервер Discord музыкального бота, который будет работать круглые сутки. Разделим наш гайд на этапы, чтобы вам было немного удобнее ориентироваться в тексте.
1 этап – Выбор
На этом этапе нам необходимо выбрать бота на сервер.
Для этого заходим по ссылке: https://www.carbonitex.net/Discord/bots
Во вкладке Info можно узнать полезную информацию о боте, его функционал, возможности и т. д.
Во вкладке Features вы можете посмотреть основные особенности бота, его отличие от остальных.
Во вкладке Usage обычно пишут способ применения бота, его основные команды и подсказки.
Обратите внимание, что нам необходимо выбрать бота с музыкальным функционалом.
Для примера мы выбрали бота под названием WildBot, но вы можете выбрать другого.
2 этап – Установка
После того, как вы выбрали подходящего бота, нажмите на зелёную кнопку Add Bot To Server.
Затем, нам необходимо выбрать сервер на который мы хотим установить бота.
Для примера мы выбрали Тестовый сервер.
Рекомендуем вам создать аналогичный, пустой сервер, для пробной попытки.
Желательно не снимать галочки с разрешений (если они есть), для успешного функционирования бота.
Нажимаем кнопку Авторизовать.
Переходим в программу Discord, на тестовый сервер.
3 этап – Настройка и запуск музыкального бота
В сети мы можем увидеть нашего музыкального бота.
Обычно боты автоматически задают себе роль и права после авторизации, но в нашем случае необходимо выдать права и роль в ручную. Пишем название роли для бота, мы для примера взяли Бот и выставляем галочки в правах.
Внимание: У каждого бота есть свои текстовые команды и префикс, условия для работы, но они они могут повторятся.
Например: у одного бота, команда воспроизведение музыки может быть следующая $Music[пробел]название трека, а другого !Play[пробел]название трека
У выбранного нами бота WildBot имеются свои команды и префикс (++) для ввода.
Вводим в текстовой чат на сервере команду ++help и получаем в личные сообщения от нашего бота список основных команд для работы.
Далее мы вводим команду ++voice, чтобы добавить бота в голосовой чат.
(Очень важно, если вы хотите слышать музыку)
Далее мы видим в текстовом чате следующее.
- ++request – Добавление музыки в плейлист (Ссылка на видео из Youtube или Soundcloud).
- ++music pause – Поставить музыку на паузу.
- ++music play – Воспроизводить музыку.
- ++volumе – Изменять громкость музыки.
- ++playlist – Посмотреть плейлист.
- ++Shuffle – Перемешать треки в плейлисте.
- ++voteskip – Голосование за пропуск трека.
- ++skip – Пропустить трек.
- ++leave-voice – Убрать бота из голосового чата.
Если бот не начал играть музыку после ввода команды ++voice, добавляем свои треки при помощи команды ++request и затем жмём ++music play.
Наслаждаемся музыкальным ботом на своём сервере.
4 этап – Конец
В данном гайде мы рассмотрели один из вариантов установки музыкального бота на ваш сервер. Этот вариант подойдет тем, кто не хочет мудрить с настройками и установкой бота на свой ПК (сервер). Минус в том, что вы не сможете контролировать работоспособность такого бота, но вы всегда можете его поменять на другого.