Как воспроизвести весь плейлист YouTube на discord.py бот с youtube-dl
- Post author: admin
- Запись опубликована: 24 августа, 2022
- Post category: Вопросы по программированию
#python #ffmpeg #bots #discord.py #youtube-dl
#python #ffmpeg #боты #discord.py #youtube-dl
Вопрос:
Я пытаюсь создать музыкального бота discord. Я использую youtube-dl для извлечения информации и ffmpeg для воспроизведения звука. Мой бот может успешно ставить в очередь и воспроизводить обычные видео, но когда дело доходит до воспроизведения всего списка воспроизведения, он не работает.
Это мой код для воспроизведения плейлистов:
if ‘entries’ in info: for i in info[‘entries’]: URL = i[‘formats’][0][‘url’] player = FFmpegPCMAudio(URL, **FFMPEG_OPTIONS) queue.append(player) source = queue.pop(0) voice.play(player, after = lambda e: play_next(ctx, source)) await ctx.send(‘playing song’)
При этом загружаются все видео в плейлисте, но воспроизводится только первое, а затем отображается эта ошибка:
СМОТРИ ЗАКРЕПЛЕННЫЙ КОМЕНТАРИЙ || Ютуб бот для дискорда | Как сделать оповещения о новых роликах.
discord.errors.ClientException: Already playing audio.
Ответ №1:
вы можете проверить, воспроизводит ли голос аудио или нет, и делать что-то на основе этого значения,
if voice is None: voice.play(player, after = lambda e: play_next(ctx, source)) else: print(«Audio is playing!»)
но, выполнив команду «voice is None», это означает, что он не только проверит, воспроизводится ли звук, но и проверит все, что нужно делать с голосом, но хорошая вещь при этом заключается в том, что вы можете проверить, находится ли бот все еще в голосовом канале или нет, прежде чем должна начаться следующая песня, иприсоединяйтесь к каналу снова, если у бота была некоторая задержка между воспроизведением песен и оставленной причиной бездействия,
voice = discord.utils.get(client.voice_clients, guild=ctx.guild) if voice is_playing(): if voice is None: voiceChannel = discord.utils.get(ctx.guild.voice_channels, name=ctx.author.voice.channel.name) await voiceChannel.connect() voice = discord.utils.get(client.voice_clients, guild=ctx.guild) voice.play(player, after = lambda e: play_next(ctx, source)) else: voice = discord.utils.get(client.voice_clients, guild=ctx.guild) voice.play(player, after = lambda e: play_next(ctx, source))
этот последний пример может быть немного незавершенным, но он должен быть очень близок к работе, если вы сможете заставить работать ту часть, на которую указывает моя стрелка, но, насколько я знаю, это хорошее решение, надеюсь, это помогло, я знаю, что я очень опаздываю с этим :).
Ответ №2:
Проблема заключается именно в том, о чем сообщает вам сообщение об ошибке: вы пытались воспроизвести файл, в то время как один из них уже воспроизводился. Вам нужно подождать, пока звук не будет воспроизведен; ваша единственная задержка — это приостановка до завершения загрузки.
Вам нужно либо посмотреть, как выполнить блокирующий вызов play (вне области видимости для переполнения стека), либо проверить время воспроизведения из метаданных файла, и sleep это долго.
ЮТУБ БЛОКИРУЕТ МУЗЫКАЛЬНЫХ БОТОВ В DISCORD | ИЗВЕСТНАЯ ИНФОРМАЦИИ И ВОЗМОЖНЫЕ ПУТИ РЕШЕНИЯ
Это заставляет вас двигаться?
1. Понятно, думаю, я попробую это сделать. Большое спасибо!
Источник: programbox.ru
discord.py и youtube_dl воспроизведение аудио без скачки
как можно воспроизвести аудио в боте при помощи библиотеки youtube_dl, но без установки самого аудио в директорию бота (из-за этой установки невозможно запустить стримы с музыкой по типу lo-fi) и если ни как нельзя, то какую библиотеку можно для этого использовать (существуют же боты по типу MEE6, Rythm, Groove, которые играют стримы спокойно и моментально, а с учётом что запуск аудио моментальный, да и боты очень популярны, то явно это происходит без скачки видео)
Отслеживать
задан 6 дек 2020 в 13:33
Maxim Filonenko Maxim Filonenko
43 2 2 серебряных знака 8 8 бронзовых знаков
никакие адекватные люди не делают ботов на питоне. Для этого есть js
6 дек 2020 в 13:59
А что плохого в питоне для этой цели? Есть динамическая типизация, что крайне удобно при работе с переменными из команд, сам синтаксис очень простой. Чем так не устраивает?
6 дек 2020 в 14:07
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Делается это так:
Для реализации такой команды нужен FFMPEG — .exe файл, необходимый для запуска звука. Этот экзешник запускается через Discord API.
Скачать его можно здесь. Также можете скачать архив (Загрузка начнется сразу)
В папке должно быть 3 файла: ffmpeg.exe , ffplay.exe , ffprobe.exe .
Запускам с явным указанием исполняемого файла ffmpeg.exe :
voice.play(discord.FFmpegPCMAudio(executable=»путь\к\файлу\ffmpeg.exe», source = URL, **FFMPEG_OPTIONS))
Источник: ru.stackoverflow.com
Как транслировать музыку с YouTube через дискорд бота?
Здравствуйте, хочу освоить это направление в написании дискорд ботов.
Все видео которые я смотрел основаны на скачивании музыки с ютуба с помощью ytdl или pytube но мне это никак не помогает. Это работает, да, но кому надо засорять место на жд так и ещё убрать ассинхронность бота?(Я делаю бота всего для 5 серверов, но этого достаточно чтобы было слишком много запросов.)
Я давно подозревал что все музыкальные боты которые были успешно запущены в массовое пользование аудио не скачивают а транслируют с YouTube.
С поиском композиции я справился, а с трансляцией в дискорд нет. Неужели если я захочу послушать часовую версию какой-нибудь песни боту придётся её полностью скачивать и транслировать в дискорд? Я вот послушаю минут 10 и выключу. Это как минимум не логично и это бессмысленная трата ресурсов.
Я даже кусок кода не могу вставить потому что понятия не имею что там может быть.
P.s. Возможно вопрос дубликат. Да, я понимаю что это тема заезженная. Но чтобы настолько всё было плохо я ещё не видел. Помогите кто может.
- Вопрос задан 28 окт. 2022
- 271 просмотр
Источник: qna.habr.com