Загрузка данных


import json
import os
import shutil
import webbrowser
import datetime
import subprocess
import speech_recognition as sr
from gtts import gTTS
import pygame
from groq import Groq
import pyautogui
import psutil
import time

# Ваш ключ Groq уже встроен сюда
client = Groq(api_key="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")

MEMORY_FILE = "nova_memory.json"
SETTINGS_FILE = "nova_settings.json"

def load_settings():
    if os.path.exists(SETTINGS_FILE):
        try:
            with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
                return json.load(f)
        except Exception:
            return {"user_name": "друг", "lang": "ru"}
    return {"user_name": "друг", "lang": "ru"}

def save_settings(settings):
    try:
        with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
            json.dump(settings, f, ensure_ascii=False, indent=2)
    except Exception as e:
        print(f"Ошибка сохранения настроек: {e}")

def load_memory():
    if os.path.exists(MEMORY_FILE):
        try:
            with open(MEMORY_FILE, "r", encoding="utf-8") as f:
                return json.load(f)
        except Exception:
            return []
    return []

def save_memory():
    try:
        with open(MEMORY_FILE, "w", encoding="utf-8") as f:
            json.dump(chat_history, f, ensure_ascii=False, indent=2)
    except Exception as e:
        print(f"Ошибка сохранения памяти: {e}")

chat_history = load_memory()
app_settings = load_settings()
user_name = app_settings.get("user_name", "друг")
current_lang = app_settings.get("lang", "ru")

def speak(text, lang=None):
    use_lang = lang if lang else current_lang
    print(f"Нова [{use_lang}]: {text}")
    try:
        tts = gTTS(text=text, lang=use_lang)
        audio_file = "temp_voice.mp3"
        tts.save(audio_file)
        
        pygame.mixer.init()
        pygame.mixer.music.load(audio_file)
        pygame.mixer.music.play()
        while pygame.mixer.music.get_busy():
            pygame.time.Clock().tick(10)
        pygame.mixer.quit()
        
        if os.path.exists(audio_file):
            os.remove(audio_file)
    except Exception as e:
        print(f"Ошибка озвучки: {e}")

def listen():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("\nСлушаю...")
        r.adjust_for_ambient_noise(source, duration=0.5)
        try:
            audio = r.listen(source, timeout=5, phrase_time_limit=10)
        except sr.WaitTimeoutError:
            return ""
            
    try:
        rec_lang = "ru-RU" if current_lang == "ru" else "en-US"
        command = r.recognize_google(audio, language=rec_lang)
        print(f"Вы сказали: {command}")
        return command
    except sr.UnknownValueError:
        return ""
    except sr.RequestError:
        print("Ошибка соединения с сервисом распознавания речи.")
        return ""

def parse_intent_with_ai(user_speech):
    global chat_history, user_name, current_lang
    chat_history.append(f"{user_name}: {user_speech}")
    
    context_slice = chat_history[-10:]
    context_str = "\n".join(context_slice)

    prompt = (
        f'Ты — Нова, элитный голосовой ассистент на ПК. Пользователя зовут "{user_name}". Текущий язык: "{current_lang}".\n'
        'Проанализируй фразу и верни СТРОГО JSON без markdown-оформления (без ```json):\n'
        '{\n'
        '  "action": "open_chat", "change_language", "set_name", "open_youtube", "google_search", "open_app", '
        '"open_folder", "empty_recycle_bin", "shutdown_pc", "cancel_shutdown", "sleep_pc", '
        '"time_info", "battery_info", "take_screenshot", "create_note", "copy_files", "exit", или "chat",\n'
        '  "messenger": "telegram, discord или whatsapp",\n'
        '  "chat_target": "имя контакта или чата",\n'
        '  "new_lang": "код языка (ru, en и т.д.)",\n'
        '  "new_name": "новое имя пользователя",\n'
        '  "query": "поисковый запрос",\n'
        '  "app_name": "название программы",\n'
        '  "folder_name": "название папки",\n'
        '  "minutes": 0,\n'
        '  "note_text": "текст заметки",\n'
        '  "source_path": "",\n'
        '  "dest_path": "",\n'
        '  "text": "ответ пользователю"\n'
        '}\n\n'
        f'История разговора:\n{context_str}\n\n'
        f'Текущая фраза: "{user_speech}"'