因此,基本上,我正在努力让我的Discord音乐机器人在当前未播放任何歌曲时离开其进入的语音通道。我试图让他在队列为空的情况下离开,但由于我在播放器上使用after=lambda
来检查队列播放完毕后的状态-我真的不能调用异步函数,我认为我需要为了利用discord.py中的disconnect()
协程,使漫游器离开语音通道。
同样,此代码将不起作用,因为disconnect()
是协程,只能在异步功能中使用,而check_queue()
则不能。而且我也不能使其异步,因为就像我之前说过的那样,我正在使用lambda在play函数中调用此函数。
def check_queue(id):
if queues[id] != []:
player = queues[id].pop(0)
players[id] = player
player.start()
else:
player.disconnect()
这里是播放功能,也用于排队。如您所见,当我创建播放器时,我正在那里使用lambda来检查队列。
@client.command(pass_context=True)
async def play(ctx, *, url):
server = ctx.message.server
if client.is_voice_connected(server) is True:
server = ctx.message.server
voice_client = client.voice_client_in(server)
opts = {"default_search": "auto", "format": "bestaudio/best", "skip_download": True}
player = await voice_client.create_ytdl_player(url, ytdl_options=opts, after=lambda: check_queue(server.id))
player.volume = 0.15
if server.id in queues:
queues[server.id].append(player)
else:
queues[server.id] = [player]
await client.say("**Queueing video..**")
elif client.is_voice_connected(server) is False:
channel = ctx.message.author.voice.voice_channel
await client.join_voice_channel(channel)
voice_client = client.voice_client_in(server)
opts = {"default_search": "auto", "format": "bestaudio/best", "skip_download": True}
player = await voice_client.create_ytdl_player(url, ytdl_options=opts, after=lambda: check_queue(server.id))
players[server.id] = player
player.volume = 0.15
player.start()
await client.say("**Playing video..**")
else:
await client.say("**You probably didn't do that right, try again..**")
我为自己可怕的代码感到抱歉,我不是程序员,并且我几乎不是一个业余程序员-我只是在尝试学习。再次抱歉。
但是,是的,我该如何解决?