как узнать время которое участник провёл на сервере через бота на python
намутил сервер дискорд, за ним и бота написал, решил сделать так чтобы роли выдавались по времени проведённому на сервере, с ролями разобрался, а вот по времени вопрос, подскажите люди добрые
Ответы (1 шт):
Как вариант - запускать таймер, когда пользователь входит на сервер.
import asyncio
...
roles = {
0: 'newbie', # выдаётся сразу при входе
600: 'member', # выдаётся через 10 минут (600 секунд)
3000: 'advanced', # выдаётся через час (3 600 секунд, 600 уже за счёт прошлой роли)
82800: 'staff', # выдаётся через день (86 400 секунд)
518400: 'moder' # выдаётся через неделю (604 800 секунд)
}
@bot.event
async def on_member_join(member):
for key in roles:
await asyncio.sleep(key)
await member.add_roles(discord.utils.get(member.guild.roles, name = roles[key]))
Не советую использовать на долгосрочную перспективу. Если роль нужно выдавать через месяц после входа на сервер, от этой реализации лучше отказаться. В таком случае лучше раз в определённый промежуток времени сравнивать дату входа пользователя с текущей датой. Выдаваться роль будет не сразу (в зависимости от того, как часто будет делаться проверка), но это будет более эффективно
Узнать, когда пользователь вошёл на сервер можно с помощью атрибута joined_at (member.joined_at), который возвращает дату/время входа на сервер типа datetime.datetime. А точная реализация выдачи ролей этим методом уже зависит от того, как вы будете организовывать проверку.