我的 get_channel 函数一直有问题。我希望机器人每 60 秒(测试 5 秒)给我给定频道上的用户列表。在我运行代码后,我没有得到任何响应,没有异常出现,但即使是在函数未写入之前的打印也没有提到 get_channel 响应。
client = commands.Bot(command_prefix=get_prefix, intents=discord.Intents.all(), help_command = None)
@client.event
async def on_ready():
await client.tree.sync()
change_status.start()
get_users.start()
@tasks.loop(seconds=5)
async def get_users(ctx):
channel = client.get_channel(1082719335375720448)
print(channel.members)
await ctx.send(channel)
我已经经历了很多可能的解决方案,比如启用所有意图,尝试使用“await asyncio.sleep(1)”,但没有任何效果。我知道 get_channels 只有在机器人准备就绪时才会工作,所以我注意到下面的代码可以工作,但它不是想要的循环。
@client.event
async def on_ready():
channel = client.get_channel(1082719335375720448)
print(channel.members)
print("Bot is connected to discord")
await client.tree.sync()
channel = client.get_channel(1082719335375720448)
print(channel.members)
change_status.start()
get_users.start()
我注意到的另一件事是上面代码中包含的 get_channel 的第二次调用实际上有效并且在尝试一次后它停止工作,这让我感到惊讶并且不知道会发生什么(我没有改变代码只是运行两次)
get_channel
仅当通道在客户端缓存中时才有效。不能保证是这样,所以我们也可以使用 fetch
来获取频道。
@tasks.loop(seconds=5)
async def get_users(ctx):
channel = client.get_channel(1082719335375720448)
if not channel:
# get_channel didn't find it
channel = await client.fetch_channel(1082719335375720448)
这仅在无法在本地缓存中找到频道时使用
fetch
。