Discord.py反应角色无法删除角色

2024-05-16 22:58:03 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,反应角色添加工作,但我不能删除角色 每次我点击反应,就会弹出这个错误:

文件“main.py”,第165行,在on\u raw\u reaction\u remove中 等待有效负载。成员。删除\u角色(角色) AttributeError:“非类型”对象没有“删除角色”属性

我的代码:

async def on_raw_reaction_remove(payload):
    guild: discord.Guild = client.get_guild(815637550550089739)
    if payload.message_id == 872659703598047232:
        if payload.emoji.name == 'Hypixel':
            role: discord.Role = guild.get_role(872606322653286400)
            await payload.member.remove_roles(role)
    if payload.message_id == 872659703598047232:
        if payload.emoji.name == 'Skyblock':
            role: discord.Role = guild.get_role(872606320379953193)
            await payload.member.remove_roles(role)```

Tags: nameid角色messagegetrawifon
2条回答

https://discordpy.readthedocs.io/en/latest/api.html#discord.RawReactionActionEvent.member
payload.member仅在添加反应时可用,否则其值将为None
您应该使用on_raw_reaction_add

这背后的主要原因是payload.member是在使用on_raw_reaction_removeNone
这实际上是因为discord不发送此数据,所以discord.py将其作为None
来源-https://github.com/Rapptz/discord.py/issues/5871

要解决这个问题,您需要获得有问题的帮会对象,然后从帮会中获取成员对象。 负载也没有帮会对象,所以我们也必须得到它

我实际上创建了member对象,并在on_raw_reaction_remove的情况下手动将其固定到有效负载上。 这样on_raw_reaction_addon_raw_reaction_remove对于我的最终处理都具有相同的负载

async def on_raw_reaction_remove(self, payload):    
  guild = self.get_guild(payload.guild_id)  #Self here is Client/Bot
  member = guild.get_member(payload.user_id)
  payload.member = member
  await reaction_role(payload, remove=True)

此外,这需要特权成员的意图。要启用它,请重新登录开发人员门户并查找特权意图>;成员意图,然后将滑块勾选为“开”

intent = discord.Intents.default()
intent.members = True

需要将意图传递给客户端,如果使用bot扩展,则传递给bot包装器

commands.Bot.__init__(self, <...>, intents=intent)

相关问题 更多 >