discord.py (rewrite) AttributeError: 'NoneType' object has no attribute 'edit'

discord.py (rewrite) AttributeError: 'NoneType' object has no attribute 'edit'

我正在尝试使用 discord.ext.tasks 添加背景 discord.py 任务。 此任务应该经常将语音通道重命名为机器人的 ping。 这是代码:

    @tasks.loop(seconds=1.0)
    async def ping_display(self):
        ch = None
        chs = self.client.get_all_channels()
        for chan in chs:
            if chan.id == display:
                ch = chan

        await ch.edit(name=f'Ping - {round(self.client.latency * 1000)}ms')

我收到以下错误:

Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/tasks/__init__.py", line 101, in _loop
    await self.coro(*args, **kwargs)
  File "/blah/blah/blah/blah/cogs/background_tasks.py", line 29, in ping_display
    await ch.edit(name=f'Ping - {round(self.client.latency * 1000)}ms')
AttributeError: 'NoneType' object has no attribute 'edit'

对于上下文,display 是 'display' 频道的 ID。

几个月前,我遇到了同样的错误,通常是因为循环在程序 运行 时调用,即使客户端没有连接到 discord.py。为了解决这个问题,可以在任务后添加如下代码:

@ping_display.before_loop
async def before_ping_display(self):
    await self.client.wait_until_ready()

这使得任务会等到您的程序建立连接,然后它会 运行。

另一种可能的情况是您没有找到 self.client.get_all_channels 中的频道。您还可以通过以下方式获取特定频道:

guild = self.client.get_guild(guild_id)
ch = guild.get_channel(channel_id)