Как переделать этот кусок кода с aiogram2 на aiogram3?

Для того чтобы переделать код с 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 для получения более полной информации о том, как работать с новой версией библиотеки.