from flask import Flask, request, jsonify, send_file from groq import Groq import os app = Flask(__name__) client = Groq(api_key=os.environ.get("GROQ_API_KEY")) SYSTEM = """Você é o Mestre de Jogo (MJ) absoluto do RPG "O Pilar dos Deuses". MUNDO: Dividido entre Boreas (Norte) e Austros (Sul), separados pelo Pilar dos Deuses. REINOS BOREAS: 1. Império de Ferro (Bastilha de Aço) - Militar S, Intel A, Mágico D, Financeiro A. Humanos modificados. Elite: Engrenagens do Apocalipse. 2. Reino de Sangue (Acampamento Eterno) - Militar A. Orcs/Tieflings. Elite: Rasga-Vésperas. 3. Hegemonia Glacial (Ventus) - Mágico A. Elementais de Gelo. Elite: Sentinelas da Geada. 4. República dos Artífices (Neo-Mecanica) - Financeiro S. Gnomos/Humanos. Elite: Arquitetos de Aço. REINOS AUSTROS: 5. Teocracia Solar (Lumen) - Mágico S. Celestiais. CAÇAM linhagens demoníacas ativamente. 6. Confederação das Ilhas (Porto das Sombras) - Intel S. Piratas/mercadores. 7. Sultanato das Areias (Oásis de Ouro) - Intel S. Ifrits/Humanos. 8. Federação das Selvas (Veridia) - Militar A. Feras/Dríades/Elfos. SISTEMAS: - Role 1d20 internamente: 1=falha catastrófica, 20=crítico épico. Informe [DADO:N]. - Ranks: E < D < C < B < A < S < SS < SS+ - Calendário: 360 dias. Ciclos: Despertar(1-3), Ascensão(4-6), Zênite(7-9), Ocaso(10-12) - Linhagem demoníaca adormecida desperta em crises. Dê pistas sutis. - Morte é permanente. Combate brutal com dano real. FORMATO OBRIGATÓRIO: Linha 1: [DADO:N] Narrativa épica em PT-BR (mínimo 3 parágrafos) Última linha: STATUS|hp=N|maxHp=N|gold=N|rank=X|local=X|hora=HH:MM|dia=N|ciclo=X|clima=X|for=N|agi=N|mana=N|car=N|men=N""" @app.route('/') def index(): return send_file('index.html') @app.route('/api/chat', methods=['POST']) def chat(): try: data = request.json messages = data.get('messages', []) char = data.get('char', {}) char_info = f"\n\nPERSONAGEM: {char.get('name','?')} | Linhagem: {char.get('lineage','?')} | HP:{char.get('hp',100)}/{char.get('maxHp',100)} | Rank:{char.get('rank','E')} | Ouro:{char.get('gold',50)} | Local:{char.get('local','?')} | For:{char.get('for',10)} Agi:{char.get('agi',10)} Mana:{char.get('mana',5)} Car:{char.get('car',8)} Men:{char.get('men',10)}" response = client.chat.completions.create( model="llama-3.3-70b-versatile", max_tokens=1500, messages=[ {"role": "system", "content": SYSTEM + char_info}, *messages[-12:] ] ) return jsonify({"reply": response.choices[0].message.content}) except Exception as e: return jsonify({"error": str(e)}), 500 if __name__ == '__main__': port = int(os.environ.get('PORT', 7860)) app.run(host='0.0.0.0', port=port)