@Yossi_i

Как сделать так, чтобы бот в определенном голосовом канале снимал роль участнику?

Написал бота в дискорде, хочу сделать чтобы он в определенном голосовом канале снимал роль участнику.
Написал вот так:

@client.event
async def on_voice_state_update(member, before, after):
    role1 = discord.utils.get(member.guild.roles, id = 804852310966140978)

if before.channel and not after.channel:
        if before.channel.id == 804901448931475506:
            await member.remove_roles(role1)


Но, дело в том, что при переходу в другой голосовой канал - роль остается. Подскажите, что делать?
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ettychel
У вас условие написано
ЕСЛИ before.channel существует И after.channel НЕ существует.
Получается что данное условие сработает только тогда, когда пользователь не перейдёт в другой канал, а выйдет вообще из голосового канала, поэтому роль и не снимается при переходе в другой канал.
Правильнее будет проверять только лишь наличие before.channel и сравнивать его id с желаемым и если совпадает, то снимать роль, а куда ушёл пользователь вам уже всё равно.
Т.е.
@client.event
async def on_voice_state_update(member, before, after):
    role1 = discord.utils.get(member.guild.roles, id = 804852310966140978)

if before.channel:
        if before.channel.id == 804901448931475506:
            await member.remove_roles(role1)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы