Как проверить наличие роли у юзера в discord.py?

Я делаю бота для одной игры в дискорде. Мне нужно чтобы если у юзера забирали роль то тогда выполнялся какой-то код, в моём случае config.players = config.players - 1

Код:

@bot.event
async def ...(member):
  config.players = config.players - 1
  channel = ds.utils.get(user.guild.channels, id=950329905512595466)
  await channel.send(f'**{member}** вышел **{config.players}/10')

Каким методом в discord.py это можно осуществить?


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

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

Для подобных манипуляций в discord-py есть специальное событие on_member_update()

@bot.event
async def on_member_update(before, after):
    . . .

Функция будет вызываться при изменении данных (никнейм, роли и т.д.) любого участника сервера.

Аргумент before - это класс discord.Member с набором свойств, которые были до обновления данных пользователя

Аргумент after - тоже самое, что и before, но, соответственно, с актуальными данными


Далее просто проверьте есть ли у after необходимая роль И была ли она у before, так как нужно понять, что данное изменение - это именно удаление роли у пользователя.

@bot.event
async def on_member_update(before, after):
    role = discord.utils.get(before.guild.roles, id=763333777266049024)

    # если такая роль была у пользователя И ее нет у него сейчас
    if role in before.roles and role not in after.roles:
        print(f'У {after.name} пропала роль {role.id}')

Для работы с discord.Member должны быть включены и выданы discord.Intents

→ Ссылка