Pyrogram收到updatesTooLong响应后停止处理更新如何解决?
Pyrogram
UpdatesTooLong 错误修复方案 UpdatesTooLong 是Telegram服务端返回的标准状态,意为bot离线/断连时间过长,服务端缓存的待推送更新数量超过阈值,不再主动推送新消息,需要客户端主动同步更新恢复正常监听。
修复步骤
1. 优先使用框架内置处理逻辑
Pyrogram已经内置了该场景的自动处理能力,仅需在初始化Client时配置对应参数即可,无需额外写代码:
from pyrogram import Client app = Client( "session_name", api_id=你的API_ID, api_hash="你的API_HASH", # 开启takeout模式,自动处理大批次更新同步 takeout=True, # 断连后最大等待阈值,单位秒,超过阈值自动触发全量更新同步 sleep_threshold=300 )
2. 自定义异常捕获处理(适配特殊业务场景)
如果你需要自行控制更新同步逻辑,可以通过全局异常捕获手动处理:
from pyrogram.errors import UpdatesTooLong @app.on_raw_update() async def raw_update_handler(client, update, users, chats): try: # 正常的更新处理逻辑 pass except UpdatesTooLong: # 方案A:需要处理积压的历史消息 # 拉取最多200条积压更新,可根据业务需求调整limit值 pending_updates = await client.get_updates(limit=200) for upd in pending_updates: # 调用你原有业务逻辑处理拉取到的历史更新 await your_update_process_func(upd) # 确认最新更新偏移量,避免重复拉取 if pending_updates: await client.get_updates(offset=pending_updates[-1].update_id + 1) # 方案B:不需要处理积压的历史消息,直接同步到最新状态 # await client.get_updates(offset=-1)
3. 长期运行优化建议
- 搭配进程守护工具(systemd、pm2等)部署bot,进程异常退出后自动重启
- 每24小时主动调用一次
await client.get_updates(limit=1)校验同步状态,避免长时间运行出现同步偏移 - 如果仅需要监听实时消息,不需要处理断连期间的历史消息,建议选择上述方案B跳过积压更新,减少不必要的性能消耗
内容的提问来源于stack exchange,提问作者Yaroslav Hladkyi
相关产品推荐
相关产品推荐

