首页 > 解决方案 > 取消反应后删除角色 Discord.py

问题描述

我的代码:

async def on_raw_reaction_remove(payload):
  guild=bot.get_guild(payload.guild_id)
  member=bot.get_user(payload.user_id)
  print(payload.emoji)
  if str(payload.emoji)== "<:DragonDragoon:832860714078961714>":
    if payload.message_id == 853930257740070933:
      if payload.channel_id == 853813716541505576:
        Role = discord.utils.get(guild.roles, name="Knights")
        await member.remove_roles(Role)

我在代码上找不到任何错误,但收到错误消息

Ignoring exception in on_raw_reaction_remove
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "main.py", line 142, in on_raw_reaction_remove
    await member.remove_roles(Role)
AttributeError: 'NoneType' object has no attribute 'remove_roles'

该行member=bot.get_user(payload.user_id)应该获取成员,但它是非类型?我敢肯定是我做出了反应,并且在公会中

标签: pythondiscord.py

解决方案


您似乎遇到了两个问题:

  1. bot.get_user()返回None有效身份证件。也许检查评论中指出的机器人意图。这也可能是缓存问题。
  2. bot.get_user()返回discord.User discord.Member。您不能删除用户的角色,只能删除成员的角色。您将需要guild.get_member(memberid)改用。

async def on_raw_reaction_remove(payload):
    guild = bot.get_guild(payload.guild_id)
    member = guild.get_member(payload.user_id)

如果您已禁用缓存,则需要获取该成员

async def on_raw_reaction_remove(payload):
    guild = bot.get_guild(payload.guild_id)
    member = await guild.fetch_member(payload.user_id)

推荐阅读