User: не запускается, в чём может быть проблемма?

user.py:
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.filters import CommandStart, Command

from app.gpt import ask_gpt


# Словарь для хранения истории запросов каждого пользователя
user_data = {}

user = Router()


@user.message(CommandStart())
async def cmd_start(message: Message):
    await message.answer('Добро пожаловать в бот!\nЧто напишешь, то и будет запросом\nКартинки генерируются следующим образом\n"/img text" в 1 сообщение')
    

class UserHistory:
    def __init__(self, max_size=10):
        self.max_size = max_size
        self.history = []

    def add_query(self, query):
        if len(self.history) >= self.max_size:
            self.history.pop(0)  # Удаляем самый старый запрос
        self.history.append(query)

    def get_history(self):
        return self.history


@user.message(Command('history'))
async def send_history(message: Message):
    user_id = message.from_user.id
    if user_id in user_data:
        history = user_data[user_id].get_history()
        if history:
            history_text = "\n".join(history)
            await message.reply(f"Твоя история:\n{history_text}")
        else:
            await message.reply("У тебя ещё нет истории!")
    else:
        await message.reply("У тебя ещё нет истории!")


@user.message(F.text)
async def generate(message: Message):
    text = message.text
    user_id = message.from_user.id
    if user_id not in user_data:
        user_data[user_id] = UserHistory()
    user_data[user_id].add_query(f'Я: {message.text}')
    
    history = user_data[user_id].get_history()
    if history:
        history_text = "\n".join(history)
    answer = ask_gpt(f'!ОТВЕЧАЙ НА РУССКОМ ЯЗЫКЕ, ЕСЛИ Я НЕ ПОПРОШУ ПОЗЖЕ НА ДРУГОМ!!начало памяти прошлых сообщений {history_text}!конец памяти!Я:{message.text}')
    await message.answer(answer)
    user_data[user_id].add_query(f'Ты: {answer}')
    
gpt.py
from g4f.client import Client

from config import IMAGE_MODEL_LIST, TEXT_MODEL_LIST

    
def ask_gpt(response):
    client = Client()
    
    for model in TEXT_MODEL_LIST:
        try:
            response = client.chat.completions.create(
                model=model,
                messages=[{"role": "user", "content": response}],
            )
                
            return f'{model}: {response.choices[0].message.content}'
        except Exception as err:
            print(f'Ошибка: {err}')
        continue
    
def generate_image_gpt(response):
    client = Client()
    image_urls = []
        
    for model in IMAGE_MODEL_LIST:
        try:
            answer = client.images.generate(
                model=model,
                prompt=response,
            )
            image_url = answer.data[0].url
            image_urls.append(image_url)
        except Exception as err:
            print(f"Ошибка:\nМодель: {model}\nКод ошибки: {err}")
        
    return image_urls
```python
import asyncio
import logging

from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode


from app.user import user
from config import TOKEN



logger = logging.getLogger(__name__)
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))


async def startup(dispatcher: Dispatcher):
    logger.info('start')


async def shutdown(dispatcher: Dispatcher):
    logger.info('finish')
    exit(0)


async def main():
    dp = Dispatcher()
    dp.include_router(user)
    dp.startup.register(startup)
    dp.shutdown.register(shutdown)

    await dp.start_polling(bot)


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        pass
```
Assistant: Проблема с запуском вашего кода может быть вызвана несколькими факторами. Давайте рассмотрим несколько основных моментов, которые стоит проверить:

1. **Импортируемые библиотеки**: Убедитесь, что все необходимые библиотеки установлены. Вам нужны:
   - `aiogram`
   - `g4f`
   - Другие зависимости, указанные в вашем коде.

   Вы можете установить их с помощью pip:
   ```bash
   pip install aiogram g4f
   ```

2. **Конфигурация**: Убедитесь, что в вашем файле `config.py` правильно указаны все необходимые параметры, такие как `TOKEN`, `IMAGE_MODEL_LIST`, и `TEXT_MODEL_LIST`. Если `TOKEN` пустой или неверный, бот не сможет запуститься.

3. **Обработка ошибок**: Проверьте, есть ли в вашем коде какие-либо ошибки, которые могут возникнуть во время выполнения. Например, если `ask_gpt` не работает должным образом, это может привести к сбоям.

4. **Логирование**: Убедитесь, что логирование настроено правильно. Вы можете добавить больше логов, чтобы понять, на каком этапе происходит сбой. Например, добавьте логирование в функции `ask_gpt` и в обработчики сообщений.

5. **Асинхронность**: Убедитесь, что вы правильно работаете с асинхронным кодом. В вашем случае вы используете `asyncio.run(main())`, что правильно, но проверьте, что нет блокировок в вашем коде, которые могут вызвать зависание.

6. **Проверка на ошибки**: Если бот не запускается, попробуйте добавить обработку исключений в основной функции `main`, чтобы отловить и вывести любые ошибки, которые могут возникнуть:
   ```python
   if __name__ == "__main__":
       logging.basicConfig(level=logging.INFO)
       try:
           asyncio.run(main())
       except Exception as e:
           logger.error(f"Ошибка при запуске бота: {e}")
       except KeyboardInterrupt:
           pass
   ```

7. **Проверка на наличие зависимостей**: Убедитесь, что все импорты корректны и все модули доступны. Например, проверьте, что `from app.user import user` и `from app.gpt import ask_gpt` работают без ошибок.

Если после всех этих проверок проблема не решается, попробуйте запустить код в изолированной среде (например, в виртуальном окружении) и посмотрите, не возникает ли каких-либо дополнительных ошибок.
User: код даже не начинает работу, просто зависает на старте
```python
import asyncio
import logging

from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode


from app.user import user
from config import TOKEN



logger = logging.getLogger(__name__)
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))


async def startup(dispatcher: Dispatcher):
    logger.info('start')


async def shutdown(dispatcher: Dispatcher):
    logger.info('finish')
    exit(0)


async def main():
    dp = Dispatcher()
    dp.include_router(user)
    dp.startup.register(startup)
    dp.shutdown.register(shutdown)

    await dp.start_polling(bot)


if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        pass
```
Assistant: