在这段代码中on_raw_reaction_add()
得到self.server
作为None
,但在on_raw_reaction_remove()
中它确实得到了我在__init__()
中分配给它的东西。简单的解决方法是在函数中执行相同的行,但我想了解为什么它不能像我所知的那样工作。你知道吗
编辑:尝试使用self.client.server_id
也不起作用
编辑二:它在on_raw_reaction_remove()
中也不起作用
Edit III: Found out why. The bot is not running yet when called and thus
get_guild
isNone
. Duh.
class reactionsCog(commands.Cog):
def __init__(self, client):
self.client = client
self.server = self.client.get_guild(client.server_id)
@commands.Cog.listener()
async def on_raw_reaction_add(self, reaction):
#Private events
for i in range(2):
if reaction.message_id == self.client.pri_message[i].id:
print('Someone reacted to pri_message ', i, ' with ', str(reaction.emoji))
if str(reaction.emoji) == '✅':
if reaction.user_id != self.client.user.id:
member = self.server.get_member(reaction.user_id)
userstr = member.display_name
if userstr in self.client.pri_not_sure[i]:
await self.client.pri_message[i].remove_reaction('❔', member)
self.client.pri_attending[i].append(userstr)
try:
await self.client.pri_message[i].remove_reaction('❌', member)
except:
pass
print(member.name, ' added to pri_attending ', i)
@commands.Cog.listener()
async def on_raw_reaction_remove(self, reaction):
#Private events
for i in range(2):
if reaction.message_id == self.client.pri_message[i].id:
if str(reaction.emoji) == '✅':
member = self.server.get_member(reaction.user_id)
print(member.name, ' removed from pri_attending ', i)
userstr = member.display_name
self.client.pri_attending[i].remove(userstr)
正如您所发现的,发生这种情况是因为在bot连接到discordapi服务之前调用了
get_guild
。您可以通过包含将在bot连接时触发的on_ready
事件来解决此问题:相关问题 更多 >
编程相关推荐