// ===== LOGS FORM ===== (function() { const logsEnabled = document.getElementById('logs-enabled'); const logsCategory = document.getElementById('logs-category'); const logsTypesContainer = document.getElementById('logs-types-container'); const logsPreviewContainer = document.getElementById('logs-preview-container'); const logsChannelsPreview = document.getElementById('logs-channels-preview'); const logsSaveBtn = document.getElementById('logs-save-btn'); const logsDeleteBtn = document.getElementById('logs-delete-btn'); const statusLogsForm = document.getElementById('status-logs-form'); let logTypes = []; let currentConfig = null; // Charger la config des logs async function loadLogsConfig() { try { const res = await fetch(`/api/bot/get-logs-config/${guildId}`); const data = await res.json(); if (data.success) { logTypes = data.logTypes || []; currentConfig = data.config || {}; // Remplir le select des catégories logsCategory.innerHTML = ''; (data.categories || []).forEach(cat => { const option = document.createElement('option'); option.value = cat.id; option.textContent = cat.name; if (currentConfig.category_id === cat.id) { option.selected = true; } logsCategory.appendChild(option); }); // Activer/désactiver le toggle logsEnabled.checked = !!currentConfig.enabled; // Générer les checkboxes pour les types de logs renderLogTypes(); // Mettre à jour l'aperçu updatePreview(); // Afficher le bouton supprimer si des salons existent updateDeleteButton(); } } catch (err) { console.error('Erreur chargement config logs:', err); } } // Générer les checkboxes des types de logs function renderLogTypes() { logsTypesContainer.innerHTML = ''; logTypes.forEach(logType => { const isEnabled = currentConfig[`${logType.key}_enabled`]; const channelId = currentConfig[`${logType.key}_channel_id`]; const div = document.createElement('div'); div.className = 'log-type-card' + (isEnabled ? ' active' : ''); div.innerHTML = ` `; const checkbox = div.querySelector('input[type="checkbox"]'); checkbox.addEventListener('change', () => { div.classList.toggle('active', checkbox.checked); updatePreview(); }); logsTypesContainer.appendChild(div); }); } // Mettre à jour l'aperçu des salons function updatePreview() { const checkedTypes = [...document.querySelectorAll('input[name="log-type"]:checked')] .map(cb => cb.value); if (checkedTypes.length === 0 || !logsEnabled.checked) { logsPreviewContainer.style.display = 'none'; return; } logsPreviewContainer.style.display = 'block'; logsChannelsPreview.innerHTML = ''; checkedTypes.forEach(key => { const logType = logTypes.find(lt => lt.key === key); if (!logType) return; const channelId = currentConfig[`${key}_channel_id`]; const div = document.createElement('div'); div.className = 'log-channel-item'; div.innerHTML = ` # ${logType.channelName} ${channelId ? '✅ Créé' : '⏳ Sera créé'} `; logsChannelsPreview.appendChild(div); }); } // Mettre à jour le bouton supprimer function updateDeleteButton() { const hasChannels = logTypes.some(lt => currentConfig[`${lt.key}_channel_id`]); logsDeleteBtn.style.display = hasChannels ? 'inline-flex' : 'none'; } // Sauvegarder la config logsSaveBtn.addEventListener('click', async () => { const enabledLogs = [...document.querySelectorAll('input[name="log-type"]:checked')] .map(cb => cb.value); logsSaveBtn.disabled = true; logsSaveBtn.textContent = '⏳ Sauvegarde...'; statusLogsForm.textContent = ''; statusLogsForm.className = 'status-message'; try { const res = await fetch('/api/bot/save-logs-config', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ guildId, enabled: logsEnabled.checked, categoryId: logsCategory.value || null, enabledLogs }) }); const data = await res.json(); if (data.success) { statusLogsForm.textContent = '✅ Configuration sauvegardée !'; statusLogsForm.className = 'status-message success'; // Mettre à jour la config locale if (data.categoryId) { currentConfig.category_id = data.categoryId; } if (data.channels) { for (const [key, channelId] of Object.entries(data.channels)) { currentConfig[`${key}_channel_id`] = channelId; if (enabledLogs.includes(key)) { currentConfig[`${key}_enabled`] = 1; } } } // Rafraîchir l'affichage renderLogTypes(); updatePreview(); updateDeleteButton(); // Recharger les catégories await loadLogsConfig(); } else { statusLogsForm.textContent = '❌ ' + (data.error || 'Erreur lors de la sauvegarde'); statusLogsForm.className = 'status-message error'; } } catch (err) { console.error('Erreur sauvegarde logs:', err); statusLogsForm.textContent = '❌ Erreur de connexion'; statusLogsForm.className = 'status-message error'; } logsSaveBtn.disabled = false; logsSaveBtn.textContent = '💾 Sauvegarder'; }); // Supprimer tous les salons logsDeleteBtn.addEventListener('click', async () => { if (!confirm('⚠️ Êtes-vous sûr de vouloir supprimer tous les salons de logs ? Cette action est irréversible.')) { return; } logsDeleteBtn.disabled = true; logsDeleteBtn.textContent = '⏳ Suppression...'; statusLogsForm.textContent = ''; try { const res = await fetch('/api/bot/delete-logs-channels', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ guildId }) }); const data = await res.json(); if (data.success) { statusLogsForm.textContent = '✅ Tous les salons de logs ont été supprimés.'; statusLogsForm.className = 'status-message success'; // Reset la config locale currentConfig = { enabled: false }; logsEnabled.checked = false; // Décocher tous les types document.querySelectorAll('input[name="log-type"]').forEach(cb => { cb.checked = false; cb.closest('.log-type-card')?.classList.remove('active'); }); // Rafraîchir renderLogTypes(); updatePreview(); updateDeleteButton(); } else { statusLogsForm.textContent = '❌ ' + (data.error || 'Erreur lors de la suppression'); statusLogsForm.className = 'status-message error'; } } catch (err) { console.error('Erreur suppression logs:', err); statusLogsForm.textContent = '❌ Erreur de connexion'; statusLogsForm.className = 'status-message error'; } logsDeleteBtn.disabled = false; logsDeleteBtn.textContent = '🗑️ Supprimer tous les salons'; }); // Events toggle logsEnabled.addEventListener('change', updatePreview); // Charger au démarrage window.addEventListener('guildLoaded', loadLogsConfig); if (typeof guildId !== 'undefined' && guildId) { loadLogsConfig(); } })();