我使用node.js和gram-js库来处理TDlib。在我的项目中,我使用GetBroadcastStats调用从多个组收集统计数据。这是一个非常基本的调用,就像在文档中一样。
const stats = await client.invoke(
new Api.stats.GetBroadcastStats({
channel: channel,
dark: true,
})
);
它在大多数情况下都能正常工作,除了少数特定的通道。我得到以下错误
RPCError: 303: STATS_MIGRATE_4 (caused by stats.GetBroadcastStats)
at RPCMessageToError (C:\Users\Igor\Desktop\work\telegram\tgStatistics\node_modules\telegram\errors\index.js:28:12)
at MTProtoSender._handleRPCResult (C:\Users\Igor\Desktop\work\telegram\tgStatistics\node_modules\telegram\network\MTProtoSender.js:517:58)
at MTProtoSender._processMessage (C:\Users\Igor\Desktop\work\telegram\tgStatistics\node_modules\telegram\network\MTProtoSender.js:442:15)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async MTProtoSender._recvLoop (C:\Users\Igor\Desktop\work\telegram\tgStatistics\node_modules\telegram\network\MTProtoSender.js:418:17) {
code: 303,
errorMessage: 'STATS_MIGRATE_4'
经过对文档的一些研究,我找到了这个问题的原因。文件规定:query must be sent to the datacenter with ID channelFull.stats_dc, obtainable using channels.getFullChannel.
在我的例子中,我有数据中心2的客户端,但数据中心4的通道。显然,这是与TDlib本身有关的问题。我不知道如何改变我的客户端的数据中心,甚至是可能的。当我测试的每个电报客户端都无缝地执行统计数据收集时,这个特定的操作需要如此多的额外操作,这似乎有点奇怪。我将感激任何帮助
1条答案
按热度按时间zaqlnxep1#
经过几天的搜索,我终于找到了解决方案。因此,电报文档还包含有关切换服务器的信息。因此,从Telegram下载文件时可能会发生类似的错误。Gram-js库中已经添加了文件下载功能,所以我可以查看源代码如何做到这一点。使用它,我创建了自己的交换数据中心实现。
它在任何情况下对我都有效。但建议只在客户端dcId与fullChannel.fullChat.statsDc不同时实现服务器切换