274 lines
4.9 KiB
Markdown
274 lines
4.9 KiB
Markdown
# 🚀 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> |