如何在没有FFmpeg的情况下编写Discord音乐机器人?

时间:2020-07-27 09:33:27

标签: python python-3.x discord discord.py

我正在写一个Discord音乐机器人。没有经验。我仅通过youtube _dl和FFmpeg在YouTube上找到了一种方法。在这种情况下,漫游器首先从YT下载.mp3格式的视频,然后才将其广播到语音聊天。如何使漫游器将视频直接中继到语音聊天,而不是下载视频?预先谢谢你。

@client.command()
async def play(ctx, url: str):
    song_there = os.path.isfile('song.mp3')

    try:
        if song_there:
            os.remove('song.mp3')
            print('[log] Старый файл удалён')

    except PermissionError:
        print('[log] Не удалось удалить файл')

    await ctx.send('Пожалуйста, ожидайте')

    voice = get(client.voice_clients, guild=ctx.guild)

    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192'
        }]
    }

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        print('[log] Загружаю музыку...')
        ydl.download([url])

    for file in os.listdir('./'):
        if file.endswith('.mp3'):
            name = file
            print('[log] Переименовываю файл: {file}.')
            os.rename(file, 'song.mp3')

    voice.play(discord.FFmpegPCMAudio('song.mp3'), after=lambda e: print(
        f'[log] {name}, музыка закончила своё проигрывание.'))
    voice.source = discord.PCMVolumeTransformer(voice.source)
    voice.source.volume = 0.07

    song_name = name.rsplit('-', 2)
    await ctx.send(f'Сейчас проигрывается музыка: {song_name[0]}')

0 个答案:

没有答案