(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
。