@Zafros56

Почему бот не удаляет приватный канал после его создания?

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

Код:
@bot.event
async def on_voice_state_update(member, before, after):
    if after.channel != None:
        if after.channel.id == 778594516969586720:
            for guild in bot.guilds:
                maincategory = discord.utils.get(guild.categories, id=778594516856733696) #категория создания канала
                channel2 = await guild.create_voice_channel(
                    f'╠╣{member.display_name}', #название канала
                    position=3, #позиция созданного канала (для теста просто уберите этот пункт)
                    category=maincategory, #категория  в которой создастся канал
                    bitrate=96000 # установить битрейт 96
                )
                await channel2.set_permissions(member, connect=True, mute_members=True, move_members=True, manage_channels=True) # установить права на канал его создателю
                await member.move_to(channel2) # переместить пользователя в этот канал
#часть кода которая должна удалять канал после выхода но этого не делает
                def check(x, y):
                    return len(channel2.members) == 0
                await bot.wait_for('voice_channel_update', check = check)
                await channel2.delete()

Хз зачем но вот: документация по discord.py
  • Вопрос задан
  • 310 просмотров
Решения вопроса 1
Amoralny
@Amoralny
Python-разработчик
Можно попробовать так, не идеально, нужно доработать

category_id = 778594516856733696 # id категории
make_channel_id = 'id' # id канала, для создания временных каналов
temp = []

@bot.event
async def on_voice_state_update(member, before, after):
    if after.channel:
        if after.channel.id == make_channel_id:
            guild = member.guild # достём guild

            # достаём категорию, здесь нужно исправить, но я не помню что и как
            # по итогу здесь должен быть объект категории
            category = discord.utils.get(guild.categories, id=category_id)

            # создаём канал в категории
            created_channel = await guild.create_voice_channel(
                f'╠╣{member.display_name}',
                position=3,
                category=category,
                bitrate=96000
            )

            # устанавливаем права
            await created_channel.set_permissions(member, connect=True, mute_members=True, move_members=True, manage_channels=True)
            # двигаем пользователя в канал
            await member.move_to(created_channel)
            # чтобы ничего не ждать, сохраняем id канала
            temp.append(created_channel.id)

    # алгоритм удаления
    elif before.channel:
        # проверяем id в списке
        if before.channel.id in temp:
            # если нет пользователей - удаляем
            if not before.channel.members:
                return await before.channel.delete()


Косяки, которые есть в этом коде:
- Если в войсе бот, то войс не будет удален, пока бот не выйдет
- Если овнер выйдеи, то войс останется

Как вариант - можно просто взять объект категории и создать через него

category.create_voice_channel(data)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы