-
-
-
-
-
-
- {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
-
-
-
-
-
-
-
- Guild Infos
- Wichtige Daten auf einen Blick
-
-
-
- } label="Owner" value={guildInfo?.owner?.tag || '-'} />
- } label="Erstellt" value={formatDate(guildInfo?.createdAt)} />
- } label="Member" value={String(guildInfo?.memberCount ?? 0)} />
- } label="Channels" value={`${guildInfo?.textCount || 0} / ${guildInfo?.voiceCount || 0}`} />
- } label="Offene Tickets" value={String(overview?.tickets?.open ?? 0)} />
- } label="IP / Closed" value={`${overview?.tickets?.inProgress ?? 0} / ${overview?.tickets?.closed ?? 0}`} />
-
- } variant="bordered" onPress={() => setSection('serverstats')}>
- Server Statistiken ansehen
-
-
-
-
-
-
- Activity
- Live-Statistiken aus deinem Bot
-
-
- } label="Messages (24h)" value={activity?.messages24h ?? 0} />
- } label="Commands (24h)" value={activity?.commands24h ?? 0} />
- } 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
-
-
-
-
- {logs.length ? logs.map((log, i) => (
-
-
-
-
- {(log.level || 'info').toUpperCase()}
-
- {formatDate(log.timestamp)}
-
- {log.category ? `[${log.category}] ` : ''}{log.message || '-'}
-
-
- )) : (
-
Keine Logs
- )}
-
-
-
-
-
-
-
- {navItems.filter((item) => !['overview', 'admin'].includes(item.key)).slice(0, 6).map((item) => (
-
setSection(item.key)}>
-
- {item.icon}
- {item.label}
- Modul verwalten
-
-
- ))}
-
-
-
- )}
-
- {section === 'tickets' && (
-
- setTicketTab(String(key))}>
-
-
-
-
-
-
-
- {ticketTab === 'overview' && (
-
-
- {tickets.length ? tickets.map((t, i) => (
-
-
-
-
{t.topic || 'Ticket'}
-
- {t.status || 'open'}
-
-
-
- {t.category || 'Allgemein'} · {formatDate(t.createdAt)}
- {t.claimedById ? ` · Claimed` : ''}
-
-
-
-
-
-
-
-
- )) : Keine Tickets
}
-
-
- {tickets.length ? tickets.map((t, i) => (
- {t.category || 'Allgemein'} · {formatDate(t.createdAt)}
- )) : Keine Daten
}
-
- {ticketDetail && (
-
-
- {ticketDetail.topic || 'Ticket-Details'}
-
-
-
-
-
Status: {ticketDetail.status}
-
Priorität: {ticketDetail.priority || 'normal'}
-
Kategorie: {ticketDetail.category || '-'}
-
-
- Nachrichten ({ticketMessages.length})
-
- {ticketMessages.length ? ticketMessages.map((msg, i) => (
-
- {msg.author?.username || msg.authorId}:
- {msg.content || '(Embed)'}
-
- )) :
Keine Nachrichten geladen
}
-
-
-
- )}
-
- )}
-
- {ticketTab === 'pipeline' && (
-
- {['neu', 'in_bearbeitung', 'warten_auf_user', 'erledigt'].map((state) => (
-
- {(pipeline[state] || []).length ? (pipeline[state] || []).map((t, i) => (
-
-
- {t.topic || t.id}
-
-
-
-
-
- )) : Keine Tickets
}
-
- ))}
-
- )}
-
- {ticketTab === 'sla' && (
-
-
- {(sla.supporters || []).length ? sla.supporters.map((row: any, i: number) => (
-
- {row.supporter || '-'} · {row.tickets || 0} Tickets · {row.ttc || '-'} TTC · {row.ttfr || '-'} TTFR
-
- )) : Keine Daten
}
-
-
- {(sla.days || []).length ? sla.days.map((row: any, i: number) => (
-
- {row.date || '-'} · {row.tickets || 0} Tickets · {row.ttc || '-'} TTC · {row.ttfr || '-'} TTFR
-
- )) : Keine Daten
}
-
-
- )}
-
- {ticketTab === 'automations' && (
-
- )}
-
- {ticketTab === 'kb' && (
-
-
- {kbArticles.length ? kbArticles.map((article, i) => (
-
-
-
-
{article.title || 'Artikel'}
-
{article.keywords?.length || 0} Keywords
-
- {article.content?.slice(0, 120)}...
-
- } onPress={() => setKbEditDraft({ id: article.id, title: article.title || '', keywords: (article.keywords || []).join(', '), content: article.content || '' })}>
- Bearbeiten
-
- } onPress={() => deleteKbArticle(article.id)}>
- Löschen
-
-
-
-
- )) : Keine Artikel
}
-
- {kbEditDraft ? (
-
- setKbEditDraft((s) => ({ ...s, title: v }))} />
- setKbEditDraft((s) => ({ ...s, keywords: v }))} />
-
- ) : (
-
- setKbDraft((s) => ({ ...s, title: v }))} />
- setKbDraft((s) => ({ ...s, keywords: v }))} />
-
- )}
-
- )}
-
- )}
-
- {section === 'supportlogin' && (
-
-
-
- setSupportLogin((s) => s ? { ...s, config: { ...s.config, autoRefresh: v } } : s)}
- >
- Auto-Refresh aktiv
-
- setSupportLogin((s) => s ? { ...s, config: { ...s.config, panelChannelId: v } } : s)}
- />
- setSupportLogin((s) => s ? { ...s, config: { ...s.config, title: v } } : s)}
- />
-
-
- {supportLogin?.status?.active?.length ? supportLogin.status.active.map((s, i) => (
-
-
- {s.username || s.userId}
-
- )) : Keine aktiven Supporter
}
-
- Support Role ID: {supportLogin?.supportRoleId || 'Nicht gesetzt'}
-
-
-
-
- )}
-
- {section === 'automod' && (
-
-
-
- setSettings((s) => ({ ...s, automodEnabled: v }))}>Automod aktiv
- setSettings((s) => ({ ...s, automodConfig: { ...(s.automodConfig || {}), badWordFilter: v } }))}>Bad-Word-Filter
- setSettings((s) => ({ ...s, automodConfig: { ...(s.automodConfig || {}), linkFilter: v } }))}>Link-Filter
- setSettings((s) => ({ ...s, automodConfig: { ...(s.automodConfig || {}), spamFilter: v } }))}>Spam-Filter
- setSettings((s) => ({ ...s, automodConfig: { ...(s.automodConfig || {}), logChannelId: v } }))} />
-
-
- Die Automod-Einstellungen werden nach dem Speichern sofort aktiv.
-
-
-
- )}
-
- {section === 'welcome' && (
-
-
-
- setSettings((s) => ({ ...s, welcomeConfig: { ...(s.welcomeConfig || {}), enabled: v } }))}>Welcome aktiv
- setSettings((s) => ({ ...s, welcomeConfig: { ...(s.welcomeConfig || {}), channelId: v } }))} />
- setSettings((s) => ({ ...s, welcomeConfig: { ...(s.welcomeConfig || {}), embedTitle: v } }))} />
-
-
-
- )}
-
- {section === 'dynamicvoice' && (
-
-
-
- setSettings((s) => ({ ...s, dynamicVoiceEnabled: v }))}>Dynamic Voice aktiv
- setSettings((s) => ({ ...s, dynamicVoiceConfig: { ...(s.dynamicVoiceConfig || {}), lobbyChannelId: v } }))} />
- setSettings((s) => ({ ...s, dynamicVoiceConfig: { ...(s.dynamicVoiceConfig || {}), categoryId: v } }))} />
- setSettings((s) => ({ ...s, dynamicVoiceConfig: { ...(s.dynamicVoiceConfig || {}), template: v } }))} />
-
-
-
-
-
- )}
-
- {section === 'birthday' && (
-
-
-
- )}
-
- {section === 'reactionroles' && (
-
-
-
- )}
-
- {section === 'statuspage' && (
-
-
-
- )}
-
- {section === 'serverstats' && (
-
-
-
- )}
-
- {section === 'register' && (
-
- setRegisterTab(String(key))}>
-
-
-
-
- {registerTab === 'forms' && (
-
-
- {registerForms.length ? registerForms.map((f) => (
-
-
-
-
{f.name}
-
-
-
-
-
- {f.description || 'Keine Beschreibung'}
-
- {f.isActive ? 'Aktiv' : 'Inaktiv'}
- {f.fields?.length || 0} Felder
-
-
-
-
- )) : Keine Formulare
}
-
-
- setFormDraft((s) => ({ ...s, name: v }))} />
- setFormDraft((s) => ({ ...s, description: v }))} />
- setFormDraft((s) => ({ ...s, reviewChannelId: v }))} />
- setFormDraft((s) => ({ ...s, notifyRoleIds: v }))} />
-
-
- )}
-
- {registerTab === 'apps' && (
-
-
- {registerApps.length ? registerApps.map((app) => (
-
-
-
-
{app.username || app.userId}
-
- {app.status}
-
-
- {formatDate(app.createdAt)}
- {app.answers?.length ? (
-
- {app.answers.map((a, i) => (
-
- {a.label || 'Frage'}:
- {a.value}
-
- ))}
-
- ) : null}
-
-
- )) : Keine Anträge
}
-
-
- )}
-
- )}
-
- {section === 'music' && (
-
-
-
- } label="Aktive Guilds" value={String(musicStatus.activeGuilds)} />
-
- {musicStatus.sessions.length ? musicStatus.sessions.map((session) => (
-
-
-
-
{session.guildId}
-
- Loop: {session.loop} · Queue: {session.queueLength}
-
-
- {session.nowPlaying ? (
-
- ) : (
- Keine aktive Wiedergabe
- )}
-
-
- )) :
Keine aktiven Musik-Sessions
}
-
-
- )}
-
- {section === 'settings' && (
-
-
-
- setSettings((s) => ({ ...s, welcomeChannelId: v }))} />
- setSettings((s) => ({ ...s, logChannelId: v }))} />
- setSettings((s) => ({ ...s, supportRoleId: v }))} />
- setSettings((s) => ({ ...s, loggingConfig: { ...(s.loggingConfig || {}), categories: { ...(s.loggingConfig?.categories || {}), joinLeave: v } } }))}>Join / Leave loggen
- setSettings((s) => ({ ...s, loggingConfig: { ...(s.loggingConfig || {}), categories: { ...(s.loggingConfig?.categories || {}), messageEdit: v } } }))}>Message Edit loggen
- setSettings((s) => ({ ...s, loggingConfig: { ...(s.loggingConfig || {}), categories: { ...(s.loggingConfig?.categories || {}), messageDelete: v } } }))}>Message Delete loggen
-
-
-
-
-
- )}
-
- {section === 'modules' && (
-
-
- {modules.map((module) => (
-
-
-
-
{module.name}
-
{module.description || ''}
-
- void toggleModule(module.key, v)} />
-
-
- ))}
-
-
- )}
-
- {section === 'events' && (
-
-
-
- {(events || []).length ? (events || []).map((event) => (
-
-
-
-
{event.title}
-
-
- {event.description || 'Keine Beschreibung'}
- {formatDate(event.startsAt)}
-
-
- )) : Keine Events
}
-
-
- setEventDraft((s) => ({ ...s, title: v }))} />
-
-
-
- )}
-
- {section === 'admin' && user?.isAdmin && (
-
-
-
- Guilds: {admin.overview?.guilds ?? '-'}
- Aktive Guilds (24h): {admin.overview?.activeGuilds ?? '-'}
- Uptime: {admin.overview?.uptime ?? '-'}
-
-
- {(admin.logs || []).length ? (admin.logs || []).map((log: any, i: number) => (
-
- {formatDate(log.timestamp)} · {log.message || '-'}
-
- )) : Keine Logs
}
-
-
-
- )}
-
-