65 lines
3.2 KiB
Markdown
65 lines
3.2 KiB
Markdown
# 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 <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.
|