Discord.py 重写和 youtube_dl

Posted

技术标签:

【中文标题】Discord.py 重写和 youtube_dl【英文标题】:Discord.py rewrite and youtube_dl 【发布时间】:2020-05-31 03:35:45 【问题描述】:

我一直在尝试为我的服务器创建一个不和谐的机器人,但我遇到了一个问题。 如何使用 youtube_dl 播放音乐而无需下载?现在我正在使用:

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])

它下载歌曲,然后我播放它。它有效,但完成所有这些需要大约 15 秒,这还不错,但我想知道是否有任何方法可以让它更快?例如,Rythm Bot 是即时的。

提前感谢您提供的任何帮助。

【问题讨论】:

你有没有尝试过,做过任何研究?您具体在哪个部分苦苦挣扎? 我做了很多研究,但我仍然没有找到方法。我正在尝试找到一种立即播放歌曲的方法。这就是它现在所做的: - 从用户那里获取 URL; - 使用该 URL 下载歌曲; -将下载的歌曲重命名为“song.mp3”; - 播放“song.mp3”。这个过程大约需要 15 秒,我想知道我是否可以让它瞬间完成,可能是这样的: -Gets URL from user; - 打开链接并播放来自 YouTube 的歌曲。或者也许是另一种让它更快的方法,即使使用不同的库......? 【参考方案1】:

我也遇到了同样的错误,但找到了立即播放音乐的解决方案。当您运行播放命令时,机器人会从 YouTube 下载音乐。这就是为什么需要这么长时间。但是,如果您直接从 YouTube 流式传输音乐,它应该可以立即运行。这是Rapptz(即Discord.py的创建者)提供的直接流式传输音乐的代码

@commands.command()
async def stream(self, ctx, *, url):
    """Streams from a url (same as yt, but doesn't predownload)"""
    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))

你可以在这里找到完整的代码(检查你的问题的流函数):https://github.com/Rapptz/discord.py/blob/master/examples/basic_voice.py

【讨论】:

以上是关于Discord.py 重写和 youtube_dl的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py ytdl 不播放有年龄限制的视频

如何改进我的队列系统 - Discord.py

Discord Py - Heroku 托管 Bot 上的音乐命令

禁止命令 discord.py 的问题(重写分支)

Discord Bot 响应短语(Discord.py 重写)

Discord.py 重写多服务器数据