Add events module with dashboard UI, scheduling, signups, and settings updates; extend env/readme.

This commit is contained in:
Pascal Prießnitz
2025-12-02 23:52:10 +01:00
parent 874b01c999
commit 829d160164
578 changed files with 37647 additions and 11590 deletions

103
readme.md
View File

@@ -1,36 +1,77 @@
# Papo Discord Bot (TypeScript)
# Papo Discord Bot
Discord v14 Bot mit Slash Commands, Ticket-System, Musikplayer, Automod und Web-Dashboard (Express + OAuth2 Scaffold).
## 1. Projektueberblick
Papo ist ein Discord-Bot (discord.js 14, TypeScript) mit Web-Dashboard. Implementiert sind:
- Ticketsystem: Ticket-Channel pro Nutzer, Slash-Commands (/ticket, /claim, /close, /ticketpriority, /ticketstatus, /transcript, /ticketpanel), Panel-Erstellung via Bot und Dashboard; Transcripts als Textdatei unter `./transcripts`. Inklusive Support-Login-Panel (Rolle vergeben/entfernen, On-Duty-Logging).
- Automod: Link-Filter mit Whitelist, Spam- und Caps-Erkennung, Bad-Word-Filter mit Custom-Listen, Zeitueberschreitung bei Spam, Logging der Aktionen.
- Musik-Modul: Wiedergabe via play-dl, Queue mit Loop/Skip/Stop/Pause/Resume, per Slash-Commands; Modul pro Guild abschaltbar.
- Welcome-Modul: Begruessungs-Embeds mit konfigurierbarer Farbe, Titel, Beschreibung, Footer, Thumbnails/Bilder (Upload oder URL), Aktivierung pro Guild, Vorschau im Dashboard; Fallback auf Text-Begruesung, wenn nur `welcomeChannelId` gesetzt ist.
- Logging-Modul: Join/Leave, Message Edit/Delete, Automod/Ticket/Musik-Events, konfigurierbarer Log-Channel und Kategorien.
- Leveling: XP/Level pro Nachricht, Anzeige via /rank, Toggle ueber Settings.
- Dynamische Voice Channels: Lobby-gestuetzte Erstellung privater Voice-Channels mit automatischem Move und Berechtigungen.
- Birthday-Modul: /birthday zum Setzen des Geburtsdatums, konfigurierbare Channel-/Template-Einstellungen, automatische Glueckwuensche.
- Reaction Roles: Dashboard-Konfiguration, Bot reagiert auf Reactions und vergibt Rollen.
- Termine/Events: Einmalige/recurring Events (taeglich/woechentlich/monatlich), Reminder, An-/Abmelde-Buttons, pro Event eigener Channel/Ping-Rolle.
- Modul-Management im Dashboard: Toggles fuer Tickets, Automod, Welcome, Musik, Leveling, Dynamische Voice, Statuspage, Birthday, Reaction Roles, Events.
- Dashboard: Sidebar-Navigation (Uebersicht, Tickets, Automod, Welcome, Dynamic Voice, Statuspage, Birthday, Reaction Roles, Events, Module, Einstellungen), OAuth2-Login (Scopes identify, guilds), Guild-Auswahl und modulabhaengige Sichtbarkeit.
## Setup
1. `npm install`
2. `.env` aus `.env.example` kopieren und Werte setzen (einzelne Guild via `DISCORD_GUILD_ID`, mehrere via `DISCORD_GUILD_IDS` als Kommaliste oder global ohne Angabe)
3. Prisma Schema anpassen und generieren (optional DB): `npx prisma generate`
4. Entwicklung: `npm run dev`
5. Build: `npm run build` und `npm start`
## 2. Installation / Setup
Voraussetzungen:
- Node.js 18+ (CommonJS, ts-node fuer Dev)
- Postgres-Datenbank zugaenglich per Connection-String
- Discord-Anwendung/Bot mit Berechtigungen: Slash Commands, Nachrichten senden/lesen, Embed Links, Dateien senden, Channels verwalten (Tickets), Nachrichten loeschen/timeouts (Automod), Voice Connect/Speak (Musik)
- OAuth Redirect: `http://localhost:PORT/auth/callback` oder eigener `DASHBOARD_BASE_URL`
## Struktur
- `src/index.ts` Bootstrap für Bot + Webserver
- `src/commands` Slash Commands (Admin, Music, Tickets, Utility)
- `src/events` Event-Handler (ready, interaction, message, member join/leave, bans)
- `src/services` Automod, Logging, Music-Queue, Tickets, Forum-Stubs, Leveling
- `src/web` Express-Server mit OAuth2-Routen und Dashboard-Stubs
- `src/database` Prisma Schema + Client
Schritte:
1) Repository klonen und ins Projekt wechseln.
2) Abhaengigkeiten installieren: npm install.
3) .env aus .env.example kopieren und Variablen setzen (siehe Liste unten).
4) Prisma vorbereiten: npx prisma generate, danach npx prisma migrate dev --name init (legt Migrationen an; bei neuen Features ggf. weitere wie `add-events-module`).
5) Entwicklung starten: npm run dev (ts-node).
6) Produktion: npm run build, dann npm start (nutzt dist/index.js). Dashboard laeuft im selben Prozess auf PORT (default 3000).
7) Slash-Commands werden beim Start fuer alle IDs in DISCORD_GUILD_IDS (oder global) registriert.
## Features (Stand Scaffold)
- Admin: /ban /tempban /kick /mute /unmute /timeout /clear (+ Logging)
- Automod: Anti-Link & Spam Timeout
- Logging: Join/Leave, Edit/Delete, Moderations
- Welcome-System: via `/configure welcome_channel`
- Leveling: optional via `/configure leveling true`, Anzeige mit `/rank`
- Musik: /play /pause /resume /skip /stop /queue /loop (YouTube via play-dl)
- Tickets: /ticket /claim /close, Ticket-Panel mit Buttons via `/ticketpanel`, Claim/Close/Transcript Buttons im Kanal, Prioritäten via `/ticketpriority`, Status via `/ticketstatus`, Transcript-Export via `/transcript`, Channel pro User, Transcript-Export (TXT), Prisma Modell
- Forum-Integration: Service mit Interfaces/Stubs
- Web-Dashboard: Express mit OAuth2-Stubs, Live-Übersicht & Settings API (/api/overview, /api/tickets, /api/settings) + UI
- Multi-Guild: Commands registrieren automatisch für alle IDs in `DISCORD_GUILD_IDS` oder global, Auto-Register bei Guild-Join
Environment-Variablen:
- DISCORD_TOKEN (Bot Token, Pflicht)
- DISCORD_CLIENT_ID (Client ID, Pflicht)
- DISCORD_CLIENT_SECRET (fuer Dashboard-OAuth erforderlich)
- DISCORD_GUILD_ID (optionale Einzel-Guild fuer Command-Registrierung)
- DISCORD_GUILD_IDS (kommagetrennte Liste fuer mehrere Guilds)
- DATABASE_URL (Postgres-URL, Pflicht)
- PORT (Webserver/Dashboard-Port, Standard 3000)
- SESSION_SECRET (Express Session Secret, Standard papo_dev_secret)
- DASHBOARD_BASE_URL (optional, Basis-URL fuer OAuth Redirects)
- WEB_BASE_PATH (optional, z.B. /ucp)
- OWNER_IDS (kommagetrennte Bot-Owner fuer Admin-UI)
- SUPPORT_ROLE_ID (optionale Support-Rolle fuer Tickets/Support-Login)
## Hinweise
- Commands werden beim Start automatisch per REST im angegebenen Guild registriert.
- Musik benötigt Voice-Berechtigungen und Zugang zum Voice-Channel des Nutzers.
- Transcript-Dateien landen unter `./transcripts`.
- Das Dashboard ist bewusst minimal als Ausgangspunkt für weitere UI/Frontend-Integration.
## 3. Datenbank & Migrationen
- Prisma-Schema: `prisma/schema.prisma` (alias in `src/database/schema.prisma`).
- Migrationen per `npx prisma migrate dev --name <name>`; danach `npx prisma generate`.
- Wesentliche Tabellen:
- GuildSettings: Module-Flags + Config (automod/welcome/logging/music/dynamicVoice/statuspage/birthday/reactionRoles/events/supportLogin).
- Ticket: id, ticketNumber, userId, channelId, guildId, topic, priority, status, claimedBy, transcript.
- TicketSupportSession: guildId, userId, roleId, startedAt/endedAt, durationSeconds.
- Event / EventSignup: Events mit Wiederholung/Reminder, Signups mit canceledAt.
- Birthday, ReactionRoleSet, Level.
## 4. Module & Features (Details)
- Ticketsystem: Slash-Commands fuer Anlage/Claim/Close/Prioritaet/Status; Ticket-Panel per Command oder Dashboard (/api/tickets/panel). Dashboard zeigt Ticket-Liste, Detail-Modal, Close-Aktion; Transcripts via /api/tickets/:id/transcript; Tickets pro Guild deaktivierbar (Module-Toggle); Support-Rolle fuer Channel-Overwrites optional.
- Automod: Link-Filter mit Whitelist, Bad-Word-Filter (Default + Custom), Caps-Erkennung, Spam-Tracker (Threshold/Window/Timeout), Rollenausnahmen, Log-Channel; konfigurierbar im Dashboard (Switches, Whitelist-Felder, Log-Channel, Sensitivitaet). Aktionen werden optional geloggt.
- Musik: Queue-Handling mit play/skip/stop/pause/resume/loop, Status-Abfrage im Dashboard (activeGuilds) und Modul-Toggle; stopAll-Hook bei Deaktivierung; nutzt play-dl + @discordjs/voice.
- Welcome: Embeds im Dashboard konfigurierbar (Channel, Farbe, Titel, Beschreibung, Footer, Thumbnails/Bilder als URL oder Upload), Preview im UI; Bot sendet Embeds bei Join, faellt auf Text-Begruesung zurueck wenn nur welcomeChannelId gesetzt ist.
- Logging: Kategorien joinLeave/messageEdit/messageDelete/automodActions/ticketActions/musicEvents, Log-Channel im Dashboard konfigurierbar; nutzt LoggingService fuer Events.
- Leveling: XP pro Nachricht, /rank Anzeige, Toggle ueber Settings. Unique Constraint pro Guild/User.
- Dynamische Voice: Lobby-Channel erzeugt private Voice-Channels mit Name-Template, optionalem Userlimit; Benutzer wird automatisch verschoben, leere erzeugte Channels werden entfernt.
- Modulverwaltung: Dashboard-Seite Module mit Toggles fuer ticketsEnabled/automodEnabled/welcomeEnabled/musicEnabled/levelingEnabled; API /api/modules liefert Status pro Guild.
- Dashboard/Backend: OAuth2 Login (/auth/discord, /auth/callback), Session-Handling, Guild-Auswahl; API-Endpoints mit Auth-Guard (/api/me, /api/guilds, /api/overview, /api/tickets, /api/tickets/:id/messages, /api/tickets/:id/close, /api/tickets/panel, /api/settings GET/POST, /api/modules). Sidebar-Abschnitte Uebersicht/Tickets/Automod/Welcome/Module/Einstellungen mit modulabhaengiger Sichtbarkeit; Settings-Form fuer welcome/log/supportRole, Logging-Optionen, Automod- und Welcome-Formulare.
- Commands (implementiert): Admin (/ban, /tempban, /kick, /mute, /unmute, /timeout, /clear), Music (/play, /pause, /resume, /skip, /stop, /queue, /loop), Tickets (/ticket, /claim, /close, /ticketpriority, /ticketstatus, /transcript, /ticketpanel), Utility (/configure, /help, /ping, /rank, /serverinfo, /welcome).
## 5. Roadmap / Planung
- SupportBot: Ansagen, Supportzeiten, Wartemusik (geplant)
- Embed-Builder (geplant)
- Team-Systeme: Abwesenheiten melden, Team-Dashboard (geplant)
## 6. Credits & Lizenz
- Autoren/Maintainer: nicht angegeben.
- Lizenz: nicht angegeben (bitte vor Nutzung pruefen).