import os import asyncio from datetime import datetime from contextlib import asynccontextmanager from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi.responses import HTMLResponse from fastapi.middleware.cors import CORSMiddleware from ai_engine import engine from telegram_bot import bot from modules.agents import MODULES, run_module from jarvis_links import get_all_links, get_random_template @asynccontextmanager async def lifespan(app: FastAPI): asyncio.create_task(bot.start_polling()) print("🚀 Jarvis Empire started!") yield bot.stop() app = FastAPI(title="JARVIS EMPIRE", lifespan=lifespan) app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) connections = [] activity_log = [] def log_activity(action: str, details: str = ""): entry = {"time": datetime.now().strftime("%H:%M:%S"), "action": action, "details": details} activity_log.insert(0, entry) if len(activity_log) > 50: activity_log.pop() DASHBOARD_HTML = """ JARVIS EMPIRE
ONLINE
BOT ACTIVE
AI READY
⚡ PROVIDERS
AI AKTIF
💰 MODULES
8
AUTONOMOUS
🔗 AFFILIATES
2
PROGRAMS
🚀 SESSIONS
0
COMPLETED
🤖 JARVIS BRAIN
JARVIS
⚡ Sistem online. Selamat datang, Master Haryono. Semua modul affiliate aktif.
⚡ MODULES
📡 OUTPUT
Jalankan modul untuk melihat output
// Output modul muncul di sini...
💰 AFFILIATE LINKS
📋 ACTIVITY LOG
--:--BOOTSystem initialized
""" @app.get("/", response_class=HTMLResponse) async def dashboard(): return DASHBOARD_HTML @app.get("/api/status") async def get_status(): stats = engine.get_stats() return { "status": "online", "available_providers": len(stats["available"]), "providers": stats["available"], "active_provider": stats["active_provider"], "modules": list(MODULES.keys()), "timestamp": datetime.now().isoformat() } @app.post("/api/chat") async def chat(data: dict): message = data.get("message", "") if not message: return {"response": "Pesan kosong.", "provider": "none"} result = await engine.think(message) log_activity("CHAT", message[:30]) return {"response": result["response"], "provider": result["provider"]} @app.post("/api/module") async def run_module_api(data: dict): module_name = data.get("module", "") if module_name not in MODULES: return {"error": "Not found", "output": "Module tidak ditemukan.", "module": module_name, "provider": "none"} kwargs = {k: v for k, v in data.items() if k != "module"} try: result = await MODULES[module_name].run(**kwargs) log_activity("MODULE", module_name) return {"module": result.get("module", module_name), "output": result.get("output", ""), "provider": result.get("provider", "unknown")} except Exception as e: return {"error": str(e), "output": f"Error: {str(e)}", "module": module_name, "provider": "none"} @app.get("/api/template/{platform}") async def get_template(platform: str): template = get_random_template(platform) return {"template": template, "platform": platform} @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() connections.append(websocket) try: while True: await websocket.receive_text() except WebSocketDisconnect: if websocket in connections: connections.remove(websocket) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=7860)