如何解决payload.member 在 on_raw_reaction_remove() 上不返回任何值,但与 on_raw_reaction_add() 一起使用
忽略 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 等待 payload.member.remove_roles(role) 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() 返回一个有效用户。
解决方法
我稍微更改了您的活动并添加了一些检查以确保一切正确。
找角色总是有问题,所以你需要做一些不同的事情。
看看下面的代码:
@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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。