data Ordner angelegt. InitDB in einem eigenen Script. DB verbindungen in einem eigenen Script.
This commit is contained in:
parent
5774138ecb
commit
df608709a7
|
|
@ -1 +1 @@
|
|||
{"authenticated":true,"discord_id":"277898241750859776","discord_name":"mrteels","db_id":1,"avatar_url":"https://cdn.discordapp.com/avatars/277898241750859776/7c3446bb51fafd72b1b4c21124b4994f.png"}
|
||||
{"authenticated":true,"discord_id":"277898241750859776","discord_name":"mrteels","db_id":1,"display_name":"Daniel Nagel","discord_avatar_url":"https://cdn.discordapp.com/avatars/277898241750859776/7c3446bb51fafd72b1b4c21124b4994f.png"}
|
||||
64
data/data_api.py
Normal file
64
data/data_api.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
import sqlite3
|
||||
import random
|
||||
from data.setup_database import DB_PATH
|
||||
|
||||
def change_display_name(player_id, new_name):
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("UPDATE players SET display_name = ? WHERE id = ?", (new_name, player_id))
|
||||
|
||||
connection.commit()
|
||||
connection.close()
|
||||
|
||||
|
||||
def get_or_create_player(discord_id, discord_name, avatar_url):
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
|
||||
# REPARIERT: Wir fragen 4 Dinge ab (id, discord_name, display_name, discord_avatar_url)
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
|
||||
if player is None:
|
||||
|
||||
# Random Silly Name Generator für neue Spieler. Damit sie angeregt werden ihren richtigen Namen einzutragen.
|
||||
def generate_silly_name():
|
||||
adjectives = ["Verwirrter", "Blinder", "Heulender", "Zorniger", "Chaos", "Verzweifelter", "Schreiender", "Stolpernder", "Schwitzender"]
|
||||
nouns = ["Grot", "Kultist", "Servitor", "Snotling", "Guardmen", "Würfellecker", "Regelvergesser", "Meta-Chaser", "Klebschnüffler"]
|
||||
adj = random.choice(adjectives)
|
||||
noun = random.choice(nouns)
|
||||
return f"{adj} {noun}"
|
||||
|
||||
silly_name = generate_silly_name()
|
||||
cursor.execute("INSERT INTO players (discord_id, discord_name, display_name, discord_avatar_url) VALUES (?, ?, ?, ?)", (discord_id, discord_name, silly_name, avatar_url))
|
||||
connection.commit()
|
||||
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
else:
|
||||
# Falls sich Name oder Bild auf Discord geändert haben, machen wir ein Update
|
||||
cursor.execute("UPDATE players SET discord_name = ?, discord_avatar_url = ? WHERE discord_id = ?", (discord_name, avatar_url, discord_id))
|
||||
connection.commit()
|
||||
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
|
||||
connection.close()
|
||||
return player
|
||||
|
||||
|
||||
def get_all_players():
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
|
||||
# Alle Spieler laden, absteigend sortiert nach MMR
|
||||
cursor.execute("SELECT id, name, mmr, points, games FROM players ORDER BY mmr DESC")
|
||||
players = cursor.fetchall()
|
||||
|
||||
connection.close()
|
||||
|
||||
# Die Daten für das Web-GUI in eine lesbare Form umwandeln (Liste von Dictionaries)
|
||||
result = []
|
||||
|
||||
return result
|
||||
34
data/database.py
Normal file
34
data/database.py
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import sqlite3
|
||||
import os
|
||||
from data import setup_database, data_api
|
||||
from data.setup_database import DB_PATH
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
setup_database.init_db()
|
||||
|
||||
def check_db():
|
||||
# --- DATENBANK CHECK ---
|
||||
# Prüfen, ob die Datei im aktuellen Ordner existiert
|
||||
db_file = DB_PATH
|
||||
|
||||
if not os.path.exists(db_file):
|
||||
print(f"WARNUNG: '{db_file}' nicht gefunden!")
|
||||
print("Starte Datenbank-Einrichtung...")
|
||||
|
||||
# 1. Erstellt die leere Datei und alle Tabellen-Strukturen
|
||||
setup_database.init_db()
|
||||
|
||||
print("Datenbank aufgebaut!")
|
||||
else:
|
||||
print(f"OK: Datenbank '{db_file}' gefunden. Lade System...")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,18 +1,16 @@
|
|||
import sqlite3
|
||||
import random
|
||||
import os
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_db()
|
||||
DB_PATH = "data/warhammer_league.db"
|
||||
|
||||
def init_db():
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
|
||||
# Fremdschlüssel (Foreign Keys) in SQLite aktivieren
|
||||
cursor.execute('PRAGMA foreign_keys = ON;')
|
||||
|
||||
# 1. Tabelle: players (Stammdaten)
|
||||
# 1. Tabelle: players (Stammdaten)
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS players (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
|
|
@ -91,13 +89,17 @@ def init_db():
|
|||
|
||||
connection.commit()
|
||||
connection.close()
|
||||
print("Standard Daten in die DB Geschrieben.")
|
||||
print("Datenbank Struktur aufgebaut")
|
||||
|
||||
#nächster Schritt: Standard Spielsysteme eintragen
|
||||
seed_gamesystems()
|
||||
|
||||
|
||||
# --------------------
|
||||
# --- Start Setup der DB Daten. Damit sie nicht GANZ leer sind.
|
||||
# --------------------
|
||||
def seed_gamesystems():
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
systems = [
|
||||
("Warhammer 40k", 0, 100),
|
||||
|
|
@ -110,10 +112,13 @@ def seed_gamesystems():
|
|||
|
||||
connection.commit()
|
||||
connection.close()
|
||||
print("Spielsysteme wurden angelegt!")
|
||||
print("Spielsysteme angelegt!")
|
||||
|
||||
#Nächster Schritt: Standard Achievments eintragen.
|
||||
seed_achievements()
|
||||
|
||||
def seed_achievements():
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
connection = sqlite3.connect(DB_PATH)
|
||||
cursor = connection.cursor()
|
||||
|
||||
# Unsere Start-Stückliste an Erfolgen (Name, Beschreibung, Icon)
|
||||
|
|
@ -127,80 +132,6 @@ def seed_achievements():
|
|||
|
||||
connection.commit()
|
||||
connection.close()
|
||||
print("Achievements wurden in den Katalog geladen!")
|
||||
|
||||
|
||||
def change_display_name(player_id, new_name):
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.execute("UPDATE players SET display_name = ? WHERE id = ?", (new_name, player_id))
|
||||
|
||||
connection.commit()
|
||||
connection.close()
|
||||
|
||||
|
||||
def get_or_create_player(discord_id, discord_name, avatar_url):
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
cursor = connection.cursor()
|
||||
|
||||
# REPARIERT: Wir fragen 4 Dinge ab (id, discord_name, display_name, discord_avatar_url)
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
|
||||
if player is None:
|
||||
|
||||
silly_name = generate_silly_name()
|
||||
cursor.execute("INSERT INTO players (discord_id, discord_name, display_name, discord_avatar_url) VALUES (?, ?, ?, ?)", (discord_id, discord_name, silly_name, avatar_url))
|
||||
connection.commit()
|
||||
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
else:
|
||||
# Falls sich Name oder Bild auf Discord geändert haben, machen wir ein Update
|
||||
cursor.execute("UPDATE players SET discord_name = ?, discord_avatar_url = ? WHERE discord_id = ?", (discord_name, avatar_url, discord_id))
|
||||
connection.commit()
|
||||
|
||||
cursor.execute("SELECT id, discord_name, display_name, discord_avatar_url FROM players WHERE discord_id = ?", (discord_id,))
|
||||
player = cursor.fetchone()
|
||||
|
||||
connection.close()
|
||||
return player
|
||||
|
||||
|
||||
def get_all_players():
|
||||
connection = sqlite3.connect("warhammer_league.db")
|
||||
cursor = connection.cursor()
|
||||
|
||||
# Alle Spieler laden, absteigend sortiert nach MMR
|
||||
cursor.execute("SELECT id, name, mmr, points, games FROM players ORDER BY mmr DESC")
|
||||
players = cursor.fetchall()
|
||||
|
||||
connection.close()
|
||||
|
||||
# Die Daten für das Web-GUI in eine lesbare Form umwandeln (Liste von Dictionaries)
|
||||
result = []
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def generate_silly_name():
|
||||
adjectives = [
|
||||
"Verwirrter", "Blinder", "Heulender", "Zorniger", "Chaos", ""
|
||||
"Verzweifelter", "Schreiender", "Stolpernder", "Schwitzender"
|
||||
]
|
||||
nouns = [
|
||||
"Grot", "Kultist", "Servitor", "Snotling",
|
||||
"Guardmen", "Würfellecker", "Regelvergesser", "Meta-Chaser", "Klebschnüffler"
|
||||
]
|
||||
|
||||
# random.choice() nimmt zufällig ein Element aus der Liste
|
||||
adj = random.choice(adjectives)
|
||||
noun = random.choice(nouns)
|
||||
|
||||
# Verbindet beide Wörter mit einem Leerzeichen (z.B. "Verwirrter Grot")
|
||||
return f"{adj} {noun}"
|
||||
|
||||
|
||||
print("Achievements angelegt.")
|
||||
|
||||
|
||||
|
|
@ -3,7 +3,7 @@ import os
|
|||
import urllib.parse
|
||||
import requests
|
||||
from nicegui import ui, app
|
||||
import database
|
||||
from data import data_api
|
||||
|
||||
def get_auth_url():
|
||||
client_id = os.getenv("DISCORD_CLIENT_ID")
|
||||
|
|
@ -55,7 +55,7 @@ def setup_login_routes():
|
|||
avatar_url = "https://cdn.discordapp.com/embed/avatars/0.png"
|
||||
|
||||
# In die Datenbank eintragen
|
||||
player = database.get_or_create_player(discord_id, discord_name, avatar_url)
|
||||
player = data_api.get_or_create_player(discord_id, discord_name, avatar_url)
|
||||
|
||||
# Session updaten
|
||||
app.storage.user['authenticated'] = True
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from nicegui import ui, app
|
||||
import database
|
||||
from data import database, data_api
|
||||
from gui import discord_login, gui_style
|
||||
|
||||
def setup_routes():
|
||||
|
|
@ -45,8 +45,7 @@ def setup_routes():
|
|||
new_name = name_input.value
|
||||
# Nur speichern, wenn ein Name drinsteht und er anders ist als vorher
|
||||
if new_name and new_name != display_name:
|
||||
import database
|
||||
database.change_display_name(db_id, new_name) # Deine DB Funktion
|
||||
data_api.change_display_name(db_id, new_name) # Deine DB Funktion
|
||||
app.storage.user['display_name'] = new_name
|
||||
ui.notify('Name gespeichert!', color='positive')
|
||||
ui.navigate.reload()
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@ from gui import gui_style
|
|||
|
||||
def setup_match_routes():
|
||||
|
||||
# Unsere neue Unterseite für das Eintragen der Spiele
|
||||
@ui.page('/add-match')
|
||||
def add_match_page():
|
||||
|
||||
# 1. Die {}-Klammern definieren eine dynamische Variable in der URL
|
||||
@ui.page('/add-match/{systemname}')
|
||||
def match_form_page(systemname: str): # <--- WICHTIG: Hier fangen wir das Wort aus der URL auf!
|
||||
gui_style.apply_design()
|
||||
|
||||
with ui.card().classes('w-full items-center mt-10'):
|
||||
|
|
|
|||
21
main.py
21
main.py
|
|
@ -4,28 +4,13 @@ from nicegui import ui
|
|||
|
||||
from gui import main_gui, match_gui, discord_login, league_statistic
|
||||
|
||||
import database
|
||||
from data import database
|
||||
|
||||
|
||||
# 1. Lade die geheimen Variablen aus der .env Datei in den Speicher
|
||||
load_dotenv()
|
||||
|
||||
# --- DATENBANK CHECK ---
|
||||
# Prüfen, ob die Datei im aktuellen Ordner existiert
|
||||
db_file = "warhammer_league.db"
|
||||
|
||||
if not os.path.exists(db_file):
|
||||
print(f"WARNUNG: '{db_file}' nicht gefunden!")
|
||||
print("Starte Datenbank-Einrichtung...")
|
||||
|
||||
# 1. Erstellt die leere Datei und alle Tabellen-Strukturen
|
||||
database.init_db()
|
||||
database.seed_gamesystems()
|
||||
database.seed_achievements()
|
||||
|
||||
print("Datenbank erfolgreich aufgebaut!")
|
||||
else:
|
||||
print(f"OK: Datenbank '{db_file}' gefunden. Lade System...")
|
||||
database.check_db()
|
||||
# -----------------------
|
||||
|
||||
|
||||
|
|
@ -33,7 +18,7 @@ else:
|
|||
client_id = os.getenv("DISCORD_CLIENT_ID")
|
||||
client_secret = os.getenv("DISCORD_CLIENT_SECRET")
|
||||
|
||||
# 3. Wir rufen unsere Funktion aus der main_gui.py auf
|
||||
# 3. Seitenrouten aufbauen
|
||||
main_gui.setup_routes()
|
||||
match_gui.setup_match_routes()
|
||||
discord_login.setup_login_routes()
|
||||
|
|
|
|||
1
mmr calculations/calc_match.py
Normal file
1
mmr calculations/calc_match.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
from data import database
|
||||
Loading…
Reference in New Issue
Block a user