Как настроить общее хранилище для хранения состояний в Aiogram 3?

Как правильно связать 3 роутера для разных хендлеров в одно хранилище класса MemoryStorage вместо того, чтобы каждый из них имел свое состояние? В прошлом все хендлеры были в одном файле с одним роутером, и все работало правильно. Как можно достичь этого вновь, разделив хендлеры на 3 файла с 3 роутерами?
  • 29 мая 2024 г. 15:31
Ответы на вопрос 2
Для настройки общего хранилища для хранения состояний в Aiogram 3, вам необходимо создать экземпляр класса MemoryStorage и передать его в качестве параметра при создании объекта класса Dispatcher. Например:

```python
from aiogram import Bot, Dispatcher
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.contrib.middlewares.logging import MemoryStorage

bot = Bot(token="YOUR_TOKEN")
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
dp.middleware.setup(LoggingMiddleware())
```

Для связывания 3 роутеров для разных хендлеров в одно хранилище класса MemoryStorage, вам необходимо создать каждый роутер в отдельном файле и передать им общее хранилище при создании объекта класса Dispatcher. Затем импортировать все роутеры в главном файле приложения и добавить их в диспетчер. Например:

file1.py:
```python
from aiogram import Dispatcher

dp = Dispatcher()
```

file2.py:
```python
from aiogram import Dispatcher

dp = Dispatcher()
```

file3.py:
```python
from aiogram import Dispatcher

dp = Dispatcher()
```

main.py:
```python
from aiogram import Bot, Dispatcher
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.contrib.middlewares.logging import MemoryStorage
from file1 import dp as dp1
from file2 import dp as dp2
from file3 import dp as dp3

bot = Bot(token="YOUR_TOKEN")
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
dp.middleware.setup(LoggingMiddleware())

dp.register(dp1)
dp.register(dp2)
dp.register(dp3)
```

Таким образом, вы сможете связать 3 роутера для разных хендлеров в одно общее хранилище и разделить хендлеры по файлам.
Проблема в том, что ты даже не пытался попробовать, хранилище настраиваются у Dispatcher, ему пофиг на кол-во роутеров. 

Хотелось бы понять, как с ним работать?
открыть доки и почитать, открыть гитхаб и посмотреть примеры, погуглить наконец, а не бежать сразу сюда.
Похожие вопросы