diff --git a/readme.md b/readme.md index 5d37593..7c675b4 100644 --- a/readme.md +++ b/readme.md @@ -2,72 +2,63 @@ Discord-Bot (discord.js 14, TypeScript) mit Web-Dashboard, Prisma/PostgreSQL und Docker-Support. -## Was drin ist -- Ticketsystem: Slash-Commands (/ticket, /claim, /close, /ticketpriority, /ticketstatus, /transcript, /ticketpanel), Panels, Transcripts unter `./transcripts`, Support-Login-Panel mit Rollen-Vergabe/On-Duty-Logging. -- Automod: Link-Filter (Whitelist), Spam/Caps-Erkennung, Bad-Word-Listen (Custom), Timeouts, Logging. -- Musik: play/skip/stop/pause/resume/loop, Queue, aktivierbar/deaktivierbar pro Guild. -- Welcome: konfigurierbare Embeds (Channel, Farbe, Texte, Bilder/Uploads), Preview im Dashboard, Text-Fallback. -- Logging: Join/Leave, Message Edit/Delete, Automod/Ticket/Musik-Events mit konfigurierbarem Log-Channel/Kategorien. -- Leveling: XP/Level pro Nachricht, /rank, toggelbar. -- Dynamische Voice: Lobby erzeugt private Voice-Channels mit Template/Userlimit. -- Birthday: /birthday + geplante Glueckwuensche mit Template/Channel. -- Reaction Roles: Verwaltung im Dashboard, Sync/Loeschen/Erstellen. -- Events: Einmalig/recurring, Reminder, Signups, Buttons. -- Statuspage-Modul vorhanden (Config/API), plus Modul-Toggles im Dashboard. -- Dashboard: OAuth2 (Scopes identify, guilds), zeigt nur Guilds, die der Nutzer besitzt oder mit Manage Guild/Admin-Rechten verwalten darf **und** in denen der Bot ist. Modulabhaengige Navigation. -- Rich Presence: rotiert mit `/help`, Dashboard-URL und Guild-Zaehler. +## 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 (Docker-Basis), TypeScript (CommonJS) +- Node.js 20, TypeScript (CommonJS) - discord.js 14, play-dl, @discordjs/voice -- Express + OAuth2-Login, Prisma ORM (PostgreSQL) -- Dockerfile + docker-compose (App + Postgres) +- Express + OAuth2-Login +- Prisma ORM (PostgreSQL) +- Dockerfile + docker-compose -## Setup (lokal, Entwicklung) +## Quickstart (lokal) 1. Repo klonen, in das Verzeichnis wechseln. -2. `cp .env.example .env` und Variablen setzen (siehe unten). -3. Dependencies installieren: `npm ci` (oder `npm install`). +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 und Bot laufen auf `PORT` (default 3000). -6. Slash-Commands werden beim Start fuer die IDs in `DISCORD_GUILD_IDS` (oder `DISCORD_GUILD_ID`) registriert. +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. -## Setup mit Docker -- `.dockerignore` blendet lokale node_modules/.env aus. -- Dev-Stack: `docker-compose up --build` (nutzt `Dockerfile`, Postgres 15, env aus `.env`, `npm run dev` im Container). -- Eigenes Image: `docker build .` (Prisma-Generate laeuft im Build). +## 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 +## Environment-Variablen (Auswahl) - `DISCORD_TOKEN` (Pflicht, Bot Token) -- `DISCORD_CLIENT_ID` / `DISCORD_CLIENT_SECRET` (Pflicht fuer Dashboard-OAuth) -- `DISCORD_GUILD_ID` (optional Einzel-Guild fuer Commands) -- `DISCORD_GUILD_IDS` (kommagetrennt, mehrere Guilds) +- `DISCORD_CLIENT_ID` / `DISCORD_CLIENT_SECRET` (Dashboard-OAuth) +- `DISCORD_GUILD_ID` (optional Einzel-Guild) / `DISCORD_GUILD_IDS` (kommagetrennt) - `DATABASE_URL` (Pflicht, Postgres) -- `PORT` (Webserver/Dashboard, default 3000) +- `PORT` (Dashboard/Bot, default 3000) - `SESSION_SECRET` (Express Session Secret, default `papo_dev_secret`) -- `DASHBOARD_BASE_URL` (Public Base URL, fuer OAuth Redirect) +- `DASHBOARD_BASE_URL` (Public Base URL für OAuth Redirect) - `WEB_BASE_PATH` (Default `/ucp`, ohne Slash am Ende) -- `OWNER_IDS` (kommagetrennte Owner fuer Admin-UI) +- `OWNER_IDS` (kommagetrennte Owner für Admin-UI) - `SUPPORT_ROLE_ID` (optional Ticket/Support-Login Rolle) ## Datenbank / Prisma -- Schema: `src/database/schema.prisma` (zweites Schema in `prisma/schema.prisma` fuer Binary Targets). +- 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 (Module/Config), Ticket, TicketSupportSession, Event/EventSignup, Birthday, ReactionRoleSet, Level. +- Kern-Tabellen: GuildSettings, Ticket, TicketSupportSession, Event/EventSignup, RegisterForm/RegisterApplication, Birthday, ReactionRoleSet, Level. -## Kommandos & Scripts +## 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`) -## Dashboard / API Kurzinfo +## 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. -- Module/Settings ueber `/api/settings`, `/api/modules`, Tickets unter `/api/tickets*`, weitere Endpoints fuer Events, Reaction Roles, Birthday, Statuspage. +- `/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 werden unter `./transcripts` abgelegt (Volume mounten, falls Container). +- Transcripts liegen unter `./transcripts` (bei Containern als Volume mounten). ## Credits/Lizenz -- Autoren/Lizenz nicht hinterlegt. Bitte vor Nutzung pruefen. +- Autoren/Lizenz nicht hinterlegt – bitte vor Nutzung prüfen.