Время пользователя в войс канале | Discord py
Не могу понять как сделать так, чтобы роль выдавалась через определенное время проведенное в голосовом канале, смог сделать только выдачу при подключении. Пожалуйста помогите.
Вот кусок кода:
if not before. channel and after.channel:
role = discord.utils.get(member.guild.roles, name = "test")
await member.add_roles(role)
Ответы (2 шт):
Могу рекомендовать discord py tasks, как по мне через таски сделать проще систему voice lvling
Моя система:
Импортируем нужный модуль
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
Осталось лишь дописать запись этих данных в бд (Это уже для каждого по своему) (Тк и способы хранения данных у всех разные) И после можно там же дописать проверку если у человека столько то часов - дать такую то роль