# 🚀 Papo Discord Bot

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. ---

Built with ❤️ using TypeScript, Discord.js, Prisma & PostgreSQL