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


import asyncio
import os
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import FSInputFile
from docx import Document
from openai import AsyncOpenAI  # Импортируем инструмент для работы с ИИ

# --- НАСТРОЙКИ КЛЮЧЕЙ И ТОКЕНОВ ---
TELEGRAM_TOKEN = "8397324522:AAHkSqnHN5pMT9loQGUWot0ls-9kdZVBPX8"
PROXYAPI_KEY = "sk-8cMdd3RLgXcsPJw3t9HNtSltDRxag1c5"

# Инициализируем бота Telegram
bot = Bot(token=TELEGRAM_TOKEN)
dp = Dispatcher()

# Инициализируем клиента ИИ через шлюз ProxyAPI
ai_client = AsyncOpenAI(
    api_key=PROXYAPI_KEY,
    base_url="https://proxyapi.ru"  # Специальный адрес для ProxyAPI
)

# Шаги нашего опроса (FSM)
class CarEvaluation(StatesGroup):
    waiting_for_model = State()     
    waiting_for_year = State()      
    waiting_for_engine = State()    
    waiting_for_mileage = State()   

# Команда /start запускает опрос
@dp.message(Command("start"))
async def cmd_start(message: types.Message, state: FSMContext):
    await message.answer(
        "Привет! Я помогу оценить стоимость автомобиля в Беларуси.\n"
        "Давай соберем данные. Напиши **марку и модель** автомобиля (например: Volkswagen Golf):"
    )
    await state.set_state(CarEvaluation.waiting_for_model)

# Ловим название модели
@dp.message(CarEvaluation.waiting_for_model)
async def process_model(message: types.Message, state: FSMContext):
    await state.update_data(model=message.text)
    await message.answer("Отлично! Теперь введи **год выпуска** (например: 2015):")
    await state.set_state(CarEvaluation.waiting_for_year)

# Ловим год выпуска
@dp.message(CarEvaluation.waiting_for_year)
async def process_year(message: types.Message, state: FSMContext):
    await state.update_data(year=message.text)
    await message.answer("Укажи **объем двигателя** в литрах (например: 1.4):")
    await state.set_state(CarEvaluation.waiting_for_engine)

# Ловим объем двигателя
@dp.message(CarEvaluation.waiting_for_engine)
async def process_engine(message: types.Message, state: FSMContext):
    await state.update_data(engine=message.text)
    await message.answer("И последнее: укажи **пробег** автомобиля в километрах (например: 175000):")
    await state.set_state(CarEvaluation.waiting_for_mileage)

# ФИНАЛЬНЫЙ ШАГ: Собираем пробег, отправляем запрос в ИИ и генерируем Word
@dp.message(CarEvaluation.waiting_for_mileage)
async def process_mileage(message: types.Message, state: FSMContext):
    await state.update_data(mileage=message.text)
    
    # Достаем сохраненные данные автомобиля из памяти бота
    user_data = await state.get_data()
    
    await message.answer("Данные приняты! Нейросеть анализирует рынок Беларуси, пожалуйста, подождите...")
    
    # Формируем текст-задание (промпт) для искусственного интеллекта
    prompt_text = f"""
    Ты — профессиональный автомобильный эксперт-оценщик на рынке Беларуси.
    Сделай подробный и структурированный анализ рыночной стоимости для автомобиля:
    Марка и модель: {user_data['model']}
    Год выпуска: {user_data['year']} год
    Объем двигателя: {user_data['engine']} л.
    Пробег: {user_data['mileage']} км
    
    В тексте отчета обязательно укажи:
    1. Примерный диапазон цен (в USD) на эту модель на белорусских площадках (av.by, kufar.by).
    2. Факторы, которые влияют на цену этого авто (ликвидность модели в РБ, особенности мотора/коробки, пробег).
    3. Краткую рекомендацию для продавца/покупателя по цене сделки.
    
    Пиши строго в деловом, аналитическом стиле, без лишних приветствий. Текст должен быть готов для вставки в документ.
    """
    
    try:
        # Отправляем запрос к модели GPT-4o-mini (она быстрая и дешевая)
        response = await ai_client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt_text}]
        )
        # Получаем готовый текст ответа от ИИ
        ai_analysis = response.choices[0].message.content
    except Exception as e:
        print(f"Ошибка при запросе к ИИ: {e}")
        ai_analysis = "К сожалению, не удалось подключиться к ИИ для генерации анализа. Выведена базовая версия отчета."

    # --- НАЧАЛО СОЗДАНИЯ WORD ---
    doc = Document()
    
    doc.add_heading("ЭКСПЕРТНЫЙ ОТЧЕТ ОБ ОЦЕНКЕ АВТОМОБИЛЯ", level=0)
    
    doc.add_heading("1. Технические характеристики объекта:", level=1)
    doc.add_paragraph(f"• Марка и модель: {user_data['model']}")
    doc.add_paragraph(f"• Год выпуска: {user_data['year']} г.")
    doc.add_paragraph(f"• Объем двигателя: {user_data['engine']} л.")
    doc.add_paragraph(f"• Пробег: {user_data['mileage']} км")
    
    doc.add_heading("2. Анализ рынка и экспертное заключение ИИ:", level=1)
    
    # Вставляем сгенерированный ИИ текст прямо в документ Word!
    doc.add_paragraph(ai_analysis)
    
    # Формируем имя файла
    safe_model_name = user_data['model'].replace(' ', '_')
    file_name = f"Ocenka_{safe_model_name}.docx"
    
    # Сохраняем файл на компьютер
    doc.save(file_name)
    # --- КОНЕЦ СОЗДАНИЯ WORD ---
    
    # Отправляем файл пользователю в Telegram чат
    word_file = FSInputFile(file_name)
    await message.answer_document(word_file, caption=f"Ваш отчет для {user_data['model']} успешно сформирован!")
    
    # Удаляем временный файл с компьютера
    if os.path.exists(file_name):
        os.remove(file_name)
        
    # Сбрасываем память опроса
    await state.clear()

async def main():
    print("Бот успешно запущен и готов анализировать авто через ИИ...")
    await dp.start_polling(bot)

# Запуск программы
asyncio.run(main())