Python 原始反应事件不发生';不要在不和谐的环境中工作

Python 原始反应事件不发生';不要在不和谐的环境中工作,python,python-3.x,discord,discord.py,Python,Python 3.x,Discord,Discord.py,我目前正在尝试制作一个机器人,它可以检测某个消息id是否添加了白色复选标记,然后删除用户刚刚添加的反应(返回数字1) 现在这段代码不起作用,直到第一条if语句出现之前,我还发现它至少是功能性的。我有一个齿轮文件,但我希望我可以在我的机器人py。但要让它成为一个齿轮并不难。如果我要使它成为一个cog,我还可以发出一个命令,发送消息并用复选标记对其作出反应,然后使用侦听器 不管怎样,这是代码 @bot.event() async def on_raw_reaction_add(payload):

我目前正在尝试制作一个机器人,它可以检测某个消息id是否添加了白色复选标记,然后删除用户刚刚添加的反应(返回数字1)

现在这段代码不起作用,直到第一条if语句出现之前,我还发现它至少是功能性的。我有一个齿轮文件,但我希望我可以在我的机器人py。但要让它成为一个齿轮并不难。如果我要使它成为一个cog,我还可以发出一个命令,发送消息并用复选标记对其作出反应,然后使用侦听器

不管怎样,这是代码

@bot.event()
async def on_raw_reaction_add(payload):
    if payload.message_id == 733759031138582538:
        if payload.emoji == "white_check_mark":
            member = discord.utils.find(payload.user_id)
            await member.add_roles("Guild Member")
            await member.remove_roles("Rules Pending")
同样,第一个if语句甚至没有像我以前使用
print()
测试过的那样工作。可能由于某种原因,原始反应添加上的
功能不正常

让我知道你的想法

编辑:这是我在控制台中得到的错误


有几个问题:

  • payload.emoji
    将是一个
    PartialEmoji
    对象。对于unicode表情符号,
    payload.emoji.name
    将是表情符号的实际代码点。我们可以用
    '\N{白色重复选标记}'
  • 要获得成员,我们必须首先获得消息所在的公会,然后通过id从公会获得成员
  • 要添加和删除角色,我们需要从公会获取
    角色
    对象


  • 要获得用户,不要做所有这些

    @client.event
    async def on_raw_reaction_add(payload):
        if payload.message_id == 779742701804847135:
            guild_id = payload.guild_id
            guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
            emoji = payload.emoji.name
            role = discord.utils.get(guild.roles, name=emoji)
            member = payload.member
            if member is not None:
                await member.add_roles(role)
    
    这是我的代码,它运行良好

    导入表情符号
    @commands.Cog.listener()
    原始反应添加时的异步定义(自身,有效负载=无):
    msgID=783797861190991893#消息id
    guild=discord.utils.get(self.bot.guilds,name=“asywetwe”)#此处的行会名称
    role=discord.utils.get(guild.roles,name='wetwet')#组角色名称
    如果有效负载不是无:
    如果payload.message_id==msgID:
    如果str(payload.emoji)=”✅": #添加原始表情符号
    等待有效负载。成员。添加_角色(角色)
    
    出于某种原因,它不起作用,不知道为什么。不过你的解释很有道理。它没有改变我在其他方面的角色。我犯的一个错误是,
    bot.event
    后面不应该跟
    ()
    。您有任何错误吗?您确定您有正确的消息id吗?事实上,我确实收到了一个错误,我在我的帖子中对其进行了编辑。不完全确定如何处理这一问题。
    等待公会。获取成员(有效负载。用户id)
    。这应该从discord而不是内部缓存中获取成员信息。
    @bot.event
    async def on_raw_reaction_add(payload):
        if payload.message_id == 733759031138582538:
            if payload.emoji.name == '\N{WHITE HEAVY CHECK MARK}':
                guild = await bot.fetch_guild(payload.guild_id)
                if guild is not None:
                    member = guild.get_member(payload.user_id)
                    guild_member = discord.utils.get(guild.roles, name="Guild Member")
                    pending = discord.utils.get(guild.roles, name="Rules Pending")
                    await member.add_roles(guild_member)
                    await member.remove_roles(pending )
    
    @client.event
    async def on_raw_reaction_add(payload):
        if payload.message_id == 779742701804847135:
            guild_id = payload.guild_id
            guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
            emoji = payload.emoji.name
            role = discord.utils.get(guild.roles, name=emoji)
            member = payload.member
            if member is not None:
                await member.add_roles(role)