在 Cogs 中使用 get_member

时间:2021-06-02 08:25:18

标签: python-3.x discord discord.py

我有两个应用程序,一个 main.py 是我的主文件,另一个是 Loops.py,我在其中使用 Cogs 和其中的任务,所以有问题。我有一个功能可以更改我的机器人的昵称每隔一秒换一个这样的名字:

botsnick = cycle(['?','??','???','????','?????','??????','???????','??????? ?','??????? ??','??????? ???','??????? ????'])
@tasks.loop(seconds=1)
async def change_nick():
    server = client.get_guild(771043820157534228)
    bots = server.get_member(848887911884521502)
    await bots.edit(nick=next(botsnick))

它在 main.py 中正常工作,但是一旦我将这段代码实现到 Loops.py 和 Cog 中,就像这样:

class Loops(commands.Cog):
    def __init__(self,client):
        self.client = client
        self.change_nick.start()
        

    botsnick = cycle(['?','??','???','????','?????','??????','???????','??????? ?','??????? ??','??????? ???','??????? ????'])
    @tasks.loop(seconds=1)
    async def change_nick(self):
        server = self.client.get_guild(771043820157534228)
        bots = server.get_member(848887911884521502)
        await bots.edit(nick=next(self.botsnick))


def setup(client):
    client.add_cog(Loops(client))

我收到此错误:

bots = server.get_member(848887911884521502)
AttributeError: 'NoneType' object has no attribute 'get_member'

但是如果我使用这个功能,main.py 中没有错误,那有什么问题?

1 个答案:

答案 0 :(得分:0)

get_member 从缓存中获取 Member,由于循环立即开始,您的机器人的内部缓存尚未准备好,因此它找不到任何内容并返回 None< /p>

简单的解决方法是在 await self.client.wait_until_ready() 中使用 @yourtaskname.before_loop