# 🚀 Papo Discord Bot

<p align="center">
  <img src="https://img.shields.io/badge/Discord.js-v14-5865F2?style=for-the-badge&logo=discord&logoColor=white" />
  <img src="https://img.shields.io/badge/TypeScript-5.x-3178C6?style=for-the-badge&logo=typescript&logoColor=white" />
  <img src="https://img.shields.io/badge/Node.js-20-339933?style=for-the-badge&logo=node.js&logoColor=white" />
  <img src="https://img.shields.io/badge/PostgreSQL-Prisma-2D3748?style=for-the-badge&logo=postgresql&logoColor=white" />
  <img src="https://img.shields.io/badge/Docker-Ready-2496ED?style=for-the-badge&logo=docker&logoColor=white" />
</p>

A modern, feature-rich Discord bot built with **discord.js v14**, **TypeScript**, **Prisma**, and **PostgreSQL**, featuring a powerful web dashboard and modular architecture.

---

# ✨ Features

## 🎫 Ticket System
- Interactive ticket panels
- Ticket claiming
- Ticket transcripts
- Support login sessions
- Slash commands (`/ticket`, `/claim`, `/close`, ...)

## 🛡️ Moderation
- Link whitelist
- Anti-Spam
- Anti-Caps
- Bad word filtering
- Comprehensive server logging

## 🎵 Music
- Play music from multiple sources
- Queue support
- Pause / Resume
- Skip
- Stop
- Loop
- Enable/Disable per server

## 👋 Community Features
- Welcome messages
- Leveling system
- Birthday reminders
- Reaction Roles
- Dynamic Voice Channels
- Event system with reminders

## 📊 Dashboard
- Discord OAuth2 Login
- Guild management
- Modular settings
- Status Page integration
- Rich Presence management
- Modern responsive interface

---

# 🛠️ Tech Stack

| Technology | Version |
|------------|---------|
| Node.js | 20+ |
| TypeScript | Latest |
| discord.js | v14 |
| Express | Latest |
| Prisma ORM | Latest |
| PostgreSQL | 15+ |
| Docker | Supported |

---

# 📦 Installation

## Local Development

Clone the repository

```bash
git clone https://github.com/yourname/papo-discord-bot.git
cd papo-discord-bot
```

Create your environment file

```bash
cp .env.example .env
```

Install dependencies

```bash
npm install
```

Generate Prisma Client

```bash
npx prisma generate --schema=src/database/schema.prisma
```

Run database migrations

```bash
npx prisma migrate dev --name init
```

Start the development server

```bash
npm run dev
```

The bot and dashboard will start on the configured **PORT** (default: `3000`).

Slash commands are automatically registered for the guilds defined in:

- `DISCORD_GUILD_IDS`
- or `DISCORD_GUILD_ID`

---

# 🐳 Docker

Start the complete development stack

```bash
docker-compose up --build
```

Build the Docker image manually

```bash
docker build -t papo-discord-bot .
```

The Docker image automatically generates the Prisma Client during the build process.

---

# ⚙️ Environment Variables

| Variable | Description |
|-----------|-------------|
| `DISCORD_TOKEN` | Discord Bot Token |
| `DISCORD_CLIENT_ID` | Discord OAuth Client ID |
| `DISCORD_CLIENT_SECRET` | Discord OAuth Secret |
| `DATABASE_URL` | PostgreSQL Connection String |
| `PORT` | Dashboard Port (default: 3000) |
| `SESSION_SECRET` | Express Session Secret |
| `DASHBOARD_BASE_URL` | Public Dashboard URL |
| `WEB_BASE_PATH` | Base path (default: `/ucp`) |
| `OWNER_IDS` | Comma-separated Bot Owners |
| `SUPPORT_ROLE_ID` | Support Role ID |
| `DISCORD_GUILD_ID(S)` | Guild(s) for command registration |

---

# 🗄️ Database

Main Prisma schema

```
src/database/schema.prisma
```

Generate Prisma Client

```bash
npx prisma generate --schema=src/database/schema.prisma
```

Create a migration

```bash
npx prisma migrate dev --name your-migration
```

### Core Models

- GuildSettings
- Ticket
- TicketSupportSession
- Event
- EventSignup
- RegisterForm
- RegisterApplication
- Birthday
- ReactionRoleSet
- Level

---

# 📜 Available Scripts

| Command | Description |
|---------|-------------|
| `npm run dev` | Development Mode |
| `npm run build` | Compile TypeScript |
| `npm start` | Run Production Build |
| `npx prisma ...` | Prisma CLI |

---

# 🌐 Dashboard API

Authentication

```
/auth/discord
/auth/callback
/auth/logout
```

Protected API

```
/api/*
```

Main Endpoints

- `/api/guilds`
- `/api/settings`
- `/api/modules`
- `/api/tickets`
- `/api/events`
- `/api/reactionroles`
- `/api/birthday`
- `/api/statuspage`

Only guilds where the authenticated user has **Manage Server** permissions and where the bot is present are accessible.

---

# 🚀 Deployment

Production build

```bash
npm run build
npm start
```

or simply use Docker.

Ticket transcripts are stored in

```
./transcripts
```

When running inside Docker, mount this directory as a volume to persist transcripts.

---

# ❤️ Contributing

Contributions, feature requests, and bug reports are always welcome!

Feel free to open an Issue or submit a Pull Request.

---

# 📄 License

No license has been specified yet.

Please add an appropriate open-source license before publishing this project.

---

<p align="center">
Built with ❤️ using TypeScript, Discord.js, Prisma & PostgreSQL
</p>