Непрерывный фон l oop для бота раздора, чтобы проверить, находится ли он в голосовом канале - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать мусора бот c и хочу, чтобы у него была система очередей, поэтому, если будет запрошено несколько песен, они будут добавлены в очередь и воспроизведены позже.

Моя игра Команда воспроизводит запрос, если он еще не воспроизводится, или добавляет URL-адрес песни в очередь (список), если он воспроизводится.

Теперь я хочу, чтобы бот непрерывно проверял, на заднем плане, случай где он находится в голосовом канале, но не воспроизводит музыку c, а длина очереди больше нуля. В этом случае он должен воспроизвести первый URL-адрес в очереди, а затем удалить этот URL-адрес из очереди. Я борюсь с фактической реализацией непрерывного фона l oop. Я попытался реализовать это с помощью события discord (on_voice_state_update), предполагая, что это срабатывает, когда бот останавливается и начинает воспроизводить аудио - однако это не так (это происходит только при таких событиях, как отключение звука, выход из канала, присоединение к каналу и т. Д.). c.), Как показано ниже.

@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]

Я посмотрел документацию на discord.py о фоновых циклах с помощью asyncio, но я не уверен, что такое Cog, а также как получить доступ к информации о ботах, то есть в обычной команде , ctx.voice_client может использоваться для доступа к голосовому состоянию бота, но ctx не существует вне команды. Более того, нет действительного события, которое можно использовать для запуска проверки.

...