TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
帖子内容
Telegram Bot API 提到: 1. update 的 ID 从某个正整数开始连续递增,但如果至少一周没有 update,下一个 ID 会重新随机选择,而非连续递增。 2. getUpdates 接口的 offset 参数应当设置为收到的最大 ID + 1,小于它的 update 均被视为已确认。 3. 所有整数字段,除非特别说明,都可以安全地用 32 位有符号数存储。 这几条规则合在一起让我完全摸不着头脑——如果持续收 2^31 条 update 怎么办?如果 ID 被重新随机选择成更小的值了,调用 getUpdates 岂不是会意外确认掉还没收到过的新消息?为什么我实际测试时,指定更大的 offset 仍然可以拿到更小 ID 的 update? 读了相关代码后,我明白了为什么大家写的 bot 一般都不会出问题了,但仍然觉得整个设计挺怪异的: 1. 长时间没有 update 或者 ID 达到 2e9 都会导致重新随机选择 ID,随机范围是 2e6 到 1e9。 2. offset 参数比最新 ID 大 10 或比最早的未确认的 ID 小 1e5 就会被忽略,不确认任何 update,只正常返回实际列表。 3. 如果 ID 达到 2e9 时存在未确认的 update,似乎会修改它们的 ID(也可能是丢掉,这里我不太确定代码中一些函数的语义)。