mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-03 23:36:37 +02:00
1086 lines
50 KiB
HTML
1086 lines
50 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<title>Configuration du serveur - LazyBot</title>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<link rel="stylesheet" href="/guild.css">
|
||
</head>
|
||
<body>
|
||
<!-- Sidebar -->
|
||
<aside class="sidebar" id="sidebar">
|
||
<div class="sidebar-header">
|
||
<a href="/" class="sidebar-brand">
|
||
<img id="bot-avatar" src="https://cdn.discordapp.com/embed/avatars/0.png" alt="LazyBot">
|
||
<span>LazyBot</span>
|
||
</a>
|
||
<div class="guild-info">
|
||
<img id="guild-icon" src="https://cdn.discordapp.com/embed/avatars/0.png" alt="Serveur">
|
||
<div class="guild-info-text">
|
||
<div id="guild-name" class="guild-info-name">Chargement...</div>
|
||
<div id="guild-id" class="guild-info-id"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<nav class="sidebar-nav">
|
||
<div class="nav-section">
|
||
<div class="nav-section-title">Configuration</div>
|
||
<a class="nav-item active" data-section="welcome">
|
||
<span class="nav-item-icon">👋</span>
|
||
Bienvenue
|
||
</a>
|
||
<a class="nav-item" data-section="goodbye">
|
||
<span class="nav-item-icon">👋</span>
|
||
Au revoir
|
||
</a>
|
||
<a class="nav-item" data-section="autorole">
|
||
<span class="nav-item-icon">🎭</span>
|
||
Rôles automatiques
|
||
</a>
|
||
</div>
|
||
|
||
<div class="nav-section">
|
||
<div class="nav-section-title">Systèmes</div>
|
||
<a class="nav-item" data-section="levels">
|
||
<span class="nav-item-icon">📈</span>
|
||
Niveaux
|
||
</a>
|
||
<a class="nav-item" data-section="economy">
|
||
<span class="nav-item-icon">💰</span>
|
||
Économie
|
||
</a>
|
||
<a class="nav-item" data-section="privateroom">
|
||
<span class="nav-item-icon">🔊</span>
|
||
Salons temporaires
|
||
</a>
|
||
<a class="nav-item" data-section="counting">
|
||
<span class="nav-item-icon">🔢</span>
|
||
Comptage
|
||
</a>
|
||
<a class="nav-item" data-section="statschannels">
|
||
<span class="nav-item-icon">📊</span>
|
||
Salons de stats
|
||
</a>
|
||
<a class="nav-item" data-section="scheduledmessages">
|
||
<span class="nav-item-icon">⏰</span>
|
||
Messages programmés
|
||
</a>
|
||
<a class="nav-item" data-section="sendmessage">
|
||
<span class="nav-item-icon">✉️</span>
|
||
Envoyer un message
|
||
</a>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="sidebar-footer">
|
||
<a href="/dashboard">
|
||
<span>←</span> Retour au dashboard
|
||
</a>
|
||
</div>
|
||
</aside>
|
||
|
||
<!-- Main Content -->
|
||
<main class="main-content">
|
||
<!-- Top Header -->
|
||
<header class="top-header">
|
||
<div class="breadcrumb">
|
||
<a href="/dashboard">Dashboard</a>
|
||
<span class="breadcrumb-separator">/</span>
|
||
<span id="breadcrumb-guild" class="breadcrumb-current">Serveur</span>
|
||
</div>
|
||
<div class="header-user">
|
||
<img id="user-avatar" src="" alt="">
|
||
<span id="user-name"></span>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- Content Area -->
|
||
<div class="content-area">
|
||
|
||
<!-- Section: Bienvenue -->
|
||
<section class="config-section active" id="section-welcome">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">👋</span>
|
||
<h3>Message de bienvenue</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="welcome-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="form-group">
|
||
<label class="form-label">Canal de bienvenue</label>
|
||
<select class="form-select" id="welcome-channel"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Message</label>
|
||
<textarea class="form-textarea" id="welcome-message" rows="4" placeholder="Ex: Bienvenue {user} sur {server} 🎉"></textarea>
|
||
</div>
|
||
|
||
<div class="variables-box">
|
||
<div class="variables-box-title">Variables disponibles</div>
|
||
<div class="variables-list">
|
||
<span class="variable-tag"><code>{user}</code> <span>→ nom</span></span>
|
||
<span class="variable-tag"><code>{mention}</code> <span>→ mention</span></span>
|
||
<span class="variable-tag"><code>{server}</code> <span>→ serveur</span></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-welcome-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-welcome">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Au revoir -->
|
||
<section class="config-section" id="section-goodbye">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">👋</span>
|
||
<h3>Message d'au revoir</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="goodbye-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="form-group">
|
||
<label class="form-label">Canal d'au revoir</label>
|
||
<select class="form-select" id="goodbye-channel"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Message</label>
|
||
<textarea class="form-textarea" id="goodbye-message" rows="4" placeholder="Ex: Au revoir {user}, on espère te revoir sur {server} 👋"></textarea>
|
||
</div>
|
||
|
||
<div class="variables-box">
|
||
<div class="variables-box-title">Variables disponibles</div>
|
||
<div class="variables-list">
|
||
<span class="variable-tag"><code>{user}</code> <span>→ nom</span></span>
|
||
<span class="variable-tag"><code>{server}</code> <span>→ serveur</span></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-goodbye-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-goodbye">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Rôles automatiques -->
|
||
<section class="config-section" id="section-autorole">
|
||
<!-- Nouveaux membres -->
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">👤</span>
|
||
<h3>Rôle pour les nouveaux membres</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="autorole-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="form-group">
|
||
<label class="form-label">Rôle à attribuer</label>
|
||
<select class="form-select" id="autorole-role"></select>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-autorole-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-autorole">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Vocal -->
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">🎤</span>
|
||
<h3>Rôle pour les membres en vocal</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="autorole-vocal-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="form-group">
|
||
<label class="form-label">Rôle à attribuer</label>
|
||
<select class="form-select" id="autorole-vocal-role"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Salons à exclure</label>
|
||
<span class="form-sublabel">Maintenez Ctrl pour sélectionner plusieurs salons</span>
|
||
<select class="form-select" id="autorole-vocal-exclude-channel" multiple size="5"></select>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-autorole-vocal-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-autorole-vocal">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Niveaux -->
|
||
<section class="config-section" id="section-levels">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">📈</span>
|
||
<h3>Système de niveaux</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="level-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<!-- Annonces -->
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Annonces de niveau</span>
|
||
<span class="inline-toggle-desc">Annoncer quand un membre monte de niveau</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="level-announcement-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Canal d'annonces</label>
|
||
<select class="form-select" id="level-announcements-channel"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Message d'annonce</label>
|
||
<textarea class="form-textarea" id="level-announcements-message" rows="3" placeholder="Félicitations {user}, tu es niveau {level} ! 🎉"></textarea>
|
||
</div>
|
||
|
||
<div class="variables-box">
|
||
<div class="variables-box-title">Variables disponibles</div>
|
||
<div class="variables-list">
|
||
<span class="variable-tag"><code>{user}</code> <span>→ nom</span></span>
|
||
<span class="variable-tag"><code>{mention}</code> <span>→ mention</span></span>
|
||
<span class="variable-tag"><code>{level}</code> <span>→ niveau</span></span>
|
||
<span class="variable-tag"><code>{level-xp}</code> <span>→ XP du niveau</span></span>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Configuration XP -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">⚙️ Configuration XP</h4>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Courbe d'XP</label>
|
||
<select class="form-select" id="level-xp-curve-type">
|
||
<option value="constante">Constante</option>
|
||
<option value="linear">Linéaire</option>
|
||
<option value="quadratic">Quadratique</option>
|
||
<option value="exponential">Exponentielle</option>
|
||
</select>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">XP premier niveau</label>
|
||
<input type="number" class="form-input" id="level-xp-multiplier" min="1" value="500">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Annonce tous les X niveaux</label>
|
||
<input type="number" class="form-input" id="level-announcement-every" min="1" value="1">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Niveau maximum (0 = infini)</label>
|
||
<input type="number" class="form-input" id="level-max-level" min="0" value="0">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- XP Messages -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">💬 XP par messages</h4>
|
||
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Activer XP messages</span>
|
||
<span class="inline-toggle-desc">Gagner de l'XP en envoyant des messages</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="message-xp-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">XP minimum</label>
|
||
<input type="number" class="form-input" id="level-xp-per-message-min" min="1" value="15">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">XP maximum</label>
|
||
<input type="number" class="form-input" id="level-xp-per-message-max" min="1" value="25">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (sec)</label>
|
||
<input type="number" class="form-input" id="level-xp-cooldown" min="0" value="2">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- XP Vocal -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">🎤 XP en vocal</h4>
|
||
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Activer XP vocal</span>
|
||
<span class="inline-toggle-desc">Gagner de l'XP en étant en vocal</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="voice-xp-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">XP minimum / min</label>
|
||
<input type="number" class="form-input" id="level-xp-per-voice-min" min="1" value="10">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">XP maximum / min</label>
|
||
<input type="number" class="form-input" id="level-xp-per-voice-max" min="1" value="20">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Rôles/Salons avec/sans XP -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">🎯 Restrictions</h4>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Rôles avec/sans XP</label>
|
||
<select class="form-select" id="level-role-with-or-without-xp-type">
|
||
<option value="with">Avec XP uniquement</option>
|
||
<option value="without">Sans XP</option>
|
||
</select>
|
||
<select class="form-select" id="level-role-with-or-without-xp" multiple size="4" style="margin-top: 8px;"></select>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Salons avec/sans XP</label>
|
||
<select class="form-select" id="level-channel-with-or-without-xp-type">
|
||
<option value="with">Avec XP uniquement</option>
|
||
<option value="without">Sans XP</option>
|
||
</select>
|
||
<select class="form-select" id="level-channel-with-or-without-xp" multiple size="4" style="margin-top: 8px;"></select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-level-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-level">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Économie -->
|
||
<section class="config-section" id="section-economy">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">💰</span>
|
||
<h3>Système d'économie</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<!-- Config de base -->
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Nom de la monnaie</label>
|
||
<input type="text" class="form-input" id="economy-currency-name" value="coins">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Symbole</label>
|
||
<input type="text" class="form-input" id="economy-currency-symbol" value="💰" maxlength="10">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Solde de départ</label>
|
||
<input type="number" class="form-input" id="economy-starting-balance" min="0" value="0">
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Daily -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">📅 Récompense quotidienne</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Commande /daily</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-daily-enabled" checked>
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Montant</label>
|
||
<input type="number" class="form-input" id="economy-daily-amount" min="1" value="100">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (heures)</label>
|
||
<input type="number" class="form-input" id="economy-daily-cooldown" min="1" value="24">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Work -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">💼 Travail</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Commande /work</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-work-enabled" checked>
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Gain min</label>
|
||
<input type="number" class="form-input" id="economy-work-min" min="1" value="50">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Gain max</label>
|
||
<input type="number" class="form-input" id="economy-work-max" min="1" value="150">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (min)</label>
|
||
<input type="number" class="form-input" id="economy-work-cooldown" min="1" value="60">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Crime -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">🔫 Crime</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Commande /crime</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-crime-enabled" checked>
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Gain min</label>
|
||
<input type="number" class="form-input" id="economy-crime-min" min="1" value="100">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Gain max</label>
|
||
<input type="number" class="form-input" id="economy-crime-max" min="1" value="500">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (min)</label>
|
||
<input type="number" class="form-input" id="economy-crime-cooldown" min="1" value="120">
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Taux de réussite (%)</label>
|
||
<input type="number" class="form-input" id="economy-crime-success" min="1" max="100" value="50">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Amende échec (% solde)</label>
|
||
<input type="number" class="form-input" id="economy-crime-fine" min="0" max="100" value="30">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Steal -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">🕵️ Vol</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Commande /steal</span>
|
||
<span class="inline-toggle-desc">Voler d'autres joueurs</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-steal-enabled" checked>
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Taux de réussite (%)</label>
|
||
<input type="number" class="form-input" id="economy-steal-success" min="1" max="100" value="40">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">% max volable</label>
|
||
<input type="number" class="form-input" id="economy-steal-max-percent" min="1" max="100" value="50">
|
||
</div>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Amende échec (%)</label>
|
||
<input type="number" class="form-input" id="economy-steal-fine" min="0" max="100" value="25">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (min)</label>
|
||
<input type="number" class="form-input" id="economy-steal-cooldown" min="1" value="180">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Message Money -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">💬 Argent par message</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Gagner de l'argent en envoyant des messages</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-message-money-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Gain min</label>
|
||
<input type="number" class="form-input" id="economy-message-money-min" min="1" value="1">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Gain max</label>
|
||
<input type="number" class="form-input" id="economy-message-money-max" min="1" value="5">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Cooldown (sec)</label>
|
||
<input type="number" class="form-input" id="economy-message-money-cooldown" min="1" value="60">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Voice Money -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">🎤 Argent en vocal</h4>
|
||
<div class="inline-toggle">
|
||
<div class="inline-toggle-label">
|
||
<span class="inline-toggle-title">Gagner de l'argent en étant en vocal</span>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="economy-voice-money-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Gain min</label>
|
||
<input type="number" class="form-input" id="economy-voice-money-min" min="1" value="5">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Gain max</label>
|
||
<input type="number" class="form-input" id="economy-voice-money-max" min="1" value="15">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Intervalle (min)</label>
|
||
<input type="number" class="form-input" id="economy-voice-money-interval" min="1" value="5">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-economy-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-economy">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Salons vocaux temporaires -->
|
||
<section class="config-section" id="section-privateroom">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">🔊</span>
|
||
<h3>Salons vocaux temporaires</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="privateroom-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="info-box">
|
||
<strong>💡 Comment ça marche ?</strong><br>
|
||
Quand un membre rejoint le salon "créateur", un nouveau salon vocal est automatiquement créé pour lui.
|
||
Le salon est supprimé quand il devient vide.
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Salon créateur</label>
|
||
<span class="form-sublabel">Le salon vocal que les membres rejoignent pour créer leur salon</span>
|
||
<select class="form-select" id="privateroom-creator-channel"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Catégorie des salons créés</label>
|
||
<span class="form-sublabel">Les salons temporaires seront créés dans cette catégorie</span>
|
||
<select class="form-select" id="privateroom-category"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Format du nom du salon</label>
|
||
<input type="text" class="form-input" id="privateroom-name-format" value="🔊 Salon de {user}" placeholder="🔊 Salon de {user}">
|
||
</div>
|
||
|
||
<div class="variables-box">
|
||
<div class="variables-box-title">Variables disponibles</div>
|
||
<div class="variables-list">
|
||
<span class="variable-tag"><code>{user}</code> <span>→ nom d'utilisateur</span></span>
|
||
<span class="variable-tag"><code>{displayname}</code> <span>→ pseudo serveur</span></span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-privateroom-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-privateroom">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Comptage -->
|
||
<section class="config-section" id="section-counting">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">🔢</span>
|
||
<h3>Système de comptage</h3>
|
||
</div>
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="counting-enabled">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="info-box">
|
||
<strong>💡 Comment ça marche ?</strong><br>
|
||
Les membres comptent à l'infini dans le salon dédié. Un membre ne peut pas compter deux fois de suite,
|
||
ils doivent alterner. Si quelqu'un se trompe, le compteur repart à 0 !
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Salon de comptage</label>
|
||
<span class="form-sublabel">Le salon textuel où les membres peuvent compter</span>
|
||
<select class="form-select" id="counting-channel"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Compteur actuel</label>
|
||
<input type="number" class="form-input" id="counting-current" disabled value="0">
|
||
<span class="form-sublabel">Utilisez les commandes /counting-set, /counting-add, /counting-remove pour modifier</span>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-footer">
|
||
<div id="status-counting-form" class="status-message"></div>
|
||
<button type="button" class="btn btn-primary" id="save-counting">Sauvegarder</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Salons de statistiques -->
|
||
<section class="config-section" id="section-statschannels">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div class="config-card-title">
|
||
<span class="icon">📊</span>
|
||
<h3>Salons de statistiques</h3>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-body">
|
||
<div class="info-box">
|
||
<strong>💡 Comment ça marche ?</strong><br>
|
||
Créez des salons vocaux dont le nom affiche des statistiques du serveur en temps réel.
|
||
Les noms sont mis à jour automatiquement toutes les 5 minutes.
|
||
</div>
|
||
|
||
<!-- Formulaire d'ajout -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">➕ Ajouter un salon de stats</h4>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Salon vocal</label>
|
||
<select class="form-select" id="stats-channel-select"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Type de statistique</label>
|
||
<select class="form-select" id="stats-type-select">
|
||
<option value="members">👥 Membres (total)</option>
|
||
<option value="humans">👤 Membres (sans bots)</option>
|
||
<option value="bots">🤖 Bots</option>
|
||
<option value="online">🟢 Membres en ligne</option>
|
||
<option value="voice">🎤 Membres en vocal</option>
|
||
<option value="roles">🎭 Nombre de rôles</option>
|
||
<option value="channels">📺 Nombre de salons</option>
|
||
<option value="boosts">🚀 Boosts</option>
|
||
<option value="boost_level">💎 Niveau de boost</option>
|
||
<option value="role_members">🏷️ Membres avec un rôle</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="form-group" id="stats-role-group" style="display: none;">
|
||
<label class="form-label">Rôle à compter</label>
|
||
<select class="form-select" id="stats-role-select"></select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Format du nom</label>
|
||
<input type="text" class="form-input" id="stats-format-input" value="📊 Membres: {stat}" placeholder="📊 Membres: {stat}">
|
||
</div>
|
||
|
||
<div class="variables-box">
|
||
<div class="variables-box-title">Variables disponibles</div>
|
||
<div class="variables-list">
|
||
<span class="variable-tag"><code>{stat}</code> <span>→ valeur de la statistique</span></span>
|
||
</div>
|
||
</div>
|
||
|
||
<button type="button" class="btn btn-primary" id="add-stats-channel" style="margin-top: var(--spacing-md);">
|
||
➕ Ajouter le salon
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Liste des salons configurés -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">📋 Salons configurés</h4>
|
||
<div id="stats-channels-list">
|
||
<p class="text-muted">Aucun salon configuré.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===== SCHEDULED MESSAGES ===== -->
|
||
<section class="config-section" id="section-scheduledmessages">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div>
|
||
<h2 class="config-card-title">⏰ Messages Programmés</h2>
|
||
<p class="config-card-subtitle">Programmez l'envoi automatique de messages dans vos salons</p>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-body">
|
||
|
||
<!-- Formulaire d'ajout -->
|
||
<div class="sub-section" id="scheduled-form-section">
|
||
<h4 class="sub-section-title" id="scheduled-form-title">➕ Nouveau message programmé</h4>
|
||
|
||
<input type="hidden" id="scheduled-edit-id" value="">
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">📺 Salon</label>
|
||
<select class="form-select" id="scheduled-channel-select">
|
||
<option value="">-- Sélectionner un salon --</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">💬 Contenu du message</label>
|
||
<textarea class="form-textarea" id="scheduled-message-content" rows="3" placeholder="Le contenu de votre message..."></textarea>
|
||
</div>
|
||
|
||
<!-- Embed optionnel -->
|
||
<div class="form-group">
|
||
<label class="form-label">
|
||
<input type="checkbox" id="scheduled-embed-enabled">
|
||
📦 Utiliser un embed
|
||
</label>
|
||
</div>
|
||
|
||
<div id="scheduled-embed-options" style="display: none;">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Titre de l'embed</label>
|
||
<input type="text" class="form-input" id="scheduled-embed-title" placeholder="Titre...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Couleur</label>
|
||
<input type="color" class="form-input" id="scheduled-embed-color" value="#5865F2" style="height: 40px;">
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Description de l'embed</label>
|
||
<textarea class="form-textarea" id="scheduled-embed-description" rows="3" placeholder="Description..."></textarea>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Type de planification -->
|
||
<div class="form-group">
|
||
<label class="form-label">📅 Type de planification</label>
|
||
<select class="form-select" id="scheduled-type">
|
||
<option value="weekly">Jours et heures spécifiques</option>
|
||
<option value="interval">Intervalle régulier</option>
|
||
</select>
|
||
</div>
|
||
|
||
<!-- Options pour planification hebdomadaire -->
|
||
<div id="scheduled-weekly-options">
|
||
<div class="form-group">
|
||
<label class="form-label">📆 Jours de la semaine</label>
|
||
<div class="checkbox-group" id="scheduled-days">
|
||
<label class="checkbox-item"><input type="checkbox" value="1"> Lun</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="2"> Mar</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="3"> Mer</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="4"> Jeu</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="5"> Ven</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="6"> Sam</label>
|
||
<label class="checkbox-item"><input type="checkbox" value="0"> Dim</label>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">🕐 Heures d'envoi</label>
|
||
<div class="times-input-container">
|
||
<select class="form-select" id="scheduled-hour-select" style="width: 80px;">
|
||
<option value="">HH</option>
|
||
</select>
|
||
<span style="font-size: 1.2rem; color: var(--text-primary);">:</span>
|
||
<select class="form-select" id="scheduled-minute-select" style="width: 80px;">
|
||
<option value="">MM</option>
|
||
</select>
|
||
<button type="button" class="btn btn-sm btn-secondary" id="scheduled-add-time">+ Ajouter</button>
|
||
</div>
|
||
<div class="times-list" id="scheduled-times-list"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Options pour intervalle -->
|
||
<div id="scheduled-interval-options" style="display: none;">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Toutes les</label>
|
||
<input type="number" class="form-input" id="scheduled-interval-value" min="1" value="60">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Unité</label>
|
||
<select class="form-select" id="scheduled-interval-unit">
|
||
<option value="minutes">Minutes</option>
|
||
<option value="hours">Heures</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Options d'envoi -->
|
||
<div class="form-group">
|
||
<label class="form-label">⚙️ Options d'envoi</label>
|
||
<div class="checkbox-group-vertical">
|
||
<label class="checkbox-item">
|
||
<input type="checkbox" id="scheduled-force-send" checked>
|
||
Envoyer même si le salon est inactif
|
||
</label>
|
||
<label class="checkbox-item">
|
||
<input type="checkbox" id="scheduled-delete-previous">
|
||
Supprimer le message précédent
|
||
</label>
|
||
<label class="checkbox-item">
|
||
<input type="checkbox" id="scheduled-enabled" checked>
|
||
Activer ce message programmé
|
||
</label>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-actions">
|
||
<button type="button" class="btn btn-primary" id="scheduled-save-btn">
|
||
💾 Enregistrer
|
||
</button>
|
||
<button type="button" class="btn btn-secondary" id="scheduled-cancel-btn" style="display: none;">
|
||
❌ Annuler
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Liste des messages programmés -->
|
||
<div class="sub-section">
|
||
<h4 class="sub-section-title">📋 Messages programmés</h4>
|
||
<div id="scheduled-messages-list">
|
||
<p class="text-muted">Aucun message programmé.</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Section: Envoyer un message -->
|
||
<section class="config-section" id="section-sendmessage">
|
||
<div class="config-card">
|
||
<div class="config-card-header">
|
||
<div>
|
||
<h2 class="config-card-title">✉️ Envoyer un message</h2>
|
||
<p class="config-card-subtitle">Envoyez un message dans un salon de votre serveur</p>
|
||
</div>
|
||
</div>
|
||
<div class="config-card-body">
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">📺 Salon</label>
|
||
<select class="form-select" id="sendmsg-channel-select">
|
||
<option value="">-- Sélectionner un salon --</option>
|
||
</select>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">💬 Contenu du message</label>
|
||
<textarea class="form-textarea" id="sendmsg-content" rows="4" placeholder="Le contenu de votre message..."></textarea>
|
||
</div>
|
||
|
||
<!-- Embed optionnel -->
|
||
<div class="form-group">
|
||
<label class="form-label">
|
||
<input type="checkbox" id="sendmsg-embed-enabled">
|
||
📦 Ajouter un embed
|
||
</label>
|
||
</div>
|
||
|
||
<div id="sendmsg-embed-options" style="display: none;">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Titre</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-title" placeholder="Titre de l'embed...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Couleur</label>
|
||
<input type="color" class="form-input" id="sendmsg-embed-color" value="#5865F2" style="height: 40px;">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">Description</label>
|
||
<textarea class="form-textarea" id="sendmsg-embed-description" rows="4" placeholder="Description de l'embed..."></textarea>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">URL de l'auteur</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-author-url" placeholder="https://...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Nom de l'auteur</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-author-name" placeholder="Nom...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Icône de l'auteur (URL)</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-author-icon" placeholder="https://...">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">🖼️ Image (URL)</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-image" placeholder="https://...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">📎 Miniature (URL)</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-thumbnail" placeholder="https://...">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label class="form-label">Texte du footer</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-footer-text" placeholder="Footer...">
|
||
</div>
|
||
<div class="form-group">
|
||
<label class="form-label">Icône du footer (URL)</label>
|
||
<input type="text" class="form-input" id="sendmsg-embed-footer-icon" placeholder="https://...">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label class="form-label">
|
||
<input type="checkbox" id="sendmsg-embed-timestamp">
|
||
Ajouter un timestamp (date/heure actuelle)
|
||
</label>
|
||
</div>
|
||
|
||
<!-- Champs (Fields) -->
|
||
<div class="form-group">
|
||
<label class="form-label">📝 Champs (Fields)</label>
|
||
<div id="sendmsg-fields-container"></div>
|
||
<button type="button" class="btn btn-sm btn-secondary" id="sendmsg-add-field">+ Ajouter un champ</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Aperçu -->
|
||
<div class="form-group">
|
||
<label class="form-label">👁️ Aperçu</label>
|
||
<div id="sendmsg-preview" class="message-preview">
|
||
<p class="text-muted">L'aperçu apparaîtra ici...</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-actions">
|
||
<button type="button" class="btn btn-primary" id="sendmsg-send-btn">
|
||
📤 Envoyer le message
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Historique -->
|
||
<div class="sub-section" style="margin-top: 2rem;">
|
||
<h4 class="sub-section-title">📋 Derniers messages envoyés</h4>
|
||
<div id="sendmsg-history">
|
||
<p class="text-muted">Aucun message envoyé récemment.</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
</div>
|
||
</main>
|
||
|
||
<!-- Mobile Toggle Button -->
|
||
<button class="mobile-toggle" id="mobile-toggle">☰</button>
|
||
|
||
<script src="/guild/guildBase.js"></script>
|
||
<script src="/guild/navigation.js"></script>
|
||
<script src="/guild/welcomeForm.js"></script>
|
||
<script src="/guild/goodbyeForm.js"></script>
|
||
<script src="/guild/autoroleNewUserForm.js"></script>
|
||
<script src="/guild/autoroleVocalForm.js"></script>
|
||
<script src="/guild/levelForm.js"></script>
|
||
<script src="/guild/economyForm.js"></script>
|
||
<script src="/guild/privateroomForm.js"></script>
|
||
<script src="/guild/countingForm.js"></script>
|
||
<script src="/guild/statsChannelsForm.js"></script>
|
||
<script src="/guild/scheduledMessagesForm.js"></script>
|
||
<script src="/guild/sendMessageForm.js"></script>
|
||
</body>
|
||
</html>
|