Чтобы запустить несколько ботов с использованием `aiogram` и вписать функцию с циклом, вам нужно использовать асинхронное программирование и возможно `aiogram.Dispatcher`, которые позволят обрабатывать разные ботов одновременно. Давайте рассмотрим пример с несколькими ботами:
```python
from aiogram import Bot, Dispatcher, types, executor
import asyncio
from os import getenv
API_TOKEN_1 = getenv('TELEGRAM_API_TOKEN_1')
API_TOKEN_2 = getenv('TELEGRAM_API_TOKEN_2')
# Создаем два бота и диспетчера
bot1 = Bot(token=API_TOKEN_1)
dp1 = Dispatcher(bot1)
bot2 = Bot(token=API_TOKEN_2)
dp2 = Dispatcher(bot2)
# Создаем обработчик сообщений для первого бота
@dp1.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Привет! Я бот 1.")
# Создаем отдельный обработчик для второго бота
@dp2.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Привет! Я бот 2.")
# Пример асинхронной функции с циклом, которая может работать параллельно
async def cyclic_task():
while True:
print("Циклическая задача работает...")
await asyncio.sleep(10) # Задержка для имитации работы функции
if __name__ == '__main__':
# Создаем асинхронную задачу для циклической функции
loop = asyncio.get_event_loop()
loop.create_task(cyclic_task())
# Запускаем ботов с помощью асинхронного executors
tasks = [executor.start_polling(dp1, skip_updates=True),
executor.start_polling(dp2, skip_updates=True)]
loop.run_until_complete(asyncio.gather(*tasks))
```
В этом примере у нас имеется два бота, каждый с собственным API-токеном и обработчиком команды '/start'. Также присутствует асинхронная функция `cyclic_task`, выполняющаяся в бесконечном цикле, которая запускается как асинхронная задача и выполняется параллельно основному процессу ботов.
Обратите внимание, что функция `cyclic_task` не будет блокировать выполнение других асинхронных операций, благодаря использованию `asyncio.sleep()`, что позволяет сопрограмме уступать управление обратно event loop.
Таким образом, мы можем запустить несколько асинхронных задач и ботов одновременно, используя `asyncio`. Но помните, что все токены должны быть разными и их стоит хранить в безопасных местах, например, в переменных окружения.