Создание каналов привата и их удаление в дискорде

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

Почти весь код я сделал, но код с удалением каналов не работает, а именно проверка на id канала. Также хочу сделать так, чтобы таймер на 30 отменялся, если создатель вернётся, мб есть какой-то более удобный способ для создания этого таймера.

@bot.event
async def on_voice_state_update(member, before, after):
    if after.channel is not None:
        if after.channel.id == 992120556256247808:
            guild = bot.get_guild(642681537284014080)
            category = discord.utils.get(guild.categories, name='Приват')
            v_channel = await guild.create_voice_channel(name=f'Приват ({member.display_name})', category=category)
            t_channel = await guild.create_text_channel(name=f'Выдача прав ({member.display_name})', category=category)

            await v_channel.set_permissions(member, connect=True, speak=True, view_channel=True, stream=True, kick_members=True, mute_members=True, priority_speaker=True)
            role = discord.utils.get(guild.roles, id=642681537284014080)
            await v_channel.set_permissions(role, view_channel=False)
            await t_channel.set_permissions(role, view_channel=False)

            private_post = {
                '_id': member.id,
                'text_id':t_channel.id,
                'voice_id':v_channel.id,
            }
            private.insert_one(private_post)
            await member.move_to(v_channel)

            if before.channel.id == private.find_one({'_id': member.id})['voice_id']: #Вот здесь ошибка
                await bot.get_channel(private.find_one({'_id': member.id})['text_id']).send(f'`[PRIVATE]`: {member.mention} через 30 секунд ваш приват будет удален.')
                time.sleep(30000)
                await t_channel.delete()
                await v_channel.delete()

@bot.command()
async def perm(ctx, member: discord.Member):
    if ctx.channel.id == private.find_one({'text_id': ctx.channel.id})['text_id']:
        v_channel = bot.get_channel(private.find_one({'text_id': ctx.channel.id})['voice_id'])
        await v_channel.set_permissions(member, connect=True, speak=True, view_channel=True, stream=True)

@bot.command()
async def unperm(ctx, member: discord.Member):
    if ctx.channel.id == private.find_one({'text_id': ctx.channel.id})['text_id']:
        v_channel = bot.get_channel(private.find_one({'text_id': ctx.channel.id})['voice_id'])
        await v_channel.set_permissions(member, connect=False, speak=False, view_channel=False, stream=False)

Код ошибки:

Ignoring exception in on_voice_state_update
Traceback (most recent call last):
  File "C:\Users\Хозяин\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "D:\bot\main.py", line 311, in on_voice_state_update
    if before.channel.id == private.find_one({'_id': member.id})['voice_id']:
AttributeError: 'NoneType' object has no attribute 'id'

Ответы (0 шт):