discord py - 如果用户收到新排名,则发送消息 (on_member_update)

discord py - send message if user received a new rank (on_member_update)

如果用户获得了特定等级(例如升级),我想向他们发送私人消息,但我不知道该怎么做。

我尝试了什么:

@bot.event
async def on_member_update(before,after):
    try:
        role_id = 721847130238746636
        member = bot.get_guild(before.guild.id).get_member(before.id)
        if before.bot or after.bot:
            return
        else:
            if role_id not in bool(before.member.roles):
                if role_id in bool(after.member.roles):
                    print(f"{member.name} test dm message send")
                    await member.send('test dm message')
    except AttributeError:
        pass

试试这个,我稍微修改了你的代码。 role_id 不能在 bool 中并且没有 bool 它无论如何都不会触发,因为 role_idid 并且 before.rolesafter.roles 将 return 与角色名称进行比较的列表。所以我使用 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)

代码在我进行更改后工作,如果您还没有,请确保您已启用 intents。