diff --git a/callback.php b/callback.php index e28619b..74deedf 100644 --- a/callback.php +++ b/callback.php @@ -1,6 +1,7 @@ "Geschäftsführung", "1350944244843544709" => "Stv. Geschäftsführung", @@ -60,22 +61,12 @@ $role_names = [ "1350945530519224320" => "Meister", "1350945581194809376" => "Tuner", "1350945688560861285" => "Stift" - ]; -// 🆕 Rollen-Rang (höchste zuerst) -$role_order = [ - "1350944151381999666", - "1350944244843544709", - "1350943536891297914", - "1350945302395224206", - "1350945473338544138", - "1350945530519224320", - "1350945581194809376", - "1350945688560861285" -]; +// Rollen-Rang (höchste zuerst) +$role_order = array_keys($role_names); -// 🆕 Höchste Rolle finden +// Höchste Rolle finden $main_role_name = "Mitglied"; // Fallback foreach ($role_order as $role_id) { if (in_array($role_id, $guild_member['roles'])) { @@ -87,15 +78,40 @@ foreach ($role_order as $role_id) { // Rollen prüfen (ob die Person die „Adminrolle“ hat) $hasRole = in_array($config['role_id'], $guild_member['roles']); +// Server-Nickname oder globalen Username nehmen +$nickname = $guild_member['nick'] ?? $user['username']; + +// ✅ Prüfen ob User schon in der Datenbank existiert +$stmt = $dbhandle->prepare("SELECT id FROM users WHERE discord_id = ?"); +$stmt->bind_param("s", $user['id']); +$stmt->execute(); +$stmt->store_result(); + +if ($stmt->num_rows > 0) { + // User existiert → hole interne User-ID + $stmt->bind_result($user_id); + $stmt->fetch(); +} else { + // User existiert nicht → neuen Eintrag erstellen + $insert = $dbhandle->prepare("INSERT INTO users (discord_id, discord_name) VALUES (?, ?)"); + $insert->bind_param("ss", $user['id'], $nickname); + $insert->execute(); + $user_id = $insert->insert_id; + $insert->close(); +} + +$stmt->close(); + // Session setzen $_SESSION['user'] = [ - 'id' => $user['id'], + 'id' => $user_id, // interne DB-ID + 'discord_id' => $user['id'], 'username' => $user['username'], 'discriminator' => $user['discriminator'], 'avatar' => $user['avatar'], 'hasRole' => $hasRole, - 'nickname' => $guild_member['nick'] ?? $user['username'], // Nick wenn vorhanden - 'main_role' => $main_role_name // 🆕 höchster Rollenname + 'nickname' => $nickname, // Server-Nickname + 'main_role' => $main_role_name ]; header('Location: index.php'); diff --git a/callback.php.bak b/callback.php.bak new file mode 100644 index 0000000..e28619b --- /dev/null +++ b/callback.php.bak @@ -0,0 +1,103 @@ + $config['client_id'], + 'client_secret' => $config['client_secret'], + 'grant_type' => 'authorization_code', + 'code' => $_GET['code'], + 'redirect_uri' => $config['redirect_uri'], + 'scope' => 'identify guilds.members.read' +])); +$response = curl_exec($ch); +curl_close($ch); +$data = json_decode($response, true); + +if (!isset($data['access_token'])) { + die('Fehler beim Token-Austausch'); +} + +$access_token = $data['access_token']; + +// API Request Funktion +function apiRequest($url, $token) { + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "Authorization: Bearer $token" + ]); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + return json_decode($response, true); +} + +// User-Daten holen +$user = apiRequest('https://discord.com/api/users/@me', $access_token); + +// Mitgliedschaft prüfen +$guild_member = apiRequest("https://discord.com/api/users/@me/guilds/{$config['guild_id']}/member", $access_token); + +if (isset($guild_member['message'])) { + die('Du bist nicht auf dem Discord-Server.'); +} + +// 🆕 Rollen-ID → Rollenname Mapping +$role_names = [ + "1350944151381999666" => "Geschäftsführung", + "1350944244843544709" => "Stv. Geschäftsführung", + "1350943536891297914" => "Leitungsebene", + "1350945302395224206" => "Werkstattleiter", + "1350945473338544138" => "Ausbilder", + "1350945530519224320" => "Meister", + "1350945581194809376" => "Tuner", + "1350945688560861285" => "Stift" + +]; + +// 🆕 Rollen-Rang (höchste zuerst) +$role_order = [ + "1350944151381999666", + "1350944244843544709", + "1350943536891297914", + "1350945302395224206", + "1350945473338544138", + "1350945530519224320", + "1350945581194809376", + "1350945688560861285" +]; + +// 🆕 Höchste Rolle finden +$main_role_name = "Mitglied"; // Fallback +foreach ($role_order as $role_id) { + if (in_array($role_id, $guild_member['roles'])) { + $main_role_name = $role_names[$role_id]; + break; // erste gefundene Rolle nehmen + } +} + +// Rollen prüfen (ob die Person die „Adminrolle“ hat) +$hasRole = in_array($config['role_id'], $guild_member['roles']); + +// Session setzen +$_SESSION['user'] = [ + 'id' => $user['id'], + 'username' => $user['username'], + 'discriminator' => $user['discriminator'], + 'avatar' => $user['avatar'], + 'hasRole' => $hasRole, + 'nickname' => $guild_member['nick'] ?? $user['username'], // Nick wenn vorhanden + 'main_role' => $main_role_name // 🆕 höchster Rollenname +]; + +header('Location: index.php'); +exit; +?> diff --git a/db.php b/db.php index 6751925..08b8e63 100644 --- a/db.php +++ b/db.php @@ -1,8 +1,8 @@ connect_errno) { - echo "Fehler beim verbinden: " . $mysqli -> connect_error; +if($dbhandle -> connect_errno) { + echo "Fehler beim verbinden: " . $dbhandle -> connect_error; exit(); } else{ diff --git a/functions.php b/functions.php index 7e38d93..d7b9a3e 100644 --- a/functions.php +++ b/functions.php @@ -1,8 +1,26 @@ prepare("INSERT INTO contracts (clientid, service, name) VALUES (?, ?, ?)"); + $stmt->bind_param("iss", $userId, $service, $name); // i=int, s=string + if ($stmt->execute()) { + echo "Eintrag erfolgreich gespeichert!"; + } else { + echo "Fehler: " . $stmt->error; + } + + $stmt->close(); } - -function -?> \ No newline at end of file +function getDiscordAvatarUrl($user) { + if ($user['avatar']) { + // Prüfen ob Animated Avatar (fängt mit "a_") + $format = str_starts_with($user['avatar'], 'a_') ? 'gif' : 'png'; + return "https://cdn.discordapp.com/avatars/{$user['discord_id']}/{$user['avatar']}.$format?size=512"; + } else { + // Standard-Avatar (User hat kein eigenes Profilbild) + $defaultAvatar = $user['discriminator'] % 5; + return "https://cdn.discordapp.com/embed/avatars/{$defaultAvatar}.png"; + } +} \ No newline at end of file diff --git a/header.php b/header.php index c7397c2..34f4e75 100644 --- a/header.php +++ b/header.php @@ -1,20 +1,29 @@ -