提问人:Asgard 提问时间:2/14/2023 更新时间:2/14/2023 访问量:76
如何使用协程和闭包?
How do I use a coroutine a a closure?
问:
我正在制作一个播放音乐的 Discord 机器人,并在网上找到了以下代码(已被我修改):
async def play(self, inter: disnake.CmdInter, url):
"""Plays a song from a given YouTube URL."""
async with inter.channel.typing():
self.queue.append([inter.channel, url])
player = await YTDLSource.from_url(
url, loop=self.bot.loop, stream=True
)
try:
self.bot.voice_clients[0].play(
player,
after=...
)
except disnake.errors.ClientException: # Already playing a song
self.queue.append([inter.channel, url])
await inter.send(
f"Added `{player.title}` to queue "
f"(Nr. {self.queue.index([inter.channel, url]) + 1})"
)
return
await inter.send(f"Now playing: `{player.title}`")
kwarg 允许我指定在播放停止后执行的闭包。为了添加一个队列系统,我想让 lead 一个函数以递归方式播放队列中的下一首歌曲,直到队列为空。after
after
我的问题是我无法弄清楚如何使用协程的闭包(递归函数必须如此,因为播放需要使用协程)。、、 和其他一些组合不起作用,我在互联网上没有找到任何关于协程闭包的信息。after=await foo
after=foo
after=lambda: await foo
after=lambda: foo
也许他们只是不是那样工作的,我不熟悉异步编程,所以我不知道。
答: 暂无答案
评论