不播放/广播时,如何使Discord音乐机器人自动离开?

时间:2018-09-26 00:06:37

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

因此,基本上,我正在努力让我的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..**")

我为自己可怕的代码感到抱歉,我不是程序员,并且我几乎不是一个业余程序员-我只是在尝试学习。再次抱歉。

但是,是的,我该如何解决?

0 个答案:

没有答案