Вот мой текущий код:
import g4f
import speech_recognition as sr
import json
import os
import sys
from g4f.client import Client
import pyttsx3
from datetime import datetime, timedelta
import subprocess  # Для открытия проводника

# Инициализация распознавания речи
recognizer = sr.Recognizer()

# Инициализация клиента для работы с GPT и DALL·E
client = Client()

# Инициализация pyttsx3 для озвучивания
engine = pyttsx3.init()
engine.setProperty('rate', 240)  # Скорость речи
engine.setProperty('volume', 1)  # Громкость речи (от 0.0 до 1.0)

# Путь для сохранения изображений
IMAGE_SAVE_PATH = r"C:\Users\ваня\OneDrive\Изображения\меджорни"

# Путь к текущему файлу
CURRENT_FILE_PATH = os.path.abspath(__file__)

# Путь к файлу для хранения времени последнего запуска
LAST_RUN_FILE = "last_run.txt"

# Путь для временного файла
TEMP_FILE_PATH = "temp_code_test.py"


def speak(text):
    """Озвучивание текста с помощью pyttsx3."""
    try:
        engine.say(text)
        engine.runAndWait()
    except Exception as e:
        print(f"Ошибка при озвучивании: {e}")


def listen():
    """Распознавание речи пользователя."""
    with sr.Microphone() as source:
        print("Слушаю...")
        audio = recognizer.listen(source)
        try:
            content = recognizer.recognize_google(audio, language="ru-RU")
            print(f"Вы сказали: {content}")
            return content
        except sr.UnknownValueError:
            speak("Не удалось распознать команду.")
        except sr.RequestError:
            speak("Ошибка соединения.")
        return ""


def check_last_run():
    """Проверяет, когда бот запускался в последний раз."""
    if os.path.exists(LAST_RUN_FILE):
        with open(LAST_RUN_FILE, "r") as file:
            last_run_str = file.read().strip()
            last_run_time = datetime.strptime(last_run_str, "%Y-%m-%d %H:%M:%S")
            # Если прошло менее 24 часов, вернуть True
            if datetime.now() - last_run_time < timedelta(hours=24):
                return True
    return False


def update_last_run():
    """Обновляет время последнего запуска бота."""
    with open(LAST_RUN_FILE, "w") as file:
        file.write(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))


def get_ai_response(command):
    """Отправка запроса в GPT с контекстом."""
    try:
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=[{"role": "user", "content": command}]
        )
        if response and response.choices:
            ai_message = response.choices[0].message.content
            print(f"AI ответил: {ai_message}")
            return ai_message
        else:
            return "Не удалось получить ответ от AI."
    except Exception as e:
        print(f"Ошибка при запросе к AI: {e}")
        return "Произошла ошибка при получении ответа от AI."


def read_current_code():
    """Считывание всего кода из текущего файла."""
    try:
        with open(CURRENT_FILE_PATH, "r", encoding="utf-8") as file:
            return file.read()
    except Exception as e:
        print(f"Ошибка при чтении файла: {e}")
        return ""


def test_new_code(temp_code):
    """Тестирование нового кода в отдельном файле."""
    try:
        # Записываем временный код в отдельный файл
        with open(TEMP_FILE_PATH, "w", encoding="utf-8") as temp_file:
            temp_file.write(temp_code)

        # Пробуем запустить временный файл
        result = os.system(f"C:\\Users\\ваня\\AppData\\Local\\Programs\\Python\\Python311\\python.exe {TEMP_FILE_PATH}")

        # Если запуск прошёл успешно (код возврата 0)
        if result == 0:
            return True
        else:
            return False
    except Exception as e:
        print(f"Ошибка при тестировании нового кода: {e}")
        return False


def update_code(new_code):
    """Обновление текущего кода с тестированием."""
    if test_new_code(new_code):
        try:
            with open(CURRENT_FILE_PATH, "w", encoding="utf-8") as file:
                file.write(new_code)
            speak("Код успешно обновлён. Перезагружаю систему...")
            os.execv(sys.executable, ['python'] + sys.argv)
        except Exception as e:
            speak(f"Ошибка при обновлении кода: {e}")
    else:
        speak("Тестирование нового кода не прошло. Обновление отменено.")


def extract_code_from_response(response):
    """Извлекает код из ответа GPT."""
    if "```" in response:
        code_blocks = []
        parts = response.split("```")
        for i in range(1, len(parts), 2):
            if parts[i].strip().startswith("python"):
                code = parts[i].replace("python", "", 1).strip()
                code_blocks.append(code)
        return "\n".join(code_blocks)
    else:
        return ""


def self_modify(command):
    """Получение нового кода от GPT для обновления себя."""
    speak("Получаю обновление кода...")
    current_code = read_current_code()
    prompt = f"""Вот мой текущий код:
{current_code}

Пожалуйста, измени его по следующей инструкции: {command}"""
    new_code = get_ai_response(prompt)

    # Извлекаем только код из ответа GPT
    new_code = extract_code_from_response(new_code)

    if new_code:
        update_code(new_code)
    else:
        speak("Не удалось получить обновление кода.")


def open_explorer(path="C:\\"):
    """Функция для открытия проводника Windows."""
    try:
        subprocess.run(["explorer", path], check=True)
        speak(f"Открываю проводник в {path}")
    except Exception as e:
        speak(f"Ошибка при открытии проводника: {e}")


def main():
    # Приветствие на основе времени последнего запуска
    if check_last_run():
        speak("И снова здравствуйте!")
    else:
        speak("Привет! Я ваш помощник.")

    update_last_run()

    while True:
        command = listen()
        if command:
            if command.lower().startswith("нарисуй"):
                prompt = command[len("нарисуй "):]
                speak("Генерирую изображение, подождите...")
                continue

            if "стоп" in command or "выход" in command:
                speak("До свидания!")
                break

            if command.lower().startswith("измени код"):
                self_modify(command)
                continue

            if "открой проводник" in command:
                open_explorer()  # Открывает проводник по умолчанию
                continue

            ai_response = get_ai_response(command)
            speak(ai_response)


if __name__ == "__main__":
    main()


Пожалуйста, измени его по следующей инструкции: Измени код Добавь функцию открытия калькулятора