(discord.py)Client.fetch_channel()和Client.get_channel()之间的差异

(discord.py)Client.fetch_channel()和Client.get_channel()之间的差异,discord.py,Discord.py,从中可以看出,fetch\u channel是一个API调用,它应该返回与get\u channel相同的内容(返回通道) 我尝试使用client.get_channel获取我的dm频道,但它没有返回任何结果。但在我将它改为client.fetch_channel之后,它工作得很好 我在discord.ext.tasks.loop函数中调用了它们(该函数将每n秒调用一次),如下所示: # this alarmSender() will be called every 10 seconds @ta

从中可以看出,
fetch\u channel
是一个API调用,它应该返回与
get\u channel
相同的内容(返回通道)

我尝试使用
client.get_channel
获取我的dm频道,但它没有返回任何结果。但在我将它改为
client.fetch_channel
之后,它工作得很好

我在
discord.ext.tasks.loop
函数中调用了它们(该函数将每n秒调用一次),如下所示:

# this alarmSender() will be called every 10 seconds
@tasks.loop(seconds=10)
async def alarmSender():
    chnl = client.get_channel(dm_channel_id)
    # here chnl == None
    chnl = await client.fetch_channel(dm_channel_id)
    # here chnl == channel object
我只是好奇这两个函数之间有什么区别,让它们返回不同的东西。任何信息都会非常有用。
提前感谢

之所以get_频道对您不起作用,是因为DM频道在连接时不会通过Discord gateway传送给您,而公会频道是。当您使用
fetch_channel
时,您并不是依赖于必须获得该频道的数据,而是Discord拥有的数据,其中当然包括该DM频道的详细信息

什么时候使用?
一般来说,很少有理由需要使用
fetch\u channel
而不是
get\u channel
。如果频道被缓存,您可以使用
get_channel
,并且如果您启用了正确的频道,那么除了您已经获取频道或用户DMs机器人的任何DM频道之外,公会中的所有频道都将被缓存,在这种情况下,您将收到DM频道的详细信息。

fetch\u channel
从API获取信息,进行API调用,
get\u channel
从机器人缓存获取频道对象。建议使用
get\u channel
文档只说一个是API调用,另一个不是(不清楚这是什么意思,因为两者都是API调用),但是应该首选
get\u channel