Add a profile UI with achievements support, but no dedicated achievements page or stats getting yet.

This commit is contained in:
csd4ni3l
2025-10-03 23:06:25 +02:00
parent db22f6b591
commit 28738202f6
7 changed files with 235 additions and 1 deletions

79
app.py
View File

@@ -2,7 +2,7 @@ from flask import Flask, render_template, request, g, redirect, url_for, Respons
from dotenv import load_dotenv
from google.genai import Client, types
from constants import OFFENSIVE_SCENARIO_PROMPT, OFFENSIVE_ANSWER_PROMPT, DEFENSIVE_SCENARIO_PROMPT, DEFENSIVE_ANSWER_PROMPT, debt_amount_regex, evaluation_regex, AI_NAME
from constants import *
import os, requests, time, re, sqlite3, flask_login, bcrypt, secrets
@@ -61,6 +61,83 @@ def main():
username = flask_login.current_user.id
return render_template("index.jinja2", username=username)
@app.route("/profile")
@flask_login.login_required
def profile():
username = flask_login.current_user.id
cur = get_db().cursor()
cur.execute("SELECT offended_debt_amount, defended_debt_amount, offensive_wins, defensive_wins FROM Users WHERE username = ?", (username, ))
row = cur.fetchone()
if not row:
return Response("Invalid login. Please log out.", 400)
cur.close()
formatted_achievements = []
for achievement in ACHIEVEMENTS:
if achievement[0] == "offended_debt":
user_amount = row[0]
text = "You need to offend {difference}$ more debt!"
elif achievement[0] == "defended_debt":
user_amount = row[1]
text = "You need to defend {difference}$ more debt!"
elif achievement[0] == "offensive_wins":
user_amount = row[2]
text = "You need to win in Offensive Mode {difference} more times!"
elif achievement[0] == "defended_wins":
user_amount = row[3]
text = "You need to win in Defensive Mode {difference} more times!"
achievement_minimum = achievement[1]
if row[0] < achievement[1]:
formatted_achievements.append([achievement[2], achievement[3], text.format(difference=achievement_minimum - user_amount)])
else:
formatted_achievements.append([achievement[2], achievement[3], "Completed"])
return render_template("profile.jinja2", username=username, user_data=row, logged_in_account=True, achievements=formatted_achievements)
@app.route("/profile/<username>")
def profile_external(username):
cur = get_db().cursor()
cur.execute("SELECT offended_debt_amount, defended_debt_amount, offensive_wins, defensive_wins FROM Users WHERE username = ?", (username, ))
row = cur.fetchone()
if not row:
return Response("Invalid login. Please log out.", 400)
cur.close()
formatted_achievements = []
for achievement in ACHIEVEMENTS:
if achievement[0] == "offended_debt":
user_amount = row[0]
text = "You need to offend {difference}$ more debt!"
elif achievement[0] == "defended_debt":
user_amount = row[1]
text = "You need to defend {difference}$ more debt!"
elif achievement[0] == "offensive_wins":
user_amount = row[2]
text = "You need to win in Offensive Mode {difference} more times!"
elif achievement[0] == "defended_wins":
user_amount = row[3]
text = "You need to win in Defensive Mode {difference} more times!"
achievement_minimum = achievement[1]
if row[0] < achievement[1]:
formatted_achievements.append([achievement[2], achievement[3], text.format(difference=achievement_minimum - user_amount)])
else:
formatted_achievements.append([achievement[2], achievement[3], "Completed"])
return render_template("profile.jinja2", username=username, user_data=row, logged_in_account=False, achivements=formatted_achievements)
@app.route("/offensive")
@flask_login.login_required
def offensive_mode():