import { api } from '../../services/api.js'; import { showToast } from '../../ui/toast.js'; import { setSwitch, getSwitch } from '../../ui/switch.js'; import { renderWelcomeModule } from './welcome.js'; import { renderLoggingModule } from './logging.js'; import { renderReactionRolesModule } from './reactionRoles.js'; import { renderDynamicVoiceModule } from './dynamicVoice.js'; import { renderStatuspageModule } from './statuspage.js'; import { renderServerStatsModule } from './serverstats.js'; export async function initModulesSection(guildId: string) { const section = document.getElementById('section-modules'); if (!section) return; section.innerHTML = `

Module

`; await Promise.all([ renderModuleToggles(guildId), renderWelcomeModule(guildId), renderLoggingModule(guildId), renderReactionRolesModule(guildId), renderDynamicVoiceModule(guildId), renderStatuspageModule(guildId), renderServerStatsModule(guildId) ]); } async function renderModuleToggles(guildId: string) { const container = document.getElementById('module-toggles'); if (!container) return; container.innerHTML = '

Lade Module...

'; try { const data: any = await api.modules(guildId); const modules = data?.modules || data || {}; container.innerHTML = ''; const entries: Array<{ key: string; label: string; desc: string }> = [ { key: 'ticketsEnabled', label: 'Tickets', desc: 'Ticket-System aktivieren' }, { key: 'automodEnabled', label: 'Automod', desc: 'Moderations-Filter' }, { key: 'welcomeEnabled', label: 'Welcome', desc: 'Begrueßungsnachrichten' }, { key: 'musicEnabled', label: 'Musik', desc: 'Musiksteuerung' }, { key: 'levelingEnabled', label: 'Leveling', desc: 'XP/Level System' }, { key: 'statuspageEnabled', label: 'Statuspage', desc: 'Statusberichte' }, { key: 'serverStatsEnabled', label: 'Server Stats', desc: 'Stat-Channel' }, { key: 'birthdayEnabled', label: 'Birthday', desc: 'Geburtstagsmodul' }, { key: 'reactionRolesEnabled', label: 'Reaction Roles', desc: 'Selbstzuweisbare Rollen' }, { key: 'eventsEnabled', label: 'Events', desc: 'Event-Planung' }, { key: 'dynamicVoiceEnabled', label: 'Dynamic Voice', desc: 'Dynamische Voice Channels' } ]; entries.forEach((entry) => { const row = document.createElement('div'); row.className = 'module-item'; row.innerHTML = `
${entry.label}
${entry.desc}
`; const toggle = row.querySelector('.switch') as HTMLElement; toggle.addEventListener('click', async () => { setSwitch(toggle, !getSwitch(toggle)); await saveModules(guildId); }); container.appendChild(row); }); } catch (err) { console.error(err); container.innerHTML = '
Module konnten nicht geladen werden.
'; showToast('Fehler beim Laden der Module', true); } } async function saveModules(guildId: string) { const toggles = Array.from(document.querySelectorAll('#module-toggles .switch')); const payload: Record = { guildId }; toggles.forEach((t) => { const key = t.dataset.key; if (!key) return; payload[key] = t.classList.contains('on'); }); try { await api.saveSettings(payload); showToast('Module gespeichert'); } catch (err) { console.error(err); showToast('Module speichern fehlgeschlagen', true); } }