当尝试在反应删除(on_raw_reaction_remove)上删除角色时,出现找不到成员错误。
它可以将角色添加到成员,但是此后不能删除该角色。
我的猜测是它无法正确获取该成员的ID,但我真的不知道如何解决该问题。
@client.event
async def on_raw_reaction_add(payload):
message_id = payload.message_id
if message_id == xxxx: #ID depends on message
guild_id = payload.guild_id
guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
if payload.emoji.name == 'xxx':
role = discord.utils.get(guild.roles, name="xxx")
elif payload.emoji.name == 'xxxx':
role = discord.utils.get(guild.roles, name="xxx")
else:
role = discord.utils.get(guild.roles, name = payload.emoji.name)
if role is not None:
member = payload.member
if member is not None:
await member.add_roles(role)
print("done")
else:
print("member not found")
else:
print("role not found.")
@client.event
async def on_raw_reaction_remove(payload):
message_id = payload.message_id
if message_id == xxxx: #ID depends on message
guild_id = payload.guild_id
guild = client.get_guild(payload.guild_id)
if payload.emoji.name == 'wexxed':
role = discord.utils.get(guild.roles, name="xxxx")
elif payload.emoji.name == 'xxxx':
role = discord.utils.get(guild.roles, name="xxx")
else:
role = discord.utils.get(guild.roles, name = payload.emoji.name)
if role is not None:
member = guild.get_member(payload.user_id)
if member is not None:
await member.remove_roles(role)
print("done")
else:
print("member not found")
else:
print("role not found.")
答案 0 :(得分:1)
payload.member
仅与on_raw_reaction_add()
一起使用,因此,除了使用它外,您还必须提取用户:
from discord.utils import get
@client.event
async def on_raw_reaction_remove(payload):
guild = await client.fetch_guild(payload.guild_id)
member = get(guild.members, id=payload.user_id)
(...)
PS:如果您拥有discord.py
1.5.0且未设置Intents
,则应查看this answer,否则您的事件将无法正常进行。