nymb32
@nymb32

Discord bot не начинает воспроизведение трека, что не так?

музыкальный бот для дискорда не начинает воспроизведения трека, а просто пишет в чат ошибку61746b8573f90993402346.png видео с ютуба он качает61746c03d20e5909501516.png но не начинает проигрывание
кусочек кода:
@bot.command(name='go', help='Выбор видео с ютуба, звуковая дорожка которого будет воспроизводится.')
async def go(ctx, url):
    try:
        server = ctx.message.guild
        voice_channel = server.voice_client

        async with ctx.typing():
            filename = await YTDLSource.from_url(url, loop=bot.loop)
            voice_channel.play(discord.FFmpegPCMAudio(executable='ffmpeg.exe', source=filename))
        await ctx.send('СЕЙЧАС ИГРАЕТ: {}'.format(filename))
    except:
        await ctx.send("Не удалось выполнить команду, обратитесь к разработчику")


YTDLSource:
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 = ""
    @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:
            data = data['entries'][0]
        filename = data['title'] if stream else ytdl.prepare_filename(data)
        return filename
  • Вопрос задан
  • 358 просмотров
Решения вопроса 1
nymb32
@nymb32 Автор вопроса
Собственно, ошибка была не в самом боте как я думал, а тут:
async with ctx.typing():
            filename = await YTDLSource.from_url(url, loop=bot.loop)
            voice_channel.play(discord.FFmpegPCMAudio(executable='ffmpeg.exe', source=filename))
                                                                                                          ^^^^^^^^^

А конкретно, я не добавил ffmpeg в PATH, есть 2 решения: 1- указать путь в PATH, 2- в коде указывать полный путь к ffmpeg.exe
(python-ffmpeg это просто библиотека которая позволяет работать с ffmpeg не выходя из интерпретатора а не полностью заменяет ffmpeg, для работы библиотеки в любом случае нужно скачать ffmpeg на пк)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Телепаты на карантине, так что придётся тебе самому раздобывать сообщение об ошибке.
Например, с помощью модуля traceback. Импортируешь его, а потом в except пишешь что-то вроде
except:
        await ctx.send("Не удалось выполнить команду:\n" + traceback.format_exc())


Вообще except, который даже не пишет сообщение об ошибке ни в журнал, ни куда-то ещё - хуже чем бесполезен. Никакой возможности понять, что случилось и где это случилось.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы