Как проверить наличие роли у юзера в 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 шт):
Для подобных манипуляций в 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