“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”没有返回公会?的主要内容,如果未能解决你的问题,请参考以下文章
无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]