Вам нужно разделять логику выполнения команд и обработку событий, чтобы не блокировать работу бота. Для этого вам потребуется распараллелить выполнение команд и обработку событий.
Вы можете использовать asyncio и асинхронные функции для выполнения команд без блокировки работы бота. Воспользуйтесь функцией create_task для запуска асинхронной функции в фоновом режиме и продолжите выполнение других команд.
Вот пример кода, который иллюстрирует идею:
```python
import asyncio
from aiogram import Bot, Dispatcher, types
bot = Bot(token="ТОКЕН")
dp = Dispatcher(bot)
async def long_running_command(chat_id):
# реализуйте вашу команду здесь
await asyncio.sleep(5) # просто ожидание в 5 секунд для демонстрации
# например, отправка сообщения в чат, чтобы пользователь узнал о завершении
await bot.send_message(chat_id, "Команда выполнена")
@dp.message_handler(commands=['my_command'])
async def handle_command(message: types.Message):
chat_id = message.chat.id
# создаем задачу для выполнения асинхронной команды в фоне
asyncio.create_task(long_running_command(chat_id))
await bot.send_message(chat_id, "Команда запущена в фоновом режиме")
@dp.message_handler()
async def handle_message(message: types.Message):
# обработка сообщений со стандартной логикой бота
pass
async def main():
await dp.start_polling()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
```
В этом примере при получении команды "/my_command" создается задача для выполнения функции long_running_command в фоновом режиме при помощи asyncio.create_task. При этом бот продолжит получать и обрабатывать другие сообщения, не блокируя свою работу.
Асинхронные функции выполняются независимо от основного потока выполнения бота, поэтому вы можете иметь несколько параллельных задач, выполняющихся одновременно. Например, вы можете запускать команды в фоне и одновременно слушать и отвечать на сообщения от пользователей.