Чтобы запустить несколько ботов в Aiogram 3, вы можете использовать список токенов и инициализировать для каждого токена отдельный экземпляр `Bot` и `Dispatcher`. Вот пример того, как это можно реализовать в вашей функции `main`:
```python
import logging
import sys
from aiohttp import web
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.utils import SimpleRequestHandler, setup_application
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.utils import start_webhook
# Настройки вашего бота
MAIN_BOT_PATH = '/webhook'
WEB_SERVER_HOST = '0.0.0.0'
WEB_SERVER_PORT = 3000
# Не забудьте инициализировать правильный storage
storage = MemoryStorage()
async def on_startup(dispatcher: Dispatcher):
# ваш код для инициализации
pass
def main():
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
session = AiohttpSession()
bot_settings = {"session": session, "default": DefaultBotProperties(parse_mode="HTML")}
main_dispatcher = Dispatcher(storage=storage)
main_dispatcher.include_router(router.main)
main_dispatcher.include_router(router.user_main)
main_dispatcher.startup.register(on_startup)
app = web.Application()
# Создаем основной бот
main_bot = Bot(token=api_bot, **bot_settings)
SimpleRequestHandler(dispatcher=main_dispatcher, bot=main_bot).register(app, path=MAIN_BOT_PATH)
# Список токенов для мультиботов
bot_list = [
"токен 1",
"токен 2"
]
# Создаем и запускаем дополнительных ботов
for token in bot_list:
# Создаем экземпляр бота
new_bot = Bot(token=token, **bot_settings)
# Создаем новый диспетчер для этого бота
multibot_dispatcher = Dispatcher(storage=storage)
multibot_dispatcher.include_router(router.user_multi) # Подключите необходимые роутеры
# Регистрируем обработчики для этого бота
SimpleRequestHandler(dispatcher=multibot_dispatcher, bot=new_bot).register(app, path=f"/{token}")
# Настройка приложения
setup_application(app, main_dispatcher, bot=main_bot)
setup_application(app, multibot_dispatcher)
# Запуск веб-приложения
web.run_app(app, host=WEB_SERVER_HOST, port=WEB_SERVER_PORT)
if __name__ == "__main__":
main()
```
### Объяснение кода:
1. **Импорт нужных библиотек:** Убедитесь, что у вас доступны все необходимые импорты, такие как `Bot`, `Dispatcher`, `web.Application` и другие.
2. **Создание экземпляра бота:** В цикле по списку токенов создается новый экземпляр бота `new_bot` для каждого токена.
3. **Создание отдельного диспетчера:** Для каждого нового бота создается новый `Dispatcher` (`multibot_dispatcher`), в который можно подключить нужные роутеры и обработчики.
4. **Регистрируем обработчики:** Используя `SimpleRequestHandler`, вы регистрируете путь и связанные с ним диспетчеры.
5. **Настройка и запуск приложения:** После того, как все боты зарегистрированы, приложение запускается.
Убедитесь, что у вас есть необходимые обработчики для каждого из ботов и корректные пути. Этот пример демонстрирует лишь общую структуру и концепцию для инициализации нескольких ботов.