Для того чтобы переделать код с aiogram2 на aiogram3, вам придется внести некоторые изменения, так как aiogram3 внес некоторые значительные изменения в API и структуру библиотеки. Вот некоторые основные изменения, которые вам понадобятся:
1. Изменение импортов: В aiogram2 вы использовали следующие импорты:
from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage
В aiogram3 импорты будут выглядеть так:
from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage
2. Изменение способа инициализации бота и диспетчера: В aiogram3 теперь требуется явно указывать токен бота при создании объекта Bot. Также, в aiogram3 необходимо инициализировать диспетчер при создании приложения. Вот как это будет выглядеть в aiogram3:
bot = Bot(token="YOUR_BOT_TOKEN") dp = Dispatcher(bot, storage=MemoryStorage())
3. Изменение обработчиков команд: В aiogram3 изменился синтаксис и некоторые детали при определении обработчиков команд. Теперь обработчики команд могут быть определены как декораторы функций. Вот пример, как это может выглядеть в aiogram3:
@dp.message() async def start_command(message: types.Message): await message.answer("Hello, welcome to my bot!")
Также, в aiogram3 вместо message.reply()
следует использовать message.answer()
для отправки ответного сообщения.
4. Изменение работы с состояниями (FSM): В aiogram3 произошли изменения в рабое с состояниями. Теперь для работы с FSM необходимо использовать state_fsm
, которое можно инициализировать с помощью FSMContext
. Вот пример инициализации и использования FSM в aiogram3:
from aiogram import types from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters.state import State, StatesGroup class Form(StatesGroup): name = State() age = State() gender = State() @dp.message_handler(commands='start') async def cmd_start(message: types.Message, state: FSMContext): await Form.name.set() await message.reply('What is your name?') @dp.message_handler(state=Form.name) async def process_name(message: types.Message, state: FSMContext): async with state.proxy() as data: data['name'] = message.text await Form.next() await message.reply('How old are you?') @dp.message_handler(state=Form.age) async def process_age(message: types.Message, state: FSMContext): async with state.proxy() as data: data['age'] = message.text await Form.next() # ... и так далее
Это основные изменения, которые вам нужно внести при переходе с aiogram2 на aiogram3. Однако, помимо этих изменений, может быть, что вам придется внести другие мелкие корректировки в зависимости от особенностей вашего кода. Не забудьте ознакомиться с документацией aiogram3 для получения более полной информации о том, как работать с новой версией библиотеки.