modified: templates/edit_giveaway.html
modified: templates/edit_user.html modified: templates/global_admin_dashboard.html modified: templates/landing.html modified: templates/login.html modified: templates/logs.html modified: templates/navigation.html modified: templates/server_admin_dashboard.html modified: templates/user_dashboard.html modified: templates/user_giveaways.html new file: templates/user_giveaways_old.html modified: templates/user_landing_page.html
This commit is contained in:
@@ -5,35 +5,241 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Edit Giveaway</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 25%, #2d3748 75%, #0c1426 100%);
|
||||
min-height: 100vh;
|
||||
color: #e2e8f0;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.edit-container {
|
||||
max-width: 800px;
|
||||
margin: 2rem auto;
|
||||
background: rgba(26, 31, 46, 0.8);
|
||||
backdrop-filter: blur(15px);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 20px;
|
||||
padding: 2rem;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.edit-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
padding-bottom: 1rem;
|
||||
border-bottom: 1px solid rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.edit-title {
|
||||
color: #e2e8f0;
|
||||
font-weight: 700;
|
||||
font-size: 2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.edit-subtitle {
|
||||
color: #a0aec0;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
color: #e2e8f0;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border: 1px solid rgba(102, 126, 234, 0.3);
|
||||
border-radius: 10px;
|
||||
color: #e2e8f0;
|
||||
padding: 0.75rem 1rem;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
background: rgba(45, 55, 72, 0.9);
|
||||
border-color: #667eea;
|
||||
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
.form-control::placeholder {
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.form-check {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 10px;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.form-check-label {
|
||||
color: #e2e8f0;
|
||||
font-weight: 600;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
background-color: rgba(45, 55, 72, 0.8);
|
||||
border-color: rgba(102, 126, 234, 0.5);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.form-check-input:checked {
|
||||
background-color: #667eea;
|
||||
border-color: #667eea;
|
||||
}
|
||||
|
||||
.form-check-input:focus {
|
||||
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
|
||||
}
|
||||
|
||||
.btn-container {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 2rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.edit-btn {
|
||||
padding: 0.75rem 2rem;
|
||||
border-radius: 50px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
transition: all 0.3s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.edit-btn.primary {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.edit-btn.primary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.edit-btn.secondary {
|
||||
background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(74, 85, 104, 0.3);
|
||||
}
|
||||
|
||||
.edit-btn.secondary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(74, 85, 104, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.input-icon {
|
||||
color: #667eea;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.edit-container {
|
||||
margin: 1rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.edit-title {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.btn-container {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.edit-btn {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h2>Edit Giveaway - {{ giveaway.name }}</h2>
|
||||
<div class="edit-container">
|
||||
<div class="edit-header">
|
||||
<h2 class="edit-title">
|
||||
<i class="fas fa-edit"></i> Edit Giveaway
|
||||
</h2>
|
||||
<p class="edit-subtitle">{{ giveaway.name }}</p>
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
<div class="form-group">
|
||||
<label for="platform">Platform</label>
|
||||
<input type="text" class="form-control" id="platform" name="platform" value="{{ giveaway.platform }}" required>
|
||||
<label for="platform">
|
||||
<i class="fas fa-gamepad input-icon"></i> Platform
|
||||
</label>
|
||||
<input type="text" class="form-control" id="platform" name="platform"
|
||||
value="{{ giveaway.platform }}" placeholder="Enter platform name" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" value="{{ giveaway.name }}" required>
|
||||
<label for="name">
|
||||
<i class="fas fa-tag input-icon"></i> Giveaway Name
|
||||
</label>
|
||||
<input type="text" class="form-control" id="name" name="name"
|
||||
value="{{ giveaway.name }}" placeholder="Enter giveaway name" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="game_key">Game Key</label>
|
||||
<input type="text" class="form-control" id="game_key" name="game_key" value="{{ giveaway.game_key }}" required>
|
||||
<label for="game_key">
|
||||
<i class="fas fa-key input-icon"></i> Game Key
|
||||
</label>
|
||||
<input type="text" class="form-control" id="game_key" name="game_key"
|
||||
value="{{ giveaway.game_key }}" placeholder="Enter game key" required>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="winner_dc_id">Winner Discord ID</label>
|
||||
<input type="text" class="form-control" id="winner_dc_id" name="winner_dc_id" value="{{ giveaway.winner_dc_id }}">
|
||||
<label for="winner_dc_id">
|
||||
<i class="fas fa-crown input-icon"></i> Winner Discord ID
|
||||
</label>
|
||||
<input type="text" class="form-control" id="winner_dc_id" name="winner_dc_id"
|
||||
value="{{ giveaway.winner_dc_id }}" placeholder="Enter winner's Discord ID (optional)">
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="aktiv" name="aktiv" {% if giveaway.aktiv %}checked{% endif %}>
|
||||
<label class="form-check-label" for="aktiv">Active</label>
|
||||
<input type="checkbox" class="form-check-input" id="aktiv" name="aktiv"
|
||||
{% if giveaway.aktiv %}checked{% endif %}>
|
||||
<label class="form-check-label" for="aktiv">
|
||||
<i class="fas fa-check-circle"></i> Mark as Redeemed
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="btn-container">
|
||||
<button type="submit" class="edit-btn primary">
|
||||
<i class="fas fa-save"></i> Save Changes
|
||||
</button>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=guild_id) }}" class="edit-btn secondary">
|
||||
<i class="fas fa-arrow-left"></i> Back to Dashboard
|
||||
</a>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary mt-3">Save Changes</button>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=guild_id) }}" class="btn btn-secondary mt-3">Back to Dashboard</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -5,47 +5,333 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Edit User</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 25%, #2d3748 75%, #0c1426 100%);
|
||||
min-height: 100vh;
|
||||
color: #e2e8f0;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.edit-container {
|
||||
max-width: 900px;
|
||||
margin: 2rem auto;
|
||||
background: rgba(26, 31, 46, 0.8);
|
||||
backdrop-filter: blur(15px);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 20px;
|
||||
padding: 2rem;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.edit-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
padding-bottom: 1rem;
|
||||
border-bottom: 1px solid rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.edit-title {
|
||||
color: #e2e8f0;
|
||||
font-weight: 700;
|
||||
font-size: 2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.edit-subtitle {
|
||||
color: #a0aec0;
|
||||
font-size: 1.1rem;
|
||||
font-family: 'Courier New', monospace;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
color: #e2e8f0;
|
||||
font-weight: 600;
|
||||
margin-bottom: 0.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border: 1px solid rgba(102, 126, 234, 0.3);
|
||||
border-radius: 10px;
|
||||
color: #e2e8f0;
|
||||
padding: 0.75rem 1rem;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.form-control:focus {
|
||||
background: rgba(45, 55, 72, 0.9);
|
||||
border-color: #667eea;
|
||||
box-shadow: 0 0 0 0.2rem rgba(102, 126, 234, 0.25);
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
.form-control::placeholder {
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.form-section {
|
||||
background: rgba(45, 55, 72, 0.4);
|
||||
border: 1px solid rgba(102, 126, 234, 0.1);
|
||||
border-radius: 15px;
|
||||
padding: 1.5rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
color: #667eea;
|
||||
font-weight: 600;
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.form-check {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
border: 1px solid rgba(239, 68, 68, 0.3);
|
||||
border-radius: 10px;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.form-check-label {
|
||||
color: #e2e8f0;
|
||||
font-weight: 600;
|
||||
margin-left: 0.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
background-color: rgba(45, 55, 72, 0.8);
|
||||
border-color: rgba(239, 68, 68, 0.5);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.form-check-input:checked {
|
||||
background-color: #ef4444;
|
||||
border-color: #ef4444;
|
||||
}
|
||||
|
||||
.form-check-input:focus {
|
||||
box-shadow: 0 0 0 0.2rem rgba(239, 68, 68, 0.25);
|
||||
}
|
||||
|
||||
.btn-container {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 2rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.edit-btn {
|
||||
padding: 0.75rem 2rem;
|
||||
border-radius: 50px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
transition: all 0.3s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.edit-btn.primary {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.edit-btn.primary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.edit-btn.secondary {
|
||||
background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%);
|
||||
color: white;
|
||||
box-shadow: 0 4px 15px rgba(74, 85, 104, 0.3);
|
||||
}
|
||||
|
||||
.edit-btn.secondary:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(74, 85, 104, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.input-icon {
|
||||
color: #667eea;
|
||||
}
|
||||
|
||||
.warning-icon {
|
||||
color: #f59e0b;
|
||||
}
|
||||
|
||||
.danger-icon {
|
||||
color: #ef4444;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.edit-container {
|
||||
margin: 1rem;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.edit-title {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.btn-container {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.edit-btn {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h2>Edit User - {{ user_data.user_id }}</h2>
|
||||
<div class="edit-container">
|
||||
<div class="edit-header">
|
||||
<h2 class="edit-title">
|
||||
<i class="fas fa-user-edit"></i> Edit User
|
||||
</h2>
|
||||
<p class="edit-subtitle">{{ user_data.user_id }}</p>
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
<!-- Core Statistics Section -->
|
||||
<div class="form-section">
|
||||
<div class="section-title">
|
||||
<i class="fas fa-chart-bar"></i> Core Statistics
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="points">Points</label>
|
||||
<input type="number" class="form-control" id="points" name="points" value="{{ user_data.points }}" required>
|
||||
<label for="points">
|
||||
<i class="fas fa-coins input-icon"></i> Points
|
||||
</label>
|
||||
<input type="number" class="form-control" id="points" name="points"
|
||||
value="{{ user_data.points }}" min="0" placeholder="User points" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="level">
|
||||
<i class="fas fa-layer-group input-icon"></i> Level
|
||||
</label>
|
||||
<input type="number" class="form-control" id="level" name="level"
|
||||
value="{{ user_data.level }}" min="1" placeholder="User level" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="level">Level</label>
|
||||
<input type="number" class="form-control" id="level" name="level" value="{{ user_data.level }}" required>
|
||||
<label for="xp">
|
||||
<i class="fas fa-star input-icon"></i> Experience Points (XP)
|
||||
</label>
|
||||
<input type="number" class="form-control" id="xp" name="xp"
|
||||
value="{{ user_data.xp }}" min="0" placeholder="Experience points" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Permissions & Access Section -->
|
||||
<div class="form-section">
|
||||
<div class="section-title">
|
||||
<i class="fas fa-shield-alt"></i> Permissions & Access
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="permission">Permission Level</label>
|
||||
<input type="number" class="form-control" id="permission" name="permission" min="0" max="{{ max_permission }}" value="{{ user_data.permission }}" required>
|
||||
<label for="permission">
|
||||
<i class="fas fa-key input-icon"></i> Permission Level
|
||||
</label>
|
||||
<input type="number" class="form-control" id="permission" name="permission"
|
||||
min="0" max="{{ max_permission }}" value="{{ user_data.permission }}"
|
||||
placeholder="Permission level (0-{{ max_permission }})" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="askmultus">AskMultus Executions</label>
|
||||
<input type="number" class="form-control" id="askmultus" name="askmultus" value="{{ user_data.askmultus }}" required>
|
||||
<label for="askmultus">
|
||||
<i class="fas fa-robot input-icon"></i> AskMultus Executions
|
||||
</label>
|
||||
<input type="number" class="form-control" id="askmultus" name="askmultus"
|
||||
value="{{ user_data.askmultus }}" min="0" placeholder="AI query count" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Moderation & Integration Section -->
|
||||
<div class="form-section">
|
||||
<div class="section-title">
|
||||
<i class="fas fa-cogs"></i> Moderation & Integration
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="filter_value">Filter Value (e.g., Warnings)</label>
|
||||
<input type="number" class="form-control" id="filter_value" name="filter_value" value="{{ user_data.filter_value }}" required>
|
||||
<label for="filter_value">
|
||||
<i class="fas fa-exclamation-triangle warning-icon"></i> Filter Value (Warnings)
|
||||
</label>
|
||||
<input type="number" class="form-control" id="filter_value" name="filter_value"
|
||||
value="{{ user_data.filter_value }}" min="0" placeholder="Warning count" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="rank">Rank (for Minecraft Integration)</label>
|
||||
<input type="text" class="form-control" id="rank" name="rank" value="{{ user_data.rank }}">
|
||||
<label for="rank">
|
||||
<i class="fas fa-cube input-icon"></i> Minecraft Rank
|
||||
</label>
|
||||
<input type="text" class="form-control" id="rank" name="rank"
|
||||
value="{{ user_data.rank }}" placeholder="Minecraft integration rank">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="xp">XP</label>
|
||||
<input type="number" class="form-control" id="xp" name="xp" value="{{ user_data.xp }}" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Danger Zone -->
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="ban" name="ban" value="1" {% if user_data.ban %}checked{% endif %}>
|
||||
<label class="form-check-label" for="ban">Ban User</label>
|
||||
<input type="checkbox" class="form-check-input" id="ban" name="ban" value="1"
|
||||
{% if user_data.ban %}checked{% endif %}>
|
||||
<label class="form-check-label" for="ban">
|
||||
<i class="fas fa-ban danger-icon"></i> Ban User from Bot Services
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="btn-container">
|
||||
<button type="submit" class="edit-btn primary">
|
||||
<i class="fas fa-save"></i> Save Changes
|
||||
</button>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=guild_id) }}" class="edit-btn secondary">
|
||||
<i class="fas fa-arrow-left"></i> Back to Dashboard
|
||||
</a>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary mt-3">Save Changes</button>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=guild_id) }}" class="btn btn-secondary mt-3">Back to Dashboard</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -6,38 +6,270 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Global Admin Dashboard</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.admin-navbar {
|
||||
background: linear-gradient(135deg, #e53e3e 0%, #c53030 100%);
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-weight: 700;
|
||||
font-size: 1.5rem;
|
||||
color: #f8f9fa !important;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link {
|
||||
color: #f8f9fa !important;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
border-radius: 8px;
|
||||
margin: 0 5px;
|
||||
padding: 8px 16px !important;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link:hover {
|
||||
color: #ffffff !important;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.admin-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.admin-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.admin-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.admin-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.admin-card {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border-radius: 15px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.admin-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.admin-card .card-body {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.card-text {
|
||||
color: #cbd5e0;
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
font-size: 1.1rem;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 25px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.badge-success-custom {
|
||||
background: linear-gradient(135deg, #48bb78, #38a169);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(72, 187, 120, 0.3);
|
||||
}
|
||||
|
||||
.badge-danger-custom {
|
||||
background: linear-gradient(135deg, #e53e3e, #c53030);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3);
|
||||
}
|
||||
|
||||
.admin-button {
|
||||
border-radius: 25px;
|
||||
padding: 0.75rem 2rem;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 1rem;
|
||||
border: none;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-start {
|
||||
background: linear-gradient(135deg, #48bb78, #38a169);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(72, 187, 120, 0.3);
|
||||
}
|
||||
|
||||
.btn-start:hover:not(.disabled) {
|
||||
background: linear-gradient(135deg, #38a169, #2f855a);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(72, 187, 120, 0.4);
|
||||
}
|
||||
|
||||
.btn-stop {
|
||||
background: linear-gradient(135deg, #e53e3e, #c53030);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3);
|
||||
}
|
||||
|
||||
.btn-stop:hover:not(.disabled) {
|
||||
background: linear-gradient(135deg, #c53030, #9c2626);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(229, 62, 62, 0.4);
|
||||
}
|
||||
|
||||
.btn-logs {
|
||||
background: linear-gradient(135deg, #ffa500, #ff8c00);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
|
||||
}
|
||||
|
||||
.btn-logs:hover {
|
||||
background: linear-gradient(135deg, #ff8c00, #ff7700);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(255, 165, 0, 0.4);
|
||||
}
|
||||
|
||||
.disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.crown-icon {
|
||||
color: #ffd700;
|
||||
margin-right: 0.5rem;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.admin-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.admin-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.admin-card .card-body {
|
||||
padding: 1.5rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="#">Multus Bot - Global Admin Dashboard</a>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark admin-navbar">
|
||||
<a class="navbar-brand" href="#">
|
||||
<i class="fas fa-crown crown-icon"></i>Multus Bot - Global Admin Dashboard
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('user_landing_page') }}">Switch to User View</a>
|
||||
<a class="nav-link" href="{{ url_for('user_landing_page') }}">
|
||||
<i class="fas fa-user"></i> Switch to User View
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('logout') }}">Logout</a>
|
||||
<a class="nav-link" href="{{ url_for('logout') }}">
|
||||
<i class="fas fa-sign-out-alt"></i> Logout
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-center">Welcome, {{ g.user_info['username'] }} (Admin)</h1>
|
||||
<p class="text-center">Manage global bot settings and controls.</p>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 col-xl-6">
|
||||
<div class="admin-container">
|
||||
<div class="admin-header">
|
||||
<h1 class="admin-title">
|
||||
<i class="fas fa-crown crown-icon"></i>Welcome, {{ g.user_info['username'] }}
|
||||
</h1>
|
||||
<p class="admin-subtitle">Global Administrator Dashboard - Manage bot settings and controls</p>
|
||||
</div>
|
||||
|
||||
<div class="card mt-4">
|
||||
<div class="admin-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Bot Status</h5>
|
||||
<p class="card-text">Status:
|
||||
<span class="badge badge-{{ 'success' if g.bot_running else 'danger' }}">
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-robot"></i> Bot Status & Control
|
||||
</h5>
|
||||
<p class="card-text">
|
||||
Current Status:
|
||||
<span class="status-badge {{ 'badge-success-custom' if g.bot_running else 'badge-danger-custom' }}">
|
||||
<i class="fas fa-{{ 'play' if g.bot_running else 'stop' }}"></i>
|
||||
{{ "Running" if g.bot_running else "Stopped" }}
|
||||
</span>
|
||||
</p>
|
||||
<a href="{{ url_for('start') }}" class="btn btn-primary btn-block {{ 'disabled' if g.bot_running else '' }}">Start Bot</a>
|
||||
<a href="{{ url_for('stop') }}" class="btn btn-danger btn-block {{ 'disabled' if not g.bot_running else '' }}">Stop Bot</a>
|
||||
<a href="{{ url_for('view_logs') }}" class="btn btn-warning btn-block">View Logs</a>
|
||||
|
||||
<a href="{{ url_for('start') }}" class="admin-button btn-start {{ 'disabled' if g.bot_running else '' }}">
|
||||
<i class="fas fa-play"></i> Start Bot
|
||||
</a>
|
||||
|
||||
<a href="{{ url_for('stop') }}" class="admin-button btn-stop {{ 'disabled' if not g.bot_running else '' }}">
|
||||
<i class="fas fa-stop"></i> Stop Bot
|
||||
</a>
|
||||
|
||||
<a href="{{ url_for('view_logs') }}" class="admin-button btn-logs">
|
||||
<i class="fas fa-file-alt"></i> View Logs
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,69 +5,296 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Welcome to Multus Bot</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background-color: #f7f7f7;
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 25%, #2d3748 75%, #0c1426 100%);
|
||||
min-height: 100vh;
|
||||
color: #e2e8f0;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.hero {
|
||||
background-image: url('https://source.unsplash.com/1600x900/?technology,ai');
|
||||
background: linear-gradient(135deg, rgba(12, 20, 38, 0.9) 0%, rgba(26, 31, 46, 0.8) 50%, rgba(45, 55, 72, 0.9) 100%),
|
||||
url('https://source.unsplash.com/1600x900/?technology,ai,dark');
|
||||
background-size: cover;
|
||||
color: white;
|
||||
padding: 100px 0;
|
||||
background-position: center;
|
||||
color: #ffffff;
|
||||
padding: 120px 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.hero-overlay {
|
||||
|
||||
.hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
background: linear-gradient(45deg, rgba(76, 81, 191, 0.3) 0%, rgba(139, 92, 246, 0.2) 100%);
|
||||
animation: gradientShift 8s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes gradientShift {
|
||||
0% { opacity: 0.3; }
|
||||
100% { opacity: 0.6; }
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
.feature-section {
|
||||
padding: 50px 0;
|
||||
|
||||
.hero h1 {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1.5rem;
|
||||
text-shadow: 2px 2px 20px rgba(0, 0, 0, 0.7);
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
.footer {
|
||||
background-color: #343a40;
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0px); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
|
||||
.hero .lead {
|
||||
font-size: 1.4rem;
|
||||
margin-bottom: 2rem;
|
||||
text-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.hero-btn {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
border: none;
|
||||
padding: 1rem 2.5rem;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
border-radius: 50px;
|
||||
color: white;
|
||||
padding: 20px 0;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.hero-btn::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
||||
transition: left 0.5s;
|
||||
}
|
||||
|
||||
.hero-btn:hover::before {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.hero-btn:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 12px 35px rgba(102, 126, 234, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.feature-section {
|
||||
padding: 80px 0;
|
||||
background: rgba(26, 31, 46, 0.6);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 20px;
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.feature-card {
|
||||
background: rgba(45, 55, 72, 0.7);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 20px;
|
||||
padding: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
text-align: center;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.feature-card::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 4px;
|
||||
background: linear-gradient(90deg, #667eea, #764ba2);
|
||||
transform: scaleX(0);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.feature-card:hover::before {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
|
||||
.feature-card:hover {
|
||||
transform: translateY(-10px);
|
||||
border-color: rgba(102, 126, 234, 0.5);
|
||||
box-shadow: 0 15px 40px rgba(102, 126, 234, 0.2);
|
||||
}
|
||||
|
||||
.feature-icon {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 1.5rem auto;
|
||||
font-size: 2rem;
|
||||
color: white;
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); }
|
||||
50% { transform: scale(1.05); }
|
||||
}
|
||||
|
||||
.feature-card h3 {
|
||||
color: #e2e8f0;
|
||||
font-weight: 600;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.feature-card p {
|
||||
color: #a0aec0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
background: rgba(12, 20, 38, 0.8);
|
||||
backdrop-filter: blur(15px);
|
||||
border-radius: 20px;
|
||||
padding: 4rem 0;
|
||||
margin: 2rem 0;
|
||||
border: 1px solid rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.info-section h2 {
|
||||
color: #e2e8f0;
|
||||
font-weight: 700;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.info-section .lead {
|
||||
color: #a0aec0;
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.contact-section {
|
||||
background: linear-gradient(135deg, rgba(26, 31, 46, 0.9) 0%, rgba(45, 55, 72, 0.8) 100%);
|
||||
backdrop-filter: blur(15px);
|
||||
border-radius: 20px;
|
||||
padding: 4rem 0;
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
}
|
||||
|
||||
.contact-btn {
|
||||
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
|
||||
border: none;
|
||||
padding: 0.8rem 2rem;
|
||||
border-radius: 50px;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.contact-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 10px 25px rgba(118, 75, 162, 0.3);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 100%);
|
||||
color: #a0aec0;
|
||||
padding: 2rem 0;
|
||||
text-align: center;
|
||||
border-top: 1px solid rgba(102, 126, 234, 0.1);
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.hero h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.hero .lead {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.feature-section {
|
||||
padding: 3rem 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% include 'navbar.html' %}
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-overlay"></div>
|
||||
<div class="container hero-content">
|
||||
<h1 class="display-4">Welcome to Multus Bot</h1>
|
||||
<h1 class="display-4">
|
||||
<i class="fas fa-robot"></i> Welcome to Multus Bot
|
||||
</h1>
|
||||
<p class="lead">The AI-powered Discord bot that helps manage your server with advanced tools and intelligent automation.</p>
|
||||
<a href="{{ url_for('login') }}" class="btn btn-primary btn-lg">Get Started</a>
|
||||
<a href="{{ url_for('login') }}" class="hero-btn">
|
||||
<i class="fas fa-rocket"></i> Get Started
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="feature-section">
|
||||
<div class="container">
|
||||
<div class="row text-center">
|
||||
<section class="feature-section">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<img src="https://source.unsplash.com/100x100/?automation,robot" alt="Automation" class="img-fluid mb-3">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="fas fa-magic"></i>
|
||||
</div>
|
||||
<h3>Advanced AI Automation</h3>
|
||||
<p>Multus Bot automates repetitive tasks and manages your server effortlessly, so you can focus on what matters most.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<img src="https://source.unsplash.com/100x100/?chat,bot" alt="Chat Assistance" class="img-fluid mb-3">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="fas fa-comments"></i>
|
||||
</div>
|
||||
<h3>Smart Chat Assistance</h3>
|
||||
<p>Using powerful AI, Multus Bot can assist with chat moderation, user queries, and provide useful information.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<img src="https://source.unsplash.com/100x100/?data,analytics" alt="Server Analytics" class="img-fluid mb-3">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="fas fa-chart-line"></i>
|
||||
</div>
|
||||
<h3>Detailed Server Insights</h3>
|
||||
<p>Gain access to detailed analytics and user engagement metrics to keep your server thriving and well-managed.</p>
|
||||
</div>
|
||||
@@ -75,27 +302,28 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="bg-light py-5">
|
||||
<div class="container">
|
||||
<section class="info-section">
|
||||
<div class="text-center">
|
||||
<h2>Exclusively Available on Ludi et Historia</h2>
|
||||
<h2><i class="fas fa-crown"></i> Exclusively Available on Ludi et Historia</h2>
|
||||
<p class="lead">Currently, Multus Bot is available only for the <strong>Ludi et Historia</strong> Discord server. We are working to bring it to more communities soon.</p>
|
||||
<p>If you're part of Ludi et Historia, start using Multus Bot now!</p>
|
||||
</div>
|
||||
<p style="color: #a0aec0;">If you're part of Ludi et Historia, start using Multus Bot now!</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="bg-dark text-white py-5">
|
||||
<div class="container text-center">
|
||||
<h2>Need Assistance?</h2>
|
||||
<p>For any help or questions, reach out to <strong>@simolzimol</strong> on Discord. We're here to help!</p>
|
||||
<a href="https://discordapp.com/users/@simolzimol" class="btn btn-light">Contact SimolZimol</a>
|
||||
<section class="contact-section">
|
||||
<div class="text-center">
|
||||
<h2><i class="fas fa-question-circle"></i> Need Assistance?</h2>
|
||||
<p style="color: #a0aec0; margin-bottom: 2rem;">For any help or questions, reach out to <strong>@simolzimol</strong> on Discord. We're here to help!</p>
|
||||
<a href="https://discordapp.com/users/@simolzimol" class="contact-btn">
|
||||
<i class="fab fa-discord"></i> Contact SimolZimol
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<p>© 2024 Multus Bot | Built by SimolZimol | Exclusively on Ludi et Historia</p>
|
||||
<p><i class="fas fa-code"></i> © 2024 Multus Bot | Built by SimolZimol | Exclusively on Ludi et Historia</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -3,19 +3,279 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Login</title>
|
||||
<title>Login - Multus Bot</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 25%, #2d3748 75%, #0c1426 100%);
|
||||
min-height: 100vh;
|
||||
color: #e2e8f0;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
body::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: radial-gradient(circle at 20% 80%, rgba(102, 126, 234, 0.1) 0%, transparent 50%),
|
||||
radial-gradient(circle at 80% 20%, rgba(139, 92, 246, 0.1) 0%, transparent 50%);
|
||||
animation: gradientFloat 8s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes gradientFloat {
|
||||
0% { opacity: 0.3; }
|
||||
100% { opacity: 0.6; }
|
||||
}
|
||||
|
||||
.login-container {
|
||||
background: rgba(26, 31, 46, 0.8);
|
||||
backdrop-filter: blur(20px);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 30px;
|
||||
padding: 4rem;
|
||||
text-align: center;
|
||||
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.4);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
max-width: 500px;
|
||||
width: 90%;
|
||||
animation: slideUp 0.8s ease-out;
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.login-logo {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 2rem auto;
|
||||
font-size: 2.5rem;
|
||||
color: white;
|
||||
animation: pulse 2s infinite;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login-logo::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.1), transparent);
|
||||
animation: shine 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes shine {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); }
|
||||
50% { transform: scale(1.05); }
|
||||
}
|
||||
|
||||
.login-title {
|
||||
color: #e2e8f0;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.login-subtitle {
|
||||
color: #a0aec0;
|
||||
font-size: 1.1rem;
|
||||
margin-bottom: 3rem;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.discord-btn {
|
||||
background: linear-gradient(135deg, #5865f2 0%, #4752c4 100%);
|
||||
border: none;
|
||||
padding: 1rem 2.5rem;
|
||||
border-radius: 50px;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 10px 30px rgba(88, 101, 242, 0.3);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.discord-btn::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
||||
transition: left 0.5s;
|
||||
}
|
||||
|
||||
.discord-btn:hover::before {
|
||||
left: 100%;
|
||||
}
|
||||
|
||||
.discord-btn:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 15px 40px rgba(88, 101, 242, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.discord-logo {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
filter: brightness(0) invert(1);
|
||||
}
|
||||
|
||||
.features-list {
|
||||
margin-top: 2rem;
|
||||
text-align: left;
|
||||
color: #a0aec0;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.feature-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.feature-icon {
|
||||
color: #667eea;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.decorative-elements {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
pointer-events: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.decorative-circle {
|
||||
position: absolute;
|
||||
border: 1px solid rgba(102, 126, 234, 0.1);
|
||||
border-radius: 50%;
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.decorative-circle:nth-child(1) {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
top: 10%;
|
||||
left: 10%;
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.decorative-circle:nth-child(2) {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
top: 60%;
|
||||
right: 15%;
|
||||
animation-delay: 2s;
|
||||
}
|
||||
|
||||
.decorative-circle:nth-child(3) {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
bottom: 20%;
|
||||
left: 20%;
|
||||
animation-delay: 4s;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0px) rotate(0deg); }
|
||||
50% { transform: translateY(-20px) rotate(180deg); }
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.login-container {
|
||||
padding: 2.5rem 2rem;
|
||||
}
|
||||
|
||||
.login-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.discord-btn {
|
||||
padding: 0.875rem 2rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-center">Login with Discord</h1>
|
||||
<div class="text-center mt-4">
|
||||
<a href="{{ url_for('login') }}" class="btn btn-primary">
|
||||
<img src="https://discord.com/assets/847541504914fd33810e70a0ea73177e.svg" width="20" alt="Discord Logo">
|
||||
<div class="decorative-elements">
|
||||
<div class="decorative-circle"></div>
|
||||
<div class="decorative-circle"></div>
|
||||
<div class="decorative-circle"></div>
|
||||
</div>
|
||||
|
||||
<div class="login-container">
|
||||
<div class="login-logo">
|
||||
<i class="fas fa-robot"></i>
|
||||
</div>
|
||||
<h1 class="login-title">Welcome to Multus</h1>
|
||||
<p class="login-subtitle">Connect with Discord to access your AI-powered bot dashboard and start managing your server with intelligent automation.</p>
|
||||
|
||||
<a href="{{ url_for('login') }}" class="discord-btn">
|
||||
<img src="https://discord.com/assets/847541504914fd33810e70a0ea73177e.svg" class="discord-logo" alt="Discord Logo">
|
||||
Login with Discord
|
||||
</a>
|
||||
|
||||
<div class="features-list">
|
||||
<div class="feature-item">
|
||||
<i class="fas fa-check feature-icon"></i>
|
||||
<span>Secure Discord OAuth authentication</span>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<i class="fas fa-shield-alt feature-icon"></i>
|
||||
<span>Protected bot management</span>
|
||||
</div>
|
||||
<div class="feature-item">
|
||||
<i class="fas fa-chart-line feature-icon"></i>
|
||||
<span>Server analytics and insights</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
|
||||
@@ -6,32 +6,259 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bot Logs</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #0c1426 0%, #1a1f2e 25%, #2d3748 75%, #0c1426 100%);
|
||||
min-height: 100vh;
|
||||
color: #e2e8f0;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
.logs-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
padding: 2rem 0;
|
||||
}
|
||||
|
||||
.logs-title {
|
||||
color: #e2e8f0;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.logs-subtitle {
|
||||
color: #a0aec0;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.logs-container {
|
||||
background: rgba(26, 31, 46, 0.8);
|
||||
backdrop-filter: blur(15px);
|
||||
border: 1px solid rgba(102, 126, 234, 0.2);
|
||||
border-radius: 20px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.logs-header-controls {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
padding: 1.5rem;
|
||||
border-bottom: 1px solid rgba(102, 126, 234, 0.1);
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.logs-btn {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
border: none;
|
||||
padding: 0.75rem 1.5rem;
|
||||
border-radius: 50px;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-weight: 600;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
|
||||
}
|
||||
|
||||
.logs-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.4);
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.logs-btn.secondary {
|
||||
background: linear-gradient(135deg, #4a5568 0%, #2d3748 100%);
|
||||
box-shadow: 0 4px 15px rgba(74, 85, 104, 0.3);
|
||||
}
|
||||
|
||||
.logs-btn.secondary:hover {
|
||||
box-shadow: 0 8px 25px rgba(74, 85, 104, 0.4);
|
||||
}
|
||||
|
||||
.logs-btn.back-btn {
|
||||
background: linear-gradient(135deg, #38b2ac 0%, #319795 100%);
|
||||
box-shadow: 0 4px 15px rgba(56, 178, 172, 0.3);
|
||||
}
|
||||
|
||||
.logs-btn.back-btn:hover {
|
||||
box-shadow: 0 8px 25px rgba(56, 178, 172, 0.4);
|
||||
}
|
||||
|
||||
.log-content {
|
||||
height: 500px;
|
||||
overflow-y: auto;
|
||||
background: rgba(12, 20, 38, 0.9);
|
||||
color: #e2e8f0;
|
||||
padding: 1.5rem;
|
||||
font-family: 'Courier New', monospace;
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.4;
|
||||
border: none;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #667eea rgba(26, 31, 46, 0.5);
|
||||
}
|
||||
|
||||
.log-content::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
.log-content::-webkit-scrollbar-track {
|
||||
background: rgba(26, 31, 46, 0.5);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.log-content::-webkit-scrollbar-thumb {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.log-content::-webkit-scrollbar-thumb:hover {
|
||||
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
display: none;
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.loading-spinner i {
|
||||
font-size: 2rem;
|
||||
animation: spin 1s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.status-indicator {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
color: #a0aec0;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.status-dot {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
background: #48bb78;
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.logs-header-controls {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.logs-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.log-content {
|
||||
height: 400px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-center">Bot Logs</h1>
|
||||
<div class="card mt-4">
|
||||
<div class="card-body">
|
||||
<button class="btn btn-primary mb-3" onclick="refreshLogs()">Refresh Logs</button>
|
||||
<a href="{{ url_for('download_logs') }}" class="btn btn-secondary mb-3">Download Logs</a>
|
||||
<pre id="log-content"
|
||||
style="height: 500px; overflow-y: scroll; background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd;"></pre>
|
||||
<a href="{{ url_for('admin_dashboard') }}" class="btn btn-secondary btn-block mt-3">Back to Dashboard</a>
|
||||
<div class="logs-header">
|
||||
<h1 class="logs-title">
|
||||
<i class="fas fa-file-alt"></i> Bot Logs
|
||||
</h1>
|
||||
<p class="logs-subtitle">Real-time bot activity and system logs</p>
|
||||
</div>
|
||||
|
||||
<div class="logs-container">
|
||||
<div class="logs-header-controls">
|
||||
<div class="d-flex gap-2 flex-wrap">
|
||||
<button class="logs-btn" onclick="refreshLogs()">
|
||||
<i class="fas fa-sync-alt"></i> Refresh Logs
|
||||
</button>
|
||||
<a href="{{ url_for('download_logs') }}" class="logs-btn secondary">
|
||||
<i class="fas fa-download"></i> Download Logs
|
||||
</a>
|
||||
</div>
|
||||
<div class="status-indicator">
|
||||
<div class="status-dot"></div>
|
||||
<span>Live monitoring active</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="loading-spinner" id="loading-spinner">
|
||||
<i class="fas fa-spinner"></i>
|
||||
<p>Loading logs...</p>
|
||||
</div>
|
||||
|
||||
<pre id="log-content" class="log-content"></pre>
|
||||
|
||||
<div style="padding: 1.5rem; text-align: center; border-top: 1px solid rgba(102, 126, 234, 0.1);">
|
||||
<a href="{{ url_for('admin_dashboard') }}" class="logs-btn back-btn">
|
||||
<i class="fas fa-arrow-left"></i> Back to Dashboard
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script>
|
||||
function refreshLogs() {
|
||||
const spinner = document.getElementById("loading-spinner");
|
||||
const logContent = document.getElementById("log-content");
|
||||
|
||||
spinner.style.display = "block";
|
||||
logContent.style.display = "none";
|
||||
|
||||
fetch('{{ url_for("get_logs") }}')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
document.getElementById("log-content").textContent = data.logs;
|
||||
logContent.textContent = data.logs;
|
||||
spinner.style.display = "none";
|
||||
logContent.style.display = "block";
|
||||
|
||||
// Auto-scroll to bottom
|
||||
logContent.scrollTop = logContent.scrollHeight;
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error fetching logs:', error);
|
||||
logContent.textContent = 'Error loading logs. Please try again.';
|
||||
spinner.style.display = "none";
|
||||
logContent.style.display = "block";
|
||||
});
|
||||
}
|
||||
|
||||
// Auto-refresh logs every 30 seconds
|
||||
setInterval(refreshLogs, 30000);
|
||||
|
||||
window.onload = refreshLogs;
|
||||
</script>
|
||||
</body>
|
||||
|
||||
@@ -1,18 +1,69 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||
<a class="navbar-brand" href="/">Multus Bot</a>
|
||||
<style>
|
||||
.navbar-dark-custom {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-weight: 700;
|
||||
font-size: 1.5rem;
|
||||
color: #f8f9fa !important;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link {
|
||||
color: #e0e0e0 !important;
|
||||
font-weight: 500;
|
||||
transition: all 0.3s ease;
|
||||
border-radius: 8px;
|
||||
margin: 0 5px;
|
||||
padding: 8px 16px !important;
|
||||
}
|
||||
|
||||
.navbar-nav .nav-link:hover {
|
||||
color: #ffffff !important;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
border-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.navbar-toggler-icon {
|
||||
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.8%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
|
||||
}
|
||||
</style>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-dark navbar-dark-custom">
|
||||
<a class="navbar-brand" href="/">
|
||||
<i class="fas fa-robot"></i> Multus Bot
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ml-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('user_landing_page') }}">Server Selection</a>
|
||||
<a class="nav-link" href="{{ url_for('user_landing_page') }}">
|
||||
<i class="fas fa-server"></i> Server Selection
|
||||
</a>
|
||||
</li>
|
||||
<!-- Admin Link nur für Bot-Admins anzeigen -->
|
||||
{% if g.is_admin %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('global_admin_dashboard') }}">Admin Dashboard</a>
|
||||
<a class="nav-link" href="{{ url_for('global_admin_dashboard') }}">
|
||||
<i class="fas fa-crown"></i> Admin Dashboard
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('logout') }}">Logout</a>
|
||||
<a class="nav-link" href="{{ url_for('logout') }}">
|
||||
<i class="fas fa-sign-out-alt"></i> Logout
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -5,58 +5,262 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Server Admin Dashboard</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
.scrollable-table {
|
||||
max-height: 400px;
|
||||
overflow-y: auto;
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.admin-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.admin-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.admin-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.admin-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.admin-card {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border-radius: 15px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.admin-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.admin-card .card-body {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.card-text {
|
||||
color: #cbd5e0;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.scrollable-table {
|
||||
max-height: 500px;
|
||||
overflow-y: auto;
|
||||
border-radius: 10px;
|
||||
background: rgba(40, 40, 56, 0.9);
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 0;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background: linear-gradient(135deg, #2d3748 0%, #1a202c 100%);
|
||||
color: #f7fafc;
|
||||
border: none;
|
||||
padding: 1rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.9rem;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.table tbody tr {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
transition: all 0.3s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table tbody tr:hover {
|
||||
background: rgba(74, 85, 104, 0.8);
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.table tbody td {
|
||||
padding: 1rem;
|
||||
vertical-align: middle;
|
||||
border: none;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
font-size: 0.9rem;
|
||||
padding: 0.5em;
|
||||
border-radius: 5px;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 25px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.badge-success-custom {
|
||||
background: linear-gradient(135deg, #48bb78, #38a169);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(72, 187, 120, 0.3);
|
||||
}
|
||||
|
||||
.badge-warning-custom {
|
||||
background: linear-gradient(135deg, #ffa500, #ff8c00);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
|
||||
}
|
||||
|
||||
.badge-danger-custom {
|
||||
background: linear-gradient(135deg, #e53e3e, #c53030);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3);
|
||||
}
|
||||
|
||||
.admin-btn {
|
||||
background: linear-gradient(135deg, #4299e1, #3182ce);
|
||||
border: none;
|
||||
border-radius: 20px;
|
||||
padding: 0.5rem 1rem;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
|
||||
}
|
||||
|
||||
.admin-btn:hover {
|
||||
background: linear-gradient(135deg, #3182ce, #2c5282);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 6px 16px rgba(66, 153, 225, 0.4);
|
||||
}
|
||||
|
||||
.section-icon {
|
||||
font-size: 1.3rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.giveaway-icon { color: #ffd700; }
|
||||
.user-icon { color: #4299e1; }
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.admin-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.admin-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.table thead th,
|
||||
.table tbody td {
|
||||
padding: 0.75rem 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.scrollable-table {
|
||||
max-height: 400px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-center">Server Admin Dashboard for {{ guild_name }}</h1>
|
||||
<p class="text-center text-muted">Manage server-specific settings and data for server <strong>{{ guild_id }}</strong>.</p>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-12 col-xl-10">
|
||||
<div class="admin-container">
|
||||
<div class="admin-header">
|
||||
<h1 class="admin-title">
|
||||
<i class="fas fa-cogs"></i> Server Admin Dashboard
|
||||
</h1>
|
||||
<p class="admin-subtitle">{{ guild_name }} • Manage server settings and data</p>
|
||||
</div>
|
||||
|
||||
<!-- Giveaway Management Section -->
|
||||
<div class="card mt-4">
|
||||
<div class="admin-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Giveaway Management</h5>
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-gift section-icon giveaway-icon"></i>Giveaway Management
|
||||
</h5>
|
||||
<p class="card-text">View and manage all active giveaways for this server.</p>
|
||||
<div class="table-responsive scrollable-table">
|
||||
<table class="table table-bordered">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Platform</th>
|
||||
<th>Winner</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
<th><i class="fas fa-tag"></i> Name</th>
|
||||
<th><i class="fas fa-gamepad"></i> Platform</th>
|
||||
<th><i class="fas fa-crown"></i> Winner</th>
|
||||
<th><i class="fas fa-info-circle"></i> Status</th>
|
||||
<th><i class="fas fa-cog"></i> Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if giveaways %}
|
||||
{% for giveaway in giveaways %}
|
||||
<tr>
|
||||
<td>{{ giveaway.name }}</td>
|
||||
<td><strong>{{ giveaway.name }}</strong></td>
|
||||
<td>{{ giveaway.platform }}</td>
|
||||
<td>{{ giveaway.winner_dc_id }}</td>
|
||||
<td>{{ giveaway.winner_dc_id or 'Not Assigned' }}</td>
|
||||
<td>
|
||||
{% if giveaway.aktiv %}
|
||||
<span class="badge badge-success status-badge">Redeemed</span>
|
||||
<span class="badge badge-success-custom status-badge">
|
||||
<i class="fas fa-check"></i> Redeemed
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning status-badge">Not Redeemed</span>
|
||||
<span class="badge badge-warning-custom status-badge">
|
||||
<i class="fas fa-hourglass-half"></i> Pending
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ url_for('edit_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="btn btn-primary btn-sm">Edit</a>
|
||||
<a href="{{ url_for('edit_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="admin-btn">
|
||||
<i class="fas fa-edit"></i> Edit
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="5" class="text-center" style="color: #a0aec0; padding: 2rem;">
|
||||
<i class="fas fa-gift" style="font-size: 2rem; margin-bottom: 1rem; display: block;"></i>
|
||||
No giveaways found for this server.
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -64,44 +268,64 @@
|
||||
</div>
|
||||
|
||||
<!-- User Management Section -->
|
||||
<div class="card mt-4">
|
||||
<div class="admin-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">User Management</h5>
|
||||
<h5 class="card-title">
|
||||
<i class="fas fa-users section-icon user-icon"></i>User Management
|
||||
</h5>
|
||||
<p class="card-text">Manage server members' data, including points, bans, and permissions.</p>
|
||||
<div class="table-responsive scrollable-table">
|
||||
<table class="table table-bordered">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>User ID</th>
|
||||
<th>Points</th>
|
||||
<th>Level</th>
|
||||
<th>Banned</th>
|
||||
<th>Actions</th>
|
||||
<th><i class="fas fa-id-card"></i> User ID</th>
|
||||
<th><i class="fas fa-coins"></i> Points</th>
|
||||
<th><i class="fas fa-layer-group"></i> Level</th>
|
||||
<th><i class="fas fa-ban"></i> Status</th>
|
||||
<th><i class="fas fa-cog"></i> Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if server_users %}
|
||||
{% for user in server_users %}
|
||||
<tr>
|
||||
<td>{{ user.user_id }}</td>
|
||||
<td>{{ user.points }}</td>
|
||||
<td><code>{{ user.user_id }}</code></td>
|
||||
<td>{{ "{:,}".format(user.points) }}</td>
|
||||
<td>{{ user.level }}</td>
|
||||
<td>
|
||||
{% if user.ban %}
|
||||
<span class="badge badge-danger status-badge">Banned</span>
|
||||
<span class="badge badge-danger-custom status-badge">
|
||||
<i class="fas fa-ban"></i> Banned
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge badge-success status-badge">Active</span>
|
||||
<span class="badge badge-success-custom status-badge">
|
||||
<i class="fas fa-check"></i> Active
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ url_for('edit_user', guild_id=guild_id, user_id=user.user_id) }}" class="btn btn-primary btn-sm">Edit</a>
|
||||
<a href="{{ url_for('edit_user', guild_id=guild_id, user_id=user.user_id) }}" class="admin-btn">
|
||||
<i class="fas fa-edit"></i> Edit
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="5" class="text-center" style="color: #a0aec0; padding: 2rem;">
|
||||
<i class="fas fa-users" style="font-size: 2rem; margin-bottom: 1rem; display: block;"></i>
|
||||
No users found for this server.
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -5,36 +5,224 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>User Dashboard</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.dashboard-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.welcome-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.welcome-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.welcome-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border-radius: 15px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stat-card:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.stat-card .card-body {
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-title {
|
||||
color: #cbd5e0;
|
||||
font-weight: 600;
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
color: #f7fafc;
|
||||
font-size: 3rem;
|
||||
font-weight: 700;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.stat-icon {
|
||||
font-size: 2rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.points-icon { color: #ffd700; }
|
||||
.level-icon { color: #48bb78; }
|
||||
.admin-icon { color: #e53e3e; }
|
||||
.giveaway-icon { color: #4299e1; }
|
||||
|
||||
.admin-card {
|
||||
background: linear-gradient(135deg, rgba(229, 62, 62, 0.2) 0%, rgba(197, 48, 48, 0.2) 100%);
|
||||
border: 1px solid rgba(229, 62, 62, 0.3);
|
||||
}
|
||||
|
||||
.action-button {
|
||||
background: linear-gradient(135deg, #4299e1, #3182ce);
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 0.75rem 2rem;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
|
||||
}
|
||||
|
||||
.action-button:hover {
|
||||
background: linear-gradient(135deg, #3182ce, #2c5282);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(66, 153, 225, 0.4);
|
||||
}
|
||||
|
||||
.admin-button {
|
||||
background: linear-gradient(135deg, #e53e3e, #c53030);
|
||||
box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3);
|
||||
}
|
||||
|
||||
.admin-button:hover {
|
||||
background: linear-gradient(135deg, #c53030, #9c2626);
|
||||
box-shadow: 0 8px 25px rgba(229, 62, 62, 0.4);
|
||||
}
|
||||
|
||||
.giveaway-button {
|
||||
background: linear-gradient(135deg, #38a169, #2f855a);
|
||||
box-shadow: 0 4px 12px rgba(56, 161, 105, 0.3);
|
||||
}
|
||||
|
||||
.giveaway-button:hover {
|
||||
background: linear-gradient(135deg, #2f855a, #276749);
|
||||
box-shadow: 0 8px 25px rgba(56, 161, 105, 0.4);
|
||||
}
|
||||
|
||||
.leaderboard-button {
|
||||
background: linear-gradient(135deg, #805ad5, #6b46c1);
|
||||
box-shadow: 0 4px 12px rgba(128, 90, 213, 0.3);
|
||||
}
|
||||
|
||||
.leaderboard-button:hover {
|
||||
background: linear-gradient(135deg, #6b46c1, #553c9a);
|
||||
box-shadow: 0 8px 25px rgba(128, 90, 213, 0.4);
|
||||
}
|
||||
|
||||
.additional-options {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
border-radius: 15px;
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.section-title {
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
font-size: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.welcome-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.dashboard-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<div class="text-center">
|
||||
<h1>Welcome, {{ g.user_info['username'] }}!</h1>
|
||||
<p class="text-muted">Your personalized dashboard for server <strong>{{ g.guild_id }}</strong></p>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-10 col-xl-8">
|
||||
<div class="dashboard-container">
|
||||
<div class="welcome-header">
|
||||
<h1 class="welcome-title">
|
||||
<i class="fas fa-user-circle"></i> Welcome, {{ g.user_info['username'] }}!
|
||||
</h1>
|
||||
<p class="welcome-subtitle">Your personalized dashboard for server <strong>{{ g.guild_id }}</strong></p>
|
||||
</div>
|
||||
|
||||
<div class="row mt-5">
|
||||
<!-- User Points and Level Card -->
|
||||
<div class="row">
|
||||
<!-- User Points Card -->
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body text-center">
|
||||
<h5 class="card-title">Your Points</h5>
|
||||
<p class="display-4">{{ g.user_data['points'] }}</p>
|
||||
<h5 class="card-title mt-4">Level</h5>
|
||||
<p class="display-4">{{ g.user_data['level'] }}</p>
|
||||
<div class="stat-card">
|
||||
<div class="card-body">
|
||||
<i class="fas fa-coins stat-icon points-icon"></i>
|
||||
<h5 class="stat-title">Your Points</h5>
|
||||
<p class="stat-value">{{ "{:,}".format(g.user_data['points']) }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- User Level Card -->
|
||||
<div class="col-md-6">
|
||||
<div class="stat-card">
|
||||
<div class="card-body">
|
||||
<i class="fas fa-layer-group stat-icon level-icon"></i>
|
||||
<h5 class="stat-title">Level</h5>
|
||||
<p class="stat-value">{{ g.user_data['level'] }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server Admin Link Card -->
|
||||
{% if g.user_data['permission'] >= 8 %}
|
||||
<div class="col-md-6">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body text-center">
|
||||
<h5 class="card-title">Server Admin Dashboard</h5>
|
||||
<p class="text-muted">Manage server-specific settings for server <strong>{{ g.guild_id }}</strong>.</p>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=g.guild_id) }}" class="btn btn-primary btn-lg mt-3">Go to Admin Dashboard</a>
|
||||
<div class="col-md-12">
|
||||
<div class="stat-card admin-card">
|
||||
<div class="card-body">
|
||||
<i class="fas fa-crown stat-icon admin-icon"></i>
|
||||
<h5 class="stat-title">Server Admin Dashboard</h5>
|
||||
<p class="welcome-subtitle">Manage server-specific settings for server <strong>{{ g.guild_id }}</strong>.</p>
|
||||
<a href="{{ url_for('server_admin_dashboard', guild_id=g.guild_id) }}" class="action-button admin-button mt-3">
|
||||
<i class="fas fa-cogs"></i> Go to Admin Dashboard
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -42,10 +230,29 @@
|
||||
</div>
|
||||
|
||||
<!-- Additional Options -->
|
||||
<div class="row mt-5">
|
||||
<div class="col-12 text-center">
|
||||
<h5>Your Giveaways</h5>
|
||||
<a href="{{ url_for('user_giveaways', guild_id=g.guild_id) }}" class="btn btn-info mt-3">View Won Giveaways</a>
|
||||
<div class="additional-options">
|
||||
<h5 class="section-title">
|
||||
<i class="fas fa-rocket"></i> Quick Actions
|
||||
</h5>
|
||||
<div class="row text-center">
|
||||
<div class="col-md-4 mb-3">
|
||||
<a href="{{ url_for('user_giveaways', guild_id=g.guild_id) }}" class="action-button giveaway-button">
|
||||
<i class="fas fa-gift"></i> View Won Giveaways
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<a href="{{ url_for('leaderboard', guild_id=g.guild_id) }}" class="action-button leaderboard-button">
|
||||
<i class="fas fa-trophy"></i> View Leaderboard
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<a href="{{ url_for('user_server_data', guild_id=g.guild_id) }}" class="action-button">
|
||||
<i class="fas fa-chart-bar"></i> View Statistics
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,68 +5,259 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Your Won Giveaways - {{ guild_name }}</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
.table-container {
|
||||
background-color: #f8f9fa;
|
||||
padding: 2rem;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.giveaways-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.giveaways-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.gift-icon {
|
||||
font-size: 3rem;
|
||||
color: #ffd700;
|
||||
margin-bottom: 1rem;
|
||||
animation: bounce 2s infinite;
|
||||
text-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
|
||||
40% { transform: translateY(-10px); }
|
||||
60% { transform: translateY(-5px); }
|
||||
}
|
||||
|
||||
.table-container {
|
||||
background: rgba(40, 40, 56, 0.9);
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 0;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background: linear-gradient(135deg, #2d3748 0%, #1a202c 100%);
|
||||
color: #f7fafc;
|
||||
border: none;
|
||||
padding: 1rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.table tbody tr {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
transition: all 0.3s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table tbody tr:hover {
|
||||
background: rgba(74, 85, 104, 0.8);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.table tbody td {
|
||||
padding: 1rem;
|
||||
vertical-align: middle;
|
||||
border: none;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
font-size: 0.9rem;
|
||||
padding: 0.5em;
|
||||
border-radius: 5px;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 25px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.badge-success-custom {
|
||||
background: linear-gradient(135deg, #48bb78, #38a169);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(72, 187, 120, 0.3);
|
||||
}
|
||||
|
||||
.badge-warning-custom {
|
||||
background: linear-gradient(135deg, #ffa500, #ff8c00);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
|
||||
}
|
||||
|
||||
.redeem-btn {
|
||||
background: linear-gradient(135deg, #4299e1, #3182ce);
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 0.5rem 1.5rem;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
|
||||
}
|
||||
|
||||
.redeem-btn:hover {
|
||||
background: linear-gradient(135deg, #3182ce, #2c5282);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(66, 153, 225, 0.4);
|
||||
}
|
||||
|
||||
.back-button {
|
||||
background: linear-gradient(135deg, #4a5568, #2d3748);
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 0.75rem 2rem;
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
margin-top: 2rem;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.back-button:hover {
|
||||
background: linear-gradient(135deg, #2d3748, #1a202c);
|
||||
color: #f7fafc;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.no-giveaways {
|
||||
text-align: center;
|
||||
padding: 3rem;
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.no-giveaways-icon {
|
||||
font-size: 4rem;
|
||||
color: #4a5568;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.giveaways-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.table thead th,
|
||||
.table tbody td {
|
||||
padding: 0.75rem 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
h2 {
|
||||
color: #343a40;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h2 class="text-center">Your Won Giveaways on {{ guild_name }}</h2>
|
||||
<p class="text-center text-muted">Here you can view all the giveaways you've won on this server.</p>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-10 col-xl-8">
|
||||
<div class="giveaways-container">
|
||||
<div class="giveaways-header">
|
||||
<i class="fas fa-gift gift-icon"></i>
|
||||
<h1 class="giveaways-title">Your Won Giveaways</h1>
|
||||
<p class="giveaways-subtitle">{{ guild_name }} • View and redeem your prizes</p>
|
||||
</div>
|
||||
|
||||
<div class="table-container mt-4">
|
||||
<table class="table table-striped">
|
||||
{% if won_giveaways and won_giveaways|length > 0 %}
|
||||
<div class="table-container">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Name</th>
|
||||
<th scope="col">Platform</th>
|
||||
<th scope="col">Status</th>
|
||||
<th scope="col" class="text-center">Action</th>
|
||||
<th scope="col"><i class="fas fa-tag"></i> Name</th>
|
||||
<th scope="col"><i class="fas fa-gamepad"></i> Platform</th>
|
||||
<th scope="col"><i class="fas fa-info-circle"></i> Status</th>
|
||||
<th scope="col" class="text-center"><i class="fas fa-cog"></i> Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for giveaway in won_giveaways %}
|
||||
<tr>
|
||||
<td>{{ giveaway.name }}</td>
|
||||
<td><strong>{{ giveaway.name }}</strong></td>
|
||||
<td>{{ giveaway.platform }}</td>
|
||||
<td>
|
||||
{% if giveaway.aktiv %}
|
||||
<span class="badge badge-success status-badge">Redeemed</span>
|
||||
<span class="badge badge-success-custom status-badge">
|
||||
<i class="fas fa-check"></i> Redeemed
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning status-badge">Not Redeemed</span>
|
||||
<span class="badge badge-warning-custom status-badge">
|
||||
<i class="fas fa-hourglass-half"></i> Pending
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% if giveaway.aktiv %}
|
||||
<a href="{{ url_for('redeem_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="btn btn-secondary btn-sm redeem-btn">View Key</a>
|
||||
{% else %}
|
||||
<a href="{{ url_for('redeem_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="btn btn-primary btn-sm redeem-btn">Redeem</a>
|
||||
{% endif %}
|
||||
<a href="{{ url_for('redeem_giveaway', guild_id=guild_id, uuid=giveaway.uuid) }}" class="redeem-btn">
|
||||
<i class="fas fa-{{ 'eye' if giveaway.aktiv else 'download' }}"></i>
|
||||
{{ 'View Key' if giveaway.aktiv else 'Redeem' }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if won_giveaways|length == 0 %}
|
||||
<p class="text-center text-muted">You haven't won any giveaways on this server yet.</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="no-giveaways">
|
||||
<i class="fas fa-gift-card no-giveaways-icon"></i>
|
||||
<h3>No Giveaways Won Yet</h3>
|
||||
<p>You haven't won any giveaways on this server yet. Keep participating to win amazing prizes!</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="text-center">
|
||||
<a href="{{ url_for('user_dashboard', guild_id=guild_id) }}" class="back-button">
|
||||
<i class="fas fa-arrow-left"></i> Back to Dashboard
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
241
templates/user_giveaways_old.html
Normal file
241
templates/user_giveaways_old.html
Normal file
@@ -0,0 +1,241 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Your Won Giveaways - {{ guild_name }}</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.giveaways-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.giveaways-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.1rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.gift-icon {
|
||||
font-size: 3rem;
|
||||
color: #ffd700;
|
||||
margin-bottom: 1rem;
|
||||
animation: bounce 2s infinite;
|
||||
text-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
|
||||
40% { transform: translateY(-10px); }
|
||||
60% { transform: translateY(-5px); }
|
||||
}
|
||||
|
||||
.table-container {
|
||||
background: rgba(40, 40, 56, 0.9);
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 0;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background: linear-gradient(135deg, #2d3748 0%, #1a202c 100%);
|
||||
color: #f7fafc;
|
||||
border: none;
|
||||
padding: 1rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.table tbody tr {
|
||||
background: rgba(45, 55, 72, 0.6);
|
||||
transition: all 0.3s ease;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.table tbody tr:hover {
|
||||
background: rgba(74, 85, 104, 0.8);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.table tbody td {
|
||||
padding: 1rem;
|
||||
vertical-align: middle;
|
||||
border: none;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.status-badge {
|
||||
font-size: 0.9rem;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 25px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.badge-success-custom {
|
||||
background: linear-gradient(135deg, #48bb78, #38a169);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(72, 187, 120, 0.3);
|
||||
}
|
||||
|
||||
.badge-warning-custom {
|
||||
background: linear-gradient(135deg, #ffa500, #ff8c00);
|
||||
color: white;
|
||||
box-shadow: 0 4px 12px rgba(255, 165, 0, 0.3);
|
||||
}
|
||||
|
||||
.redeem-btn {
|
||||
background: linear-gradient(135deg, #4299e1, #3182ce);
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 0.5rem 1.5rem;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
|
||||
}
|
||||
|
||||
.redeem-btn:hover {
|
||||
background: linear-gradient(135deg, #3182ce, #2c5282);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(66, 153, 225, 0.4);
|
||||
}
|
||||
|
||||
.back-button {
|
||||
background: linear-gradient(135deg, #4a5568, #2d3748);
|
||||
border: none;
|
||||
border-radius: 25px;
|
||||
padding: 0.75rem 2rem;
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
margin-top: 2rem;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.back-button:hover {
|
||||
background: linear-gradient(135deg, #2d3748, #1a202c);
|
||||
color: #f7fafc;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.no-giveaways {
|
||||
text-align: center;
|
||||
padding: 3rem;
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.no-giveaways-icon {
|
||||
font-size: 4rem;
|
||||
color: #4a5568;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.giveaways-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.giveaways-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.table thead th,
|
||||
.table tbody td {
|
||||
padding: 0.75rem 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h2 class="text-center">Your Won Giveaways on {{ guild_name }}</h2>
|
||||
<p class="text-center text-muted">Here you can view all the giveaways you've won on this server.</p>
|
||||
|
||||
<div class="table-container mt-4">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Name</th>
|
||||
<th scope="col">Platform</th>
|
||||
<th scope="col">Status</th>
|
||||
<th scope="col" class="text-center">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for giveaway in won_giveaways %}
|
||||
<tr>
|
||||
<td>{{ giveaway.name }}</td>
|
||||
<td>{{ giveaway.platform }}</td>
|
||||
<td>
|
||||
{% if giveaway.aktiv %}
|
||||
<span class="badge badge-success status-badge">Redeemed</span>
|
||||
{% else %}
|
||||
<span class="badge badge-warning status-badge">Not Redeemed</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% if giveaway.aktiv %}
|
||||
<a href="{{ url_for('redeem_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="btn btn-secondary btn-sm redeem-btn">View Key</a>
|
||||
{% else %}
|
||||
<a href="{{ url_for('redeem_giveaway', guild_id=guild_id, uuid=giveaway['uuid']) }}" class="btn btn-primary btn-sm redeem-btn">Redeem</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% if won_giveaways|length == 0 %}
|
||||
<p class="text-center text-muted">You haven't won any giveaways on this server yet.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -4,30 +4,222 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>User Landing Page</title>
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<title>User Landing Page</title> <img src="https://cdn.discordapp.com/icons/{{ guild.id }}/{{ guild.icon }}.png"
|
||||
class="server-icon"
|
||||
alt="Server Icon"
|
||||
onerror="this.style.display='none';">;"> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
|
||||
min-height: 100vh;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
color: #e0e0e0;
|
||||
}
|
||||
|
||||
.landing-container {
|
||||
background: rgba(30, 30, 46, 0.95);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
padding: 2rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.welcome-header {
|
||||
text-align: center;
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.welcome-title {
|
||||
color: #f8f9fa;
|
||||
font-weight: 700;
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
text-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.welcome-subtitle {
|
||||
color: #a0a0a0;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.server-card {
|
||||
background: rgba(45, 55, 72, 0.8);
|
||||
border-radius: 15px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 2rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.server-card:hover {
|
||||
transform: translateY(-8px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
|
||||
border-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.server-icon {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
border-radius: 15px 15px 0 0;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.server-card:hover .server-icon {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.server-card .card-body {
|
||||
padding: 1.5rem;
|
||||
background: rgba(45, 55, 72, 0.9);
|
||||
}
|
||||
|
||||
.server-title {
|
||||
color: #f7fafc;
|
||||
font-weight: 600;
|
||||
font-size: 1.3rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.server-description {
|
||||
color: #cbd5e0;
|
||||
font-size: 0.95rem;
|
||||
margin-bottom: 1.5rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.server-button {
|
||||
border-radius: 25px;
|
||||
padding: 0.6rem 1.5rem;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
transition: all 0.3s ease;
|
||||
margin: 0.25rem;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-primary-custom {
|
||||
background: linear-gradient(135deg, #4299e1, #3182ce);
|
||||
color: #ffffff;
|
||||
box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
|
||||
}
|
||||
|
||||
.btn-primary-custom:hover {
|
||||
background: linear-gradient(135deg, #3182ce, #2c5282);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(66, 153, 225, 0.4);
|
||||
}
|
||||
|
||||
.btn-secondary-custom {
|
||||
background: linear-gradient(135deg, #805ad5, #6b46c1);
|
||||
color: #ffffff;
|
||||
box-shadow: 0 4px 12px rgba(128, 90, 213, 0.3);
|
||||
}
|
||||
|
||||
.btn-secondary-custom:hover {
|
||||
background: linear-gradient(135deg, #6b46c1, #553c9a);
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 8px 20px rgba(128, 90, 213, 0.4);
|
||||
}
|
||||
|
||||
.no-servers {
|
||||
text-align: center;
|
||||
padding: 3rem;
|
||||
color: #a0aec0;
|
||||
}
|
||||
|
||||
.no-servers-icon {
|
||||
font-size: 4rem;
|
||||
color: #4a5568;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.user-icon {
|
||||
color: #4299e1;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
.welcome-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.server-icon {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.landing-container {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include 'navigation.html' %}
|
||||
<div class="container mt-5">
|
||||
<h1>Welcome, {{ g.user_info['username'] }}</h1>
|
||||
<p>Select a server to view your server-specific data.</p>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-10 col-xl-8">
|
||||
<div class="landing-container">
|
||||
<div class="welcome-header">
|
||||
<h1 class="welcome-title">
|
||||
<i class="fas fa-user-circle user-icon"></i>Welcome, {{ g.user_info['username'] }}!
|
||||
</h1>
|
||||
<p class="welcome-subtitle">Select a server to view your server-specific data and statistics.</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
{% if g.guilds %}
|
||||
{% for guild in g.guilds %}
|
||||
<div class="col-md-4 mt-3">
|
||||
<div class="card">
|
||||
<img src="https://cdn.discordapp.com/icons/{{ guild.id }}/{{ guild.icon }}.png" class="card-img-top" alt="Server Icon">
|
||||
<div class="col-lg-6 col-xl-4">
|
||||
<div class="server-card">
|
||||
<img src="https://cdn.discordapp.com/icons/{{ guild.id }}/{{ guild.icon }}.png"
|
||||
class="server-icon"
|
||||
alt="Server Icon"
|
||||
onerror="this.onerror=null; this.src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iMTAwIiBjeT0iMTAwIiByPSIxMDAiIGZpbGw9IiM0YTU1NjgiLz48dGV4dCB4PSIxMDAiIHk9IjExMCIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjYwIiBmaWxsPSIjZjdmYWZjIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4ke guild.name[0] if guild.name else 'S'}</text></svg>';">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{{ guild.name }}</h5>
|
||||
<p class="card-text">Select this server to view your data for {{ guild.name }}.</p>
|
||||
<a href="{{ url_for('user_dashboard', guild_id=guild.id) }}" class="btn btn-primary">View Server</a>
|
||||
<a href="{{ url_for('leaderboard', guild_id=guild.id) }}" class="btn btn-secondary">View Leaderboard</a>
|
||||
<h5 class="server-title">
|
||||
<i class="fas fa-server"></i> {{ guild.name }}
|
||||
</h5>
|
||||
<p class="server-description">
|
||||
Access your dashboard, statistics, and achievements for {{ guild.name }}.
|
||||
</p>
|
||||
<div class="text-center">
|
||||
<a href="{{ url_for('user_dashboard', guild_id=guild.id) }}" class="server-button btn-primary-custom">
|
||||
<i class="fas fa-tachometer-alt"></i> View Dashboard
|
||||
</a>
|
||||
<a href="{{ url_for('leaderboard', guild_id=guild.id) }}" class="server-button btn-secondary-custom">
|
||||
<i class="fas fa-trophy"></i> Leaderboard
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<div class="col-12">
|
||||
<div class="no-servers">
|
||||
<i class="fas fa-server no-servers-icon"></i>
|
||||
<h3>No Servers Found</h3>
|
||||
<p>You don't have access to any servers with this bot. Join a server with Multus Bot to get started!</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user