“on_raw_reaction_add”工作但“on_raw_reaction_remove”没有返回公会?

Posted

技术标签:

【中文标题】“on_raw_reaction_add”工作但“on_raw_reaction_remove”没有返回公会?【英文标题】:"on_raw_reaction_add" working but "on_raw_reaction_remove" not returning guild? 【发布时间】:2021-05-10 06:35:48 【问题描述】:

我对 on_eaw_reaction_add 进行了编码,它工作得很好

    @commands.Cog.listener() 
    async def on_raw_reaction_add(self, payload):

        msgID = 754487460142121070
        user = payload.user_id
        member = payload.member

        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g : g.id == guild_id, bot1.guilds)
        
        canarinho = get(member.guild.roles, name="canarinho")

        if not payload.guild_id:
            return

        if payload is not None:
            if payload.message_id == msgID:
                if str(payload.emoji) == ":canarinho:":
                    await member.add_roles(canarinho)

但是当我尝试删除角色时,它会卡在那里,我认为我在拉动特定公会时做错了什么

    @commands.Cog.listener() 
    async def on_raw_reaction_remove(self, payload):
    message_id = payload.message_id
    if message_id == 754487460142121070 :

        member = payload.user_id

        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g: g.id == guild_id, bot.guilds)

      #here ->  role = get(member.guild.roles, name='canarinho')

        if not payload.guild_id:
            return

        if payload is not None:
            if payload.message_id == 754487460142121070:
                if str(payload.emoji) == ":canarinho:":
                    print('Working')

移除反应时出错

    File line 123, in on_raw_reaction_remove
        role = get(member.guild.roles, name='canarinho')
 AttributeError: 'int' object has no attribute 'guild'

编辑 我认为payload.user_id 是用户 ID,而不是 Member 对象有关系

【问题讨论】:

你启用intents.members了吗? 是的,我确实启用了 【参考方案1】:

您遇到的错误并不意味着公会有任何问题。它说NoneType 中没有公会,根据您的说法,这意味着成员是NoneType

这是有道理的,因为负载确实有一个member 字段,但它是None 用于根据documentation 删除角色。

改用payload.user_id 并从那里找到用户/成员。

【讨论】:

我将payload.member 更改为payload.user_id,现在我收到此错误:AttributeError: 'int' object has no attribute 'guild' 使用 Client/Bot.get_user discordpy.readthedocs.io/en/latest/… 您还应该习惯 ID 是数字而不是具有属性的对象。你会省去很多失望

以上是关于“on_raw_reaction_add”工作但“on_raw_reaction_remove”没有返回公会?的主要内容,如果未能解决你的问题,请参考以下文章

无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]

CORS 工作正常但突然停止工作?

为啥 Haskell ghc 不工作,但 runghc 工作良好?

异步代码独立工作,但不能一起工作。没有任何异常,只是超时

SQL 语法应该可以工作但不能工作 可能是啥问题?

popViewController Animated 不工作,但后退按钮工作