+
+
+
+
Guild Dashboard
+
Komplettes HeroUI-Rework fuer dein Bot-Dashboard
+
+
+
+ Guild
+ setCurrentGuildId(event.target.value)}
+ >
+ {guilds.map((guild) => (
+
+ {guild.name}
+
+ ))}
+
+
+ {statusMessage ?
{statusMessage}
: null}
+
+
+
+
+ {section === 'overview' && (
+
+
+
+
+
+
+
{guildInfo?.name || selectedGuild.name}
+
ID: {guildInfo?.id || selectedGuild.id}
+
+ {Object.entries(moduleFlags).map(([key, enabled]) => (
+
+ {key.replace('Enabled', '').toUpperCase()}
+
+ ))}
+
+
+
+ }
+ variant="dot"
+ >
+ Bot aktiv
+
+
+
+
+
+
setSection('serverstats')}
+ items={[
+ { icon: , label: 'Owner', value: guildInfo?.owner?.tag || '-' },
+ { icon: , label: 'Erstellt', value: formatDate(guildInfo?.createdAt) },
+ { icon: , label: 'Member', value: String(guildInfo?.memberCount ?? 0) },
+ { icon: , label: 'Channels', value: `${guildInfo?.textCount || 0} Text / ${guildInfo?.voiceCount || 0} Voice` },
+ { icon: , label: 'Tickets offen', value: String(overview?.tickets?.open ?? 0) },
+ { icon: , label: 'Tickets IP / Closed', value: `${overview?.tickets?.inProgress ?? 0} / ${overview?.tickets?.closed ?? 0}` }
+ ]}
+ />
+
+
+
+
+
Activity
+
Live-Statistiken aus deinem Bot
+
+
+
+ } kind="messages" label="Messages (24h)" value={activity?.messages24h ?? 0} />
+ } kind="commands" label="Commands (24h)" value={activity?.commands24h ?? 0} />
+ } kind="automod" label="Automod (24h)" value={activity?.automod24h ?? 0} />
+ } variant="bordered" onPress={() => setSection('settings')}>
+ Alle Logs anzeigen
+
+
+
+
+
+
+
+
Guild Logs
+
Neueste Ereignisse
+
+ } size="sm" variant="light" onPress={() => setSection('settings')}>
+ Alle anzeigen
+
+
+
+
+ {logs.length ? (
+ logs.map((log, index) => (
+
+
+
+
+ {(log.level || 'info').toUpperCase()}
+
+ {formatDate(log.timestamp)}
+
+ {log.category ? `[${log.category}] ` : ''}{log.message || '-'}
+
+
+ ))
+ ) : (
+
Keine Logs
+ )}
+
+
+
+
+
+
+
+
+
Schnellzugriff
+
Die wichtigsten Bereiche deines Dashboards
+
+
+
+ {navItems
+ .filter((item) => !['overview', 'admin'].includes(item.key))
+ .slice(0, 6)
+ .map((item) => (
+ setSection(item.key)}>
+
+ {item.icon}
+ {item.label}
+ HeroUI-Komponenten fuer den Bereich {item.label}
+
+
+ ))}
+
+
+
+ )}
+
+ {section === 'tickets' && (
+
+ setTicketTab(String(key))}
+ >
+
+
+
+
+
+
+
+ {ticketTab === 'overview' && (
+
+ `${ticket.topic || 'Ticket'} · ${ticket.status || 'open'}`)} />
+ `${ticket.category || 'Allgemein'} · ${formatDate(ticket.createdAt)}`)} />
+
+ )}
+
+ {ticketTab === 'pipeline' && (
+
+ {['neu', 'in_bearbeitung', 'warten_auf_user', 'erledigt'].map((state) => (
+ ticket.topic || ticket.id)}
+ />
+ ))}
+
+ )}
+
+ {ticketTab === 'sla' && (
+
+ `${row.supporter || '-'} · ${row.tickets || 0} Tickets · ${row.ttc || '-'} TTC · ${row.ttfr || '-'} TTFR`)}
+ />
+ `${row.date || '-'} · ${row.tickets || 0} Tickets · ${row.ttc || '-'} TTC · ${row.ttfr || '-'} TTFR`)}
+ />
+
+ )}
+
+ {ticketTab === 'automations' && (
+
+ `${rule.name || 'Automation'} · ${rule.active === false ? 'inaktiv' : 'aktiv'}`)} />
+
+ setAutomationDraft((state) => ({ ...state, name: value }))} />
+ setAutomationDraft((state) => ({ ...state, conditionValue: value }))} />
+
+
+ )}
+
+ {ticketTab === 'kb' && (
+
+ `${article.title || 'Artikel'} · ${(article.keywords || []).join(', ')}`)} />
+
+ setKbDraft((state) => ({ ...state, title: value }))} />
+ setKbDraft((state) => ({ ...state, keywords: value }))} />
+
+
+ )}
+
+ )}
+
+ {section === 'automod' && (
+
+ saveSettingsPayload(
+ {
+ automodEnabled: settings.automodEnabled !== false,
+ automodConfig: settings.automodConfig || {}
+ },
+ 'Automod gespeichert'
+ )
+ }
+ >
+ setSettings((state) => ({ ...state, automodEnabled: value }))}>Automod aktiv
+ setSettings((state) => ({ ...state, automodConfig: { ...(state.automodConfig || {}), badWordFilter: value } }))}>Bad-Word-Filter
+ setSettings((state) => ({ ...state, automodConfig: { ...(state.automodConfig || {}), linkFilter: value } }))}>Link-Filter
+ setSettings((state) => ({ ...state, automodConfig: { ...(state.automodConfig || {}), spamFilter: value } }))}>Spam-Filter
+ setSettings((state) => ({ ...state, automodConfig: { ...(state.automodConfig || {}), logChannelId: value } }))} />
+
+ )}
+
+ {section === 'welcome' && (
+
saveSettingsPayload({ welcomeEnabled: settings.welcomeConfig?.enabled !== false, welcomeConfig: settings.welcomeConfig || {} }, 'Welcome gespeichert')}
+ >
+ setSettings((state) => ({ ...state, welcomeConfig: { ...(state.welcomeConfig || {}), enabled: value } }))}>Welcome aktiv
+ setSettings((state) => ({ ...state, welcomeConfig: { ...(state.welcomeConfig || {}), channelId: value } }))} />
+ setSettings((state) => ({ ...state, welcomeConfig: { ...(state.welcomeConfig || {}), embedTitle: value } }))} />
+
+ )}
+
+ {section === 'dynamicvoice' && (
+
saveSettingsPayload({ dynamicVoiceEnabled: settings.dynamicVoiceEnabled !== false, dynamicVoiceConfig: settings.dynamicVoiceConfig || {} }, 'Dynamic Voice gespeichert')}
+ >
+ setSettings((state) => ({ ...state, dynamicVoiceEnabled: value }))}>Dynamic Voice aktiv
+ setSettings((state) => ({ ...state, dynamicVoiceConfig: { ...(state.dynamicVoiceConfig || {}), lobbyChannelId: value } }))} />
+ setSettings((state) => ({ ...state, dynamicVoiceConfig: { ...(state.dynamicVoiceConfig || {}), categoryId: value } }))} />
+ setSettings((state) => ({ ...state, dynamicVoiceConfig: { ...(state.dynamicVoiceConfig || {}), template: value } }))} />
+
+ )}
+
+ {section === 'birthday' && (
+
+ setBirthday((state: any) => ({ ...state, config: { ...state.config, enabled: value } }))}>Birthday aktiv
+ setBirthday((state: any) => ({ ...state, config: { ...state.config, channelId: value } }))} />
+ setBirthday((state: any) => ({ ...state, config: { ...state.config, sendHour: Number(value || 0) } }))} />
+
+ )}
+
+ {section === 'reactionroles' && (
+
+
+ `${set.title || 'Reaction Role'} · ${set.channelId || '-'}`)} />
+
+ setReactionDraft((state) => ({ ...state, title: value }))} />
+ setReactionDraft((state) => ({ ...state, channelId: value }))} />
+
+
+
+ )}
+
+ {section === 'statuspage' && (
+
+
+
+ setStatusDraft((state: any) => ({ ...(state || {}), enabled: value }))}>Statuspage aktiv
+ setStatusDraft((state: any) => ({ ...(state || {}), channelId: value }))} />
+ setStatusDraft((state: any) => ({ ...(state || {}), intervalMs: Number(value || 60000) }))} />
+ Statuspage speichern
+
+ `${service.name || 'Service'} · ${service.status || 'unknown'} · ${service.url || ''}`)}
+ />
+
+
+ )}
+
+ {section === 'serverstats' && (
+
+
+
+ setStatsDraft((state: any) => ({ ...(state || {}), enabled: value }))}>Server Stats aktiv
+ setStatsDraft((state: any) => ({ ...(state || {}), categoryName: value }))} />
+ setStatsDraft((state: any) => ({ ...(state || {}), refreshMinutes: Number(value || 10) }))} />
+ Server Stats speichern
+
+ `${item.label || item.key || 'Stat'} · ${item.type || '-'}`)} />
+
+
+ )}
+
+ {section === 'settings' && (
+
saveSettingsPayload(settings, 'Settings gespeichert')}>
+ setSettings((state) => ({ ...state, welcomeChannelId: value }))} />
+ setSettings((state) => ({ ...state, logChannelId: value }))} />
+ setSettings((state) => ({ ...state, supportRoleId: value }))} />
+ setSettings((state) => ({ ...state, loggingConfig: { ...(state.loggingConfig || {}), categories: { ...(state.loggingConfig?.categories || {}), joinLeave: value } } }))}>Join / Leave loggen
+ setSettings((state) => ({ ...state, loggingConfig: { ...(state.loggingConfig || {}), categories: { ...(state.loggingConfig?.categories || {}), messageEdit: value } } }))}>Message Edit loggen
+ setSettings((state) => ({ ...state, loggingConfig: { ...(state.loggingConfig || {}), categories: { ...(state.loggingConfig?.categories || {}), messageDelete: value } } }))}>Message Delete loggen
+
+ )}
+
+ {section === 'modules' && (
+
+
+ {modules.map((module) => (
+
+
+
+
{module.name}
+
{module.description || ''}
+
+ void toggleModule(module.key, value)} />
+
+
+ ))}
+
+
+ )}
+
+ {section === 'events' && (
+
+
+
+ {(events || []).map((event) => (
+
+
+
+
{event.title}
+
deleteEvent(event.id)}>Löschen
+
+ {event.description || 'Keine Beschreibung'}
+ {formatDate(event.startsAt)}
+
+
+ ))}
+
+
+ setEventDraft((state) => ({ ...state, title: value }))} />
+
+
+
+ )}
+
+ {section === 'admin' && user?.isAdmin && (
+
+
+
+ `${formatDate(log.timestamp)} · ${log.message || '-'}`)} />
+
+
+ )}
+
+