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

Aiogram 3.x.x中路由器连接及main.py代码调整方法

Aiogram 3.x 无装饰器注册命令并连接路由器到Dispatcher的实现

第一步:修改 handlers/common.py

先创建路由器实例,直接调用注册方法绑定cmd_start函数到/start命令,核心是用router.message.register()配合命令过滤器实现无装饰器注册:

from aiogram import Router
from aiogram.types import Message
from aiogram.filters import Command

# 创建路由器实例
router = Router()

# 定义/start命令的处理函数
async def cmd_start(message: Message):
    await message.answer("Hello, world!")

# 无装饰器注册:将处理函数与/start命令绑定
router.message.register(
    cmd_start,
    Command(commands=["start"])
)

如果需要注册其他命令,重复调用router.message.register(),替换对应的处理函数和过滤器即可。

第二步:修改 main.py

导入定义好的路由器,通过dp.include_router()将路由器挂载到Dispatcher上,完整示例如下:

import asyncio
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from handlers.common import router  # 导入common模块的路由器

# 替换为你的机器人TOKEN
BOT_TOKEN = "你的机器人TOKEN"

async def main():
    bot = Bot(token=BOT_TOKEN, parse_mode=ParseMode.HTML)
    dp = Dispatcher()

    # 将路由器连接到Dispatcher
    dp.include_router(router)

    # 清空积压的未处理更新(可选,避免机器人启动后收到旧消息)
    await bot.delete_webhook(drop_pending_updates=True)
    # 启动长轮询
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

关键说明

  • Aiogram 3.x的路由器是模块化管理处理函数的核心,每个路由器可独立管理一组相关的命令/消息处理逻辑,最后统一挂载到Dispatcher即可生效。
  • 无装饰器注册和装饰器注册的功能完全等价,只是写法更显式,本质都是将处理函数与触发条件(如命令过滤器)绑定到路由器上。

内容的提问来源于stack exchange,提问作者Alexander Grenkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:43:16