如何避免aiogram 3开发的Telegram Bot重启后出现消息刷屏问题
解决aiogram 3重启后批量回复离线消息的问题
有两种简单有效的方法可以让Bot重启后忽略离线期间收到的消息:
方法一:使用start_polling的skip_updates参数(推荐)
aiogram 3的Dispatcher.start_polling()方法内置了skip_updates参数,设置为True即可自动跳过所有Bot离线期间积累的未处理更新,启动后只处理新消息。
示例代码:
import asyncio from aiogram import Bot, Dispatcher async def main(): bot = Bot(token="你的Bot令牌") dp = Dispatcher() # 注册你的消息/命令处理器 # ... # 启动Bot并跳过旧更新 await dp.start_polling(bot, skip_updates=True) if __name__ == "__main__": asyncio.run(main())
这个方法是官方推荐的,代码简洁且无需额外逻辑处理。
方法二:手动设置更新偏移量
如果需要更精细的控制,可以手动获取最新的更新ID,通过设置偏移量来跳过旧消息:
示例代码:
import asyncio from aiogram import Bot, Dispatcher async def main(): bot = Bot(token="你的Bot令牌") # 获取最后一条未处理的更新 latest_updates = await bot.get_updates(offset=-1) if latest_updates: # 设置偏移量为最后一条更新ID+1,跳过所有旧更新 await bot.get_updates(offset=latest_updates[-1].update_id + 1) dp = Dispatcher() # 注册你的处理器 # ... await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())
这段代码通过get_updates(offset=-1)获取最后一条更新,再用offset=最新ID+1来确认接收该更新,后续的轮询就只会处理新产生的消息。
内容的提问来源于stack exchange,提问作者Olimpiia_ ART
相关产品推荐
相关产品推荐

