You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:46:02