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)
我正在尝试使用 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)