Python discord py-如果用户收到新排名,则发送消息(在成员更新时)

Python discord py-如果用户收到新排名,则发送消息(在成员更新时),python,python-3.x,discord.py,discord.py-rewrite,Python,Python 3.x,Discord.py,Discord.py Rewrite,我想给用户发送一条私人消息,如果他们获得了一个特定的排名(比如在升级),但我不知道我怎么能做到这一点 我尝试的是: @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 o

我想给用户发送一条私人消息,如果他们获得了一个特定的排名(比如在升级),但我不知道我怎么能做到这一点

我尝试的是:

@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

试试这个,我把你的代码改了一点<代码>角色id不能在
bool
中,如果没有bool,它将不会触发,因为
角色id
id
之前。角色
之后。角色
将返回一个与角色名称进行比较的列表。因此,我使用
get()
从公会获取角色,并检查
角色是否在
之前.roles
之后.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,那么代码在我进行更改后就可以工作了