Я хочу отправить пользователям личное сообщение, если они заработали определенный ранг (например, при повышении уровня), но я не знаю, как я могу это сделать. Что я пробовал: @ bot.event async def on_member_update (before, after): try: ...

0
Overdrive 13 Янв 2021 в 02:55

1 ответ

Лучший ответ

Попробуйте, я немного изменил ваш код. role_id не может быть в bool, и без bool он все равно не сработает, потому что role_id является id, а before.roles и after.roles вернут список, который сравнивается с именем роли. Поэтому я использовал get(), чтобы получить роль от гильдии и проверить, входит ли этот role в before.roles & after.roles

@bot.event
    async def on_member_update(before, after):
        try:
            role = get(bot.get_guild(before.guild.id).roles, id=721847130238746636)
            member = bot.get_guild(before.guild.id).get_member(before.id)
            if role not in before.roles and role in after.roles:
                print(f"{member.name} test dm message send")
                await member.send('test dm message')
        except AttributeError as e:
            print(e)

Код заработал после того, как я внес изменения, если вы еще этого не сделали, убедитесь, что у вас включены намерения.

1
Lemon.py 13 Янв 2021 в 00:27