проблема с событием on_voice_state

#python #python-3.x #discord.py

#python #python-3.x #discord.py

Вопрос:

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

 @client.event
async def on_voice_state_update(ctx, member: discord.Member, before, after):
    channelid = after.channel.id
    print(f'{member.name} заходит в голосовой канал с ID = {channelid}...')
    if channelid == 764768330212048941:
        print(f'{member.name} зашел в "Стрим 1"(ID: {channelid})')
        print(f'Создаю текстовый канал с именем: "Стрим 1|{member.name}"')
        await ctx.create_text_channel(name=f'Стрим 1|{member.name}')
    else:
        if channelid == 764843714417655808:
            print(f'{member.name} зашел в "Стрим 2"(ID: {channelid})')

  

Когда я присоединяюсь к vc, я получаю это:

 TypeError: on_voice_state_update() missing 1 required positional argument: 'after'
  

Ответ №1:

Вы не можете использовать ctx параметр в событиях, и вам не нужно этого делать member: discord.Member , потому что он уже назначен. Если вы хотите создать канал, вы можете использовать Guild.create_text_channel . Для этого вам нужно получить guild объект с discord.utils.get помощью . Вот пример:

 @client.event
async def on_voice_state_update(member, before, after):
    channelid = after.channel.id
    print(f'{member.name} заходит в голосовой канал с ID = {channelid}...')
    if channelid == 764768330212048941:
        print(f'{member.name} зашел в "Стрим 1"(ID: {channelid})')
        print(f'Создаю текстовый канал с именем: "Стрим 1|{member.name}"')
        guild = discord.utils.get(client.guilds, id=your guild id)
        await guild.create_text_channel(name=f'Стрим 1|{member.name}')
    else:
        if channelid == 764843714417655808:
            print(f'{member.name} зашел в "Стрим 2"(ID: {channelid})')