【问题标题】:Discord.py on_raw_reaction_remove member not found (remove role on reaction remove)未找到 Discord.py on_raw_reaction_remove 成员(在反应移除时移除角色)
【发布时间】:2021-02-06 04:37:15
【问题描述】:

我在尝试删除反应删除 (on_raw_reaction_remove) 时的角色时收到 member not found 错误。

可以将角色添加到成员,但之后无法删除角色。

我的猜测是它无法正确获取成员的 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="xxx")
        else:
            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.")
            

【问题讨论】:

    标签: python discord discord.py discord.py-rewrite


    【解决方案1】:

    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,否则您的事件将无法正常工作。

    【讨论】:

    • 我有同样的问题,我有这个代码并添加了 discord.Intent.all()。不过,我可以访问公会,但不能访问 guild.members
    • 您是否在您的 discord 应用中激活了 Intents?
    • 我已经解决了,我不得不将 de get(guild.members, ...) 替换为 member = await guild.fetch_member(payload.user_id)
    • 非常感谢你们 :)
    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多