【问题标题】:payload.member returns none on on_raw_reaction_remove() but works with on_raw_reaction_add()payload.member 在 on_raw_reaction_remove() 上不返回任何内容,但与 on_raw_reaction_add() 一起使用
【发布时间】:2021-09-25 11:02:40
【问题描述】:

所以我制作了一个不和谐的机器人,我有一个错误:

忽略 on_raw_reaction_remove 中的异常 回溯(最近一次通话最后): _run_event 中的文件“/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py”,第 343 行 等待 coro(*args, **kwargs) 文件“main.py”,第 41 行,on_raw_reaction_remove 等待有效载荷.member.remove_roles(角色) AttributeError:“NoneType”对象没有属性“remove_roles”

on_raw_reaction_remove() 代码:

@client.event
async def on_raw_reaction_remove(payload):
  if payload.message_id == 865402961585111111:
    if str(payload.emoji) == "✅":
      guild = client.get_guild(payload.guild_id)
      role = discord.utils.get(guild.roles, name='Announcements')
      await payload.member.remove_roles(role)

on_raw_reaction_add() 代码:

@client.event
async def on_raw_reaction_add(payload):
  if payload.message_id == 865402961585111111:
    if str(payload.emoji) == "✅":
      guild = client.get_guild(payload.guild_id)
      role = discord.utils.get(guild.roles, name='Announcements')
      await payload.member.add_roles(role)

奇怪的是,使用 on_raw_reaction_add() 它返回一个有效用户。

【问题讨论】:

  • NoneType = 有些东西不存在。
  • 我知道,这就是问题所在。 payload.member 不返回任何类型,即使它应该返回一个成员
  • 改用payload.member.guild.roles
  • 但这不是问题,问题是payload.member是none,当我按照你说的做时它告诉我“none没有属性行会”
  • 您是否启用了 Intents?

标签: discord.py


【解决方案1】:

我稍微更改了您的事件并添加了一些检查以确保一切正确。

寻找角色总是有问题,所以你需要做一些不同的事情。

看看下面的代码:

@client.event
async def on_raw_reaction_remove(payload):
    guild = client.get_guild(payload.guild_id)
    print("Guild checked.")
    member = discord.utils.get(guild.members, id=payload.user_id)
    print("Member checked.")
    if payload.message_id == 865402961585111111:
        print("Got message.")
        if str(payload.emoji) == "✅":
            print("Checked for the reaction.")
            role = discord.utils.get(guild.roles, name='Announcements')
            print("Got the role.")
        else:
            role = discord.utils.get(guild.roles, name=payload.emoji)

        if role is not None:
            await member.remove_roles(role)
            print("Removed the role")

如果代码不是一目了然,我很乐意添加一些解释。

编辑: 查看完整代码后,问题似乎出在 Intents 上。您正确命名它们但没有导入它们。

要导入它们,请使用:

client = commands.Bot(command_prefix="YourPrefix", intents=intents1)

【讨论】:

  • 成员 var 对我来说等于无类型
  • @koiyaboi 那你在做什么?该代码对我来说非常好。然后机器人无法获取成员或类似的东西。
  • 但是机器人获得了 on_raw_reaction_add() 的成员
  • 您能否编辑您的帖子并同时显示其他代码?
  • @koiyaboi 那么打印语句在哪一行停止?
猜你喜欢
  • 2023-03-18
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多