Dodaj igru Superheroji (glasovna) + admin tab
Igra: 1-5 igrača, nekoliko rundi (konfigurabilno). Svaku rundu svaki igrač kaže izmišljenog lika (širok pojam — bilo koji medij), Idriz presudi ko bi pobijedio i zašto. Pobjednik runde se banuje do kraja partije. Redoslijed se rotira svaku rundu (zadnji ima prednost). Najviše pobjeda runda = pobjednik partije. - idriz/gamestore.py: trajno skladište (heroji, Elo rejting, broj rundi), bez vanjskih zavisnosti (i admin ga uvozi). clear_favorite() drži borbe dosljedne kroz partije (jači heroj ne gubi od znatno slabijeg). - idriz/game.py: resolve_hero (najjači LLM gpt-5.5 + web search fallback samo kad ne zna lika), adjudicate (presuda + obrazloženje na bosanskom), Match (tok partije). - assistant.py: 4 realtime alata (nova_partija, izbor, presudi, kraj) + upute; igra ide odmah nazad modelu, ne kroz pozadinski posao. - config.py: game_model (default = text_model). - admin: tab "Superheroji" (broj rundi + rang-lista + reset pamćenja). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
This commit is contained in:
37
admin/app.py
37
admin/app.py
@@ -7,14 +7,20 @@ Prijava ide preko PAM-a (Linux korisnik `idriz`).
|
||||
import os
|
||||
import secrets
|
||||
import subprocess
|
||||
import sys
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from pathlib import Path
|
||||
|
||||
import pam as pam_module
|
||||
from flask import (
|
||||
Flask, render_template, request, redirect, url_for, session, flash
|
||||
)
|
||||
|
||||
# Pristup skladištu igre (bez openai zavisnosti) iz glavnog idriz paketa.
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||||
from idriz import gamestore # noqa: E402
|
||||
|
||||
# --- Konfiguracija -----------------------------------------------------------
|
||||
|
||||
# Samo ovaj Linux korisnik smije da se prijavi.
|
||||
@@ -195,6 +201,37 @@ def status():
|
||||
)
|
||||
|
||||
|
||||
@app.route("/superheroji", methods=["GET", "POST"])
|
||||
@login_required
|
||||
def superheroji():
|
||||
if request.method == "POST":
|
||||
action = request.form.get("action")
|
||||
if action == "rounds":
|
||||
try:
|
||||
n = int(request.form.get("rounds", ""))
|
||||
saved = gamestore.save_rounds(n)
|
||||
flash(f"Broj rundi postavljen na {saved}.")
|
||||
except (ValueError, TypeError):
|
||||
flash("Neispravan broj rundi.")
|
||||
elif action == "reset":
|
||||
store = gamestore.HeroStore()
|
||||
store.heroes = {}
|
||||
store.aliases = {}
|
||||
store.save()
|
||||
flash("Pamćenje jačina heroja je obrisano.")
|
||||
return redirect(url_for("superheroji"))
|
||||
|
||||
store = gamestore.HeroStore()
|
||||
return render_template(
|
||||
"superheroji.html",
|
||||
rounds=gamestore.load_rounds(),
|
||||
min_rounds=gamestore.MIN_ROUNDS,
|
||||
max_rounds=gamestore.MAX_ROUNDS,
|
||||
heroes=store.leaderboard(),
|
||||
active_page="superheroji",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
from waitress import serve
|
||||
print(f"Idriz admin na http://{LISTEN_HOST}:{LISTEN_PORT}")
|
||||
|
||||
Reference in New Issue
Block a user