Время пользователя в войс канале | Discord py

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

Вот кусок кода:

if not before. channel and after.channel:
    role = discord.utils.get(member.guild.roles, name = "test")
    await member.add_roles(role)

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

Автор решения: RAINGM

Могу рекомендовать discord py tasks, как по мне через таски сделать проще систему voice lvling

→ Ссылка
Автор решения: reivenoff

Моя система:

Импортируем нужный модуль

from discord.ext import tasks

Создаём словарь, в который будем писать пользователь:кол-во минут Словарь нужен, что бы не записывать всё в бд каждую минуту, а лишь каждые 30 (Это по желанию) (У меня так-_-)

user_mins = {}  # Словарь для временного хранения
elapsed_time = 0  # Счётчик времени

Создаём цикл, который каждую минуту проходит по всем voice каналам на сервере

@tasks.loop(minutes=1)  # Цикл считающий минуты
    async def voice_check():  # Название цикла
        global user_mins
        global elapsed_time
        for channel in client.guilds[0].voice_channels:  # По всем каналам сервера (если он один)
            # Если в канале есть кто-то и канал не afk
            if channel.members and channel.id != тут_id_akf_канала:
                for member in channel.members:  # проход по каждому пользователю в канале
                    mins = user_mins.get(member.id, 0)
                    user_mins.update({member.id: mins+1})  # обновляем словарь
        
        elapsed_time+=1  # +минута для счетчика времени
        if elapsed_time >= 30:  # Записывать данные в базу каждые 30 минут
            функция записи данных в бд
            elapsed_time = 0

Осталось лишь дописать запись этих данных в бд (Это уже для каждого по своему) (Тк и способы хранения данных у всех разные) И после можно там же дописать проверку если у человека столько то часов - дать такую то роль

→ Ссылка