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

aiogram框架Telegram Bot运行报错求助:Router无message属性

修复aiogram Bot的AttributeError问题

错误原因分析

你遇到的AttributeError: type object 'Router' has no attribute 'message'是因为两个核心问题:

  • 直接使用Router类调用message方法,而非实例化后的Router对象
  • 混淆了aiogram 2.x与3.x的API写法,同时第二段代码存在状态参数传递和注入的错误

修正后的代码方案

方案1(基于aiogram 3.x,使用Router)

首先必须实例化Router对象,同时正确注入FSMContext、修正多行字符串写法:

from aiogram import Router, F
from aiogram.filters import CommandStart
from aiogram.types import Message
from aiogram.fsm.context import FSMContext
# 导入你定义的UserState
from your_module import UserState

# 关键:先实例化Router对象
router = Router()

# 用F.text匹配/start,或更规范的CommandStart过滤器
@router.message(F.text == "/start")
# 也可替换为:@router.message(CommandStart())
async def send_welcome(message: Message, state: FSMContext):
    await state.set_state(UserState.awaiting_function)
    # 用三引号包裹多行字符串,避免语法错误
    await message.reply("""Hi!
I'm EchoBot!
Powered by aiogram.""")

方案2(基于aiogram 2.x,使用Dispatcher)

如果你的项目用aiogram 2.x,修正第二段代码的装饰器和参数注入错误:

from aiogram import Dispatcher, types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Text
# 导入你定义的UserState和已实例化的dp
from your_module import UserState, dp

# 用Text过滤器匹配/start,忽略大小写
@dp.message_handler(Text(equals='/start', ignore_case=True))
async def send_welcome(message: types.Message, state: FSMContext):
    await state.set_state(UserState.awaiting_function)
    await message.reply("""Hi!
I'm EchoBot!
Powered by aiogram.""")

关键修正点总结

  • aiogram 3.x中必须先实例化Router(),用实例对象的message装饰器,不能直接调用Router.message
  • 多行字符串需用三引号包裹,避免语法错误
  • 状态参数state要在函数参数中注入,不能在装饰器里直接传FSMContext类
  • 推荐使用官方提供的过滤器(如CommandStart)匹配命令,比手动判断更可靠

内容的提问来源于stack exchange,提问作者Balsam _

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:42:43