连续的后台循环,让discord bot检查其是否在语音通道中

时间:2020-04-25 23:34:39

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

我正在尝试制作一个音乐不和谐机器人,并且希望它具有一个队列系统,因此,如果请求多首歌曲,它们将被添加到队列中并在以后播放。

如果尚未播放请求,我的播放命令将播放该请求;如果正在播放,则将歌曲URL添加到队列(列表)中。

现在,我希望该漫游器在后台连续检查它是否在语音通道中但不播放任何音乐并且队列长度大于零的情况。在这种情况下,它应该播放队列中的第一个URL,然后从队列中删除该URL。我正在努力实现连续的后台循环。我尝试通过不和谐事件(on_voice_state_update)实现此操作,假设此事件是在漫游器停止并开始播放音频时触发的-但是,情况并非如此(它仅由静音,离开频道,加入频道等事件触发),如下所示。

@bot.event
async def on_voice_state_update(member, before, after):
    if before.channel is not None and before.channel == after.channel and member == after.channel.guild.me:
        if after.channel.guild.voice_client.is_playing() == False:
           #if len(queue) > 0:
                voice_client = get(bot.voice_clients, channel = after.channel)
                player = await YTDLSource.from_url(queue[0])
                await voice_client.play(player)
                queue.pop[0]

我查看了有关带有asyncio的后台循环的discord.py文档,但是我不确定是什么齿轮,以及如何访问机器人信息,即在常规命令中,ctx.voice_client可用于访问机器人的声音状态,但ctx在命令外部不存在。而且,没有有效的事件可用于触发检查。

0 个答案:

没有答案