Пользователь спросил: '@dp.message(lambda message: message.text == "❓ Задать вопрос")
async def start_chat(message: types.Message, state: FSMContext):
    if not await check_subscription(message.from_user.id):
        await message.answer(
            "Для использования бота необходимо подписаться на наш канал!",
            reply_markup=get_subscription_keyboard()
        )
        return
    if message.from_user.id in chat_contexts:
        chat_contexts.pop(message.from_user.id)
    await message.answer("Введите ваш запрос")
    await state.set_state(ChatStates.chatting)
    chat_contexts[message.from_user.id] = [{"role": "system",
                                            "content": "Пожалуйста, используй обычные математические символы и знаки вместо HTML-форматирования. Например, используй *, /, ^, ≤, ≥, ≠, ∑, ∏, √ и другие символы напрямую."}]





@dp.message(ChatStates.chatting)
async def handle_message(message: types.Message, state: FSMContext):
    if not await check_subscription(message.from_user.id):
        await message.answer(
            "Для использования бота необходимо подписаться на наших спонсоров!",
            reply_markup=get_subscription_keyboard()
        )
        return

    user_id = message.from_user.id
    user_input = message.text.strip()

    if user_id not in chat_contexts:
        chat_contexts[user_id] = [
            {"role": "system", "content": "Пожалуйста, ответь на вопрос пользователя четко и понятно."}]
    chat_contexts[user_id].append({"role": "user", "content": user_input})

    await message.bot.send_chat_action(message.chat.id, "typing")

    prompt = f"Пользователь спросил: '{user_input}'. Ответь четко и ясно на его вопрос."
    prompt += "\nИстория беседы:\n" + "\n".join([item["content"] for item in chat_contexts[user_id]])

    try:
        response = g4f.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
        )

        if isinstance(response, dict) and 'choices' in response:
            assistant_message = response['choices'][0]['message']['content']
        else:
            assistant_message = str(response)

    except Exception as e:
        assistant_message = f"Произошла ошибка при генерации ответа: {str(e)}"

    chat_contexts[user_id].append({"role": "assistant", "content": assistant_message})

    decoded_response = html.unescape(assistant_message)
    split_messages = split_long_message(decoded_response)

    for msg in split_messages:
        await message.answer(msg, reply_markup=get_chat_keyboard(), parse_mode="Markdown")


Сделай, чтобы не было необходимости каждый раз нажимать "Задать вопрос". Можно было бы просто написать что-либо в чат и нейросеть бы ответила'. Ответь четко и ясно на его вопрос.
История беседы:
Пожалуйста, используй обычные математические символы и знаки вместо HTML-форматирования. Например, используй *, /, ^, ≤, ≥, ≠, ∑, ∏, √ и другие символы напрямую.
@dp.message(lambda message: message.text == "❓ Задать вопрос")
async def start_chat(message: types.Message, state: FSMContext):
    if not await check_subscription(message.from_user.id):
        await message.answer(
            "Для использования бота необходимо подписаться на наш канал!",
            reply_markup=get_subscription_keyboard()
        )
        return
    if message.from_user.id in chat_contexts:
        chat_contexts.pop(message.from_user.id)
    await message.answer("Введите ваш запрос")
    await state.set_state(ChatStates.chatting)
    chat_contexts[message.from_user.id] = [{"role": "system",
                                            "content": "Пожалуйста, используй обычные математические символы и знаки вместо HTML-форматирования. Например, используй *, /, ^, ≤, ≥, ≠, ∑, ∏, √ и другие символы напрямую."}]





@dp.message(ChatStates.chatting)
async def handle_message(message: types.Message, state: FSMContext):
    if not await check_subscription(message.from_user.id):
        await message.answer(
            "Для использования бота необходимо подписаться на наших спонсоров!",
            reply_markup=get_subscription_keyboard()
        )
        return

    user_id = message.from_user.id
    user_input = message.text.strip()

    if user_id not in chat_contexts:
        chat_contexts[user_id] = [
            {"role": "system", "content": "Пожалуйста, ответь на вопрос пользователя четко и понятно."}]
    chat_contexts[user_id].append({"role": "user", "content": user_input})

    await message.bot.send_chat_action(message.chat.id, "typing")

    prompt = f"Пользователь спросил: '{user_input}'. Ответь четко и ясно на его вопрос."
    prompt += "\nИстория беседы:\n" + "\n".join([item["content"] for item in chat_contexts[user_id]])

    try:
        response = g4f.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
        )

        if isinstance(response, dict) and 'choices' in response:
            assistant_message = response['choices'][0]['message']['content']
        else:
            assistant_message = str(response)

    except Exception as e:
        assistant_message = f"Произошла ошибка при генерации ответа: {str(e)}"

    chat_contexts[user_id].append({"role": "assistant", "content": assistant_message})

    decoded_response = html.unescape(assistant_message)
    split_messages = split_long_message(decoded_response)

    for msg in split_messages:
        await message.answer(msg, reply_markup=get_chat_keyboard(), parse_mode="Markdown")


Сделай, чтобы не было необходимости каждый раз нажимать "Задать вопрос". Можно было бы просто написать что-либо в чат и нейросеть бы ответила