我如何使用Youtube上的Discord机器人播放音乐而不将歌曲下载为文件?
我已经查看了discord.py文档中包含的音乐bot,但是该机器人将文件下载到该目录中。有什么办法可以避免这种情况?文档示例中的代码:
{...handleDevalue = fun this -> <some implementation code here>
答案 0 :(得分:3)
要播放音乐而不下载音乐,只需在play
函数中使用以下代码即可:
ydl_opts = {'format': 'bestaudio'}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(video_link, download=False)
URL = info['formats'][0]['url']
voice = get(self.bot.voice_clients, guild=ctx.guild)
voice.play(discord.FFmpegPCMAudio(URL))
这是每一行的用途:
ydl_opts = {'format': 'bestaudio'}
:获得最佳音频with youtube_dl.YoutubeDL(ydl_opts) as ydl:
:初始化youtube-dl info = ydl.extract_info(video_link, download=False)
:获取一个名为info
的字典,其中包含所有视频信息(标题,时长,上传者,描述等)。URL = info['formats'][0]['url']
:获取指向视频音频文件的URL voice = get(self.bot.voice_clients, guild=ctx.guild)
:初始化一个新的音频播放器voice.play(discord.FFmpegPCMAudio(URL))
:播放正确的音乐
但是,从URL播放音频而不下载音频会导致一个已知问题,here解释了
要修复它,只需添加一个变量,例如FFMPEG_OPTIONS
,它将包含FFMPEG的选项:
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
创建变量后,只需在FFmpegPCMAudio
方法中添加一个参数:
voice.play(discord.FFmpegPCMAudio(URL, **FFMPEG_OPTIONS))