# Papo Discord Bot Discord-Bot (discord.js 14, TypeScript) mit Web-Dashboard, Prisma/PostgreSQL und Docker-Support. ## Highlights - Ticketsystem mit Panels, Transcripts und Support-Login (Slash-Commands wie `/ticket`, `/claim`, `/close`). - Automod (Link-Whitelist, Spam/Caps, Bad-Word-Listen), Logging für relevante Events. - Musik (play/skip/stop/pause/resume/loop) pro Guild aktivierbar. - Welcome, Leveling, dynamische Voice, Birthdays, Reaction Roles, Events mit Remindern. - Statuspage-Modul, Rich Presence und modulbasierte Dashboard-Navigation. ## Tech-Stack - Node.js 20, TypeScript (CommonJS) - discord.js 14, play-dl, @discordjs/voice - Express + OAuth2-Login - Prisma ORM (PostgreSQL) - Dockerfile + docker-compose ## Quickstart (lokal) 1. Repo klonen, in das Verzeichnis wechseln. 2. `.env` anlegen: `cp .env.example .env` und Werte setzen. 3. Abhängigkeiten: `npm ci` (oder `npm install`). 4. Prisma: `npx prisma generate --schema=src/database/schema.prisma` und `npx prisma migrate dev --name init`. 5. Start Dev: `npm run dev` (ts-node-dev). Dashboard/Bot auf `PORT` (Standard 3000). 6. Slash-Commands werden beim Start für `DISCORD_GUILD_IDS` (oder `DISCORD_GUILD_ID`) registriert. ## Quickstart (Docker) - Dev-Stack: `docker-compose up --build` (Dockerfile + Postgres 15, env aus `.env`, startet `npm run dev`). - Eigenes Image: `docker build .` (Prisma-Generate läuft im Build). `.dockerignore` blendet lokale `node_modules`/`.env` aus. ## Environment-Variablen (Auswahl) - `DISCORD_TOKEN` (Pflicht, Bot Token) - `DISCORD_CLIENT_ID` / `DISCORD_CLIENT_SECRET` (Dashboard-OAuth) - `DISCORD_GUILD_ID` (optional Einzel-Guild) / `DISCORD_GUILD_IDS` (kommagetrennt) - `DATABASE_URL` (Pflicht, Postgres) - `PORT` (Dashboard/Bot, default 3000) - `SESSION_SECRET` (Express Session Secret, default `papo_dev_secret`) - `DASHBOARD_BASE_URL` (Public Base URL für OAuth Redirect) - `WEB_BASE_PATH` (Default `/ucp`, ohne Slash am Ende) - `OWNER_IDS` (kommagetrennte Owner für Admin-UI) - `SUPPORT_ROLE_ID` (optional Ticket/Support-Login Rolle) ## Datenbank / Prisma - Hauptschema: `src/database/schema.prisma` (zweites in `prisma/schema.prisma` für Binary Targets). - Migrationen: `npx prisma migrate dev --name `; danach `npx prisma generate --schema=src/database/schema.prisma`. - Kern-Tabellen: GuildSettings, Ticket, TicketSupportSession, Event/EventSignup, RegisterForm/RegisterApplication, Birthday, ReactionRoleSet, Level. ## Scripts - `npm run dev` – Entwicklung (ts-node-dev) - `npm run build` – TypeScript build - `npm start` – Start aus `dist` - Prisma-CLI: `npx prisma ...` (nutzt Schema aus `src/database/schema.prisma`) ## API/Dashboard Kurzinfo - Auth-Gate (`/api/*`), Login `/auth/discord`, Callback `/auth/callback`, Logout `/auth/logout`. - `/api/guilds` filtert auf Guilds, die der eingeloggte User besitzt oder managen darf **und** in denen der Bot ist. - Settings/Module über `/api/settings`, `/api/modules`, Tickets unter `/api/tickets*`, weitere Endpoints für Events, Reaction Roles, Birthday, Statuspage. ## Deployment-Hinweise - Produktion: `npm run build` + `npm start` oder Docker-Image nutzen. - Transcripts liegen unter `./transcripts` (bei Containern als Volume mounten). ## Credits/Lizenz - Autoren/Lizenz nicht hinterlegt – bitte vor Nutzung prüfen.