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

Python Aiogram开发Telegram Bot遇Dispatcher初始化参数错误

Aiogram中Dispatcher初始化错误的解决方法

问题原因

你遇到的TypeError: Dispatcher.__init__() takes 1 positional argument but 2 were given错误,是因为代码采用了Aiogram 2.x版本的写法,但当前安装的是Aiogram 3.x版本。两个版本在Dispatcher的初始化逻辑上存在差异:

  • Aiogram 2.x中,Dispatcher初始化必须传入Bot实例
  • Aiogram 3.x中,Dispatcher初始化不需要直接传入Bot实例,而是在启动阶段关联

解决方法

方法1:适配Aiogram 3.x版本修改代码

修改两处关键代码即可:

  1. 初始化Dispatcher时不再传入bot参数
  2. 启动轮询时显式传入bot参数

修改后的完整代码:

import logging
from aiogram import Bot, Dispatcher, types
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

# Установка токена бота (замените 'YOUR_BOT_TOKEN' на ваш токен)
TOKEN = 'TOKEN'

# Включаем логгирование
logging.basicConfig(level=logging.INFO)

# Инициализируем бота и диспетчера
bot = Bot(token=TOKEN)
dp = Dispatcher()  # 移除传入的bot参数

# Создаем клавиатуру
menu_markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
menu_markup.add(KeyboardButton('Кнопка 1'), KeyboardButton('Кнопка 2'))
menu_markup.add(KeyboardButton('Кнопка 3'), KeyboardButton('Кнопка 4'))
menu_markup.add(KeyboardButton('Кнопка 5'), KeyboardButton('Кнопка 6'))

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    await message.answer("Привет! Выберите опцию:", reply_markup=menu_markup)

# Обработчик нажатия на кнопку
@dp.message_handler(lambda message: message.text in ['Кнопка 1', 'Кнопка 2', 'Кнопка 3', 'Кнопка 4', 'Кнопка 5', 'Кнопка 6'])
async def handle_button_click(message: types.Message):
    # Получаем текст для отправки
    text_to_send = "Текст, который ты хочешь отправить"

    # Создаем клавиатуру для "Проверить оплату"
    check_payment_markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
    check_payment_markup.add(KeyboardButton('Проверить Оплату'))

    # Отправляем текст и клавиатуру
    await message.answer(text_to_send, reply_markup=check_payment_markup)

# Обработчик нажатия на кнопку "Проверить Оплату"
@dp.message_handler(lambda message: message.text == 'Проверить Оплату')
async def check_payment(message: types.Message):
    # Отправляем сообщение о том, что оплата не обнаружена
    await message.answer("Оплата не обнаружена")

if __name__ == '__main__':
    from aiogram import executor

    # Запускаем бота,新增bot参数
    executor.start_polling(dp, bot=bot, skip_updates=True)

方法2:降级到Aiogram 2.x版本

如果想保留原有代码结构,无需修改代码,只需卸载当前版本并安装2.x稳定版:

pip uninstall aiogram
pip install aiogram==2.25.1

内容的提问来源于stack exchange,提问作者Nick Vek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:34