Python类自变量未传递到函数(不和谐.py)

2024-09-28 13:46:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在这段代码中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 is None. 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)

Tags: selfclientidmessagegetrawifserver
1条回答
网友
1楼 · 发布于 2024-09-28 13:46:25

正如您所发现的,发生这种情况是因为在bot连接到discordapi服务之前调用了get_guild。您可以通过包含将在bot连接时触发的on_ready事件来解决此问题:

class reactionsCog(commands.Cog):
    def __init__(self, client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        await self.client.wait_until_ready()
        self.server = self.client.get_guild(client.server_id)

    ...

相关问题 更多 >

    热门问题