找不到Discord.py on_raw_reaction_remove成员在删除反应时具有删除角色

问题描述

当尝试在反应删除(on_raw_reaction_remove)上删除角色时,出现找不到成员错误

它可以将角色添加到成员,但是此后不能删除该角色。

我的猜测是它无法正确获取该成员的ID,但我真的不知道如何解决该问题。

@client.event
async def on_raw_reaction_add(payload):
    message_id = payload.message_id
    if message_id == xxxx:  #ID depends on message
        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g : g.id == guild_id,client.guilds)

        if payload.emoji.name == 'xxx':
            role = discord.utils.get(guild.roles,name="xxx")
        elif payload.emoji.name == 'xxxx':
            role = discord.utils.get(guild.roles,name="xxx")
        else:
            role = discord.utils.get(guild.roles,name = payload.emoji.name)
        
        if role is not None: 
            member = payload.member
            if member is not None:
                await member.add_roles(role)
                print("done")
            else:
                print("member not found")
        else:
            print("role not found.")

@client.event
async def on_raw_reaction_remove(payload):
    message_id = payload.message_id
    if message_id == xxxx:  #ID depends on message
        guild_id = payload.guild_id
        guild = client.get_guild(payload.guild_id)

        if payload.emoji.name == 'wexxed':
            role = discord.utils.get(guild.roles,name="xxxx")
        elif payload.emoji.name == 'xxxx':
            role = discord.utils.get(guild.roles,name = payload.emoji.name)
        
        if role is not None:
            member = guild.get_member(payload.user_id)
            if member is not None:
                await member.remove_roles(role)
                print("done")
            else:
                print("member not found")
        else:
            print("role not found.")
            

解决方法

payload.member仅与on_raw_reaction_add()一起使用,因此,除了使用它外,您还必须提取用户:

from discord.utils import get

@client.event
async def on_raw_reaction_remove(payload):
    guild = await client.fetch_guild(payload.guild_id)
    member = get(guild.members,id=payload.user_id)
    (...)

PS:如果您拥有discord.py 1.5.0且未设置Intents,则应查看this answer,否则您的事件将无法正常进行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...