Как можно проверить наличие у пользователя определенной роли и присвоить ему вторую роль, если у него уже есть первая роль?

  • 25 августа 2023 г. 8:36
Ответы на вопрос 2
Возможно, проблема заключается в неправильном использовании некоторых функций. Вот исправленный код:

```python
@bot.event
async def on_member_update(before, after):
    role_id_1 = 1066845689209966653
    role_id_2 = 1137097180126138421

    guild = after.guild
    role_1 = discord.utils.get(guild.roles, id=role_id_1)
    role_2 = discord.utils.get(guild.roles, id=role_id_2)

    if role_1 in after.roles and role_2 not in after.roles:
        await after.add_roles(role_2)
```

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

Также я использовал `discord.utils.get` для получения ролей по их ID. Затем мы проверяем наличие первой роли и отсутствие второй роли у участника, и если это условие выполняется, то мы присваиваем ему вторую роль.

Убедитесь, что у вашего бота есть права для управления ролями и что вы правильно указали ID нужных ролей в коде.
Программа не работает должным образом - она не реагирует или выдает сообщение об ошибке? Если ты хочешь проверить, вызывается ли функция on_guild_update(), попробуй добавить временный print() в ее начало. При этом убедись, что у тебя включена опция Intents.guilds, согласно документации. Какие именно интенты ты используешь для бота? И еще, почему ты вообще используешь функцию on_guild_update()? Судя по твоему описанию, тебе нужны события обновления ролей участников, и для этого есть функция on_member_update(). Нам нужно прояснить ситуацию.
Похожие вопросы