Как постоянно (в фоновом режиме) проверять, подключен ли бот Discord к голосовому каналу - PullRequest
0 голосов
/ 25 апреля 2020

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

При написании обычной команды разногласия вы можете использовать ctx.voice_client, чтобы проверить, находится ли бот в голосовом канале. Но как мне сделать это вне команды discord, где у нас нет доступа к ctx, т.е. как мне получить доступ к статусу бота.

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете создать событие on_voice_state_update для проверки пользователей, покидающих голосовые каналы. Каждый раз, когда пользователь покидает голосовой канал, проверьте, находится ли ваш бот в этом голосовом канале один.

from discord.utils import get

@bot.event
async def on_voice_state_update(member, before, after):
    if before.channel != after.channel and before.channel is not None:
        if len(before.channel.members) == 1 and before.channel.guild.me in before.channel.members:
            voice_client = get(bot.voice_clients, channel=before.channel)
            if voice_client:
                await voice_client.disconnect()
...