#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})')