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

#python #discord #discord.py

Вопрос:

Я новичок, так что не ненавидь меня. Я пытаюсь дать кому-то роль, когда он присоединяется к определенному голосовому каналу.

Вот мой код:

 
import discord
from discord import Member, Guild

client = discord.Client()

#########################################################################

@client.event
async def on_ready():
    print('Hello!'.format(client.user.name))

@client.event
async def on_voice_state_update(before, after ):
    role = discord.utils.get(after.server.roles, name="Talk-1")
    if not before.voice.voice_channel and after.voice.voice_channel:
        await client.add_roles(after, role)
    elif before.voice.voice_channel and not after.voice.voice_channel:
        await client.remove_roles(after, role)

client.run('My Token')```
 

Ответ №1:

Вы двигались в правильном направлении. Вам нужно только определить идентификатор конкретного голосового канала, а затем проверить after.channel.id , соответствует ли он этому. Также убедитесь, что используете member.add_roles вместо client.add_roles . Так что что-то вроде этого должно сработать:

 @client.event
async def on_voice_state_update(member, before, after):
    role = discord.utils.get(after.server.roles, name="Talk-1")
    channel_id = 123456

    if before.channel is None or before.channel.id != voice_channel:
        if after.channel is not None and after.channel.id == voice_channel:
            await member.add_roles(vc_role)

    #reversed from above
    if after.channel is None or after.channel.id != voice_channel:
        if before.channel is not None and before.channel.id == voice_channel:
            await member.remove_roles(vc_role)
 

https://discordpy.readthedocs.io/en/master/api.html?выделите=голос state update#discord.on_voice_state_update