get_channel 在 tasks.loop() discord python 中不工作

问题描述 投票:0回答:1

我的 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 的第二次调用实际上有效并且在尝试一次后它停止工作,这让我感到惊讶并且不知道会发生什么(我没有改变代码只是运行两次)

python loops asynchronous discord
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.