Warning
This project has been archived.
Active development, improvements, bug fixes, and feature updates have been discontinued.
The project will remain publicly available, and you are free to use, fork, and modify it according to the project's license. However, no further updates or official support are planned.
Pogy Bot is a full Discord bot platform with a live web dashboard, moderation tools, anti-nuke protection, automod controls, music playback, command management, and guild configuration flows.
- GitHub: devrock07
- GitHub: Void
- Discord bot with moderation, utility, music, fun, and management systems
- Zenith dashboard for guild configuration and live status views
- Shared config between bot commands and dashboard controls
- AutoMod, Anti-Nuke, logs, command center, docs, and music monitoring
- MongoDB-backed data storage
- Lavalink-based music system
index.jsboots the main bot launchersource/contains the Discord bot code, commands, listeners, and shared settingsdashboard/contains the Zenith dashboard client and serverscripts/run-services.jsstarts bot and dashboard togetherattach/contains dashboard showcase screenshots for GitHub
- Node.js
- Discord.js
- Express / native Node HTTP
- MongoDB
- Lavalink
- React
- Vite
- Install dependencies:
npm install
npm --prefix dashboard install- Create your env file:
copy .env.example .env- Fill in your real values inside
.env.
Required values:
DISCORD_TOKENDISCORD_BOT_TOKENDISCORD_CLIENT_IDDISCORD_CLIENT_SECRETMONGODB_URILAVALINK_NODE_URLLAVALINK_NODE_AUTHNEXTAUTH_SECRET
Recommended values:
DASHBOARD_PUBLIC_URLBOT_API_BASE_URLDASHBOARD_BOT_STATUS_URLSUPPORT_URLGUIDE_URL
- Start everything:
npm startnpm startstarts bot and dashboard in production modenpm run devstarts bot and dashboard in development modenpm run start:botstarts only the botnpm run dev:botstarts only the bot in watch modenpm run start:dashboardstarts only the dashboard servernpm run dev:dashboardstarts only the dashboard frontendnpm run build:dashboardbuilds the dashboard
Main Discord app values:
DISCORD_TOKENbot tokenDISCORD_BOT_TOKENbot token for dashboard Discord API accessDISCORD_CLIENT_IDapplication client IDDISCORD_CLIENT_SECRETapplication client secret
Database and bot services:
MONGODB_URIMongoDB connection stringLAVALINK_NODE_NAMELavalink node labelLAVALINK_NODE_URLLavalink host and portLAVALINK_NODE_AUTHLavalink password or auth tokenLAVALINK_NODE_SECUREtrueorfalse
Dashboard values:
DASHBOARD_PUBLIC_URLpublic URL of the dashboard, for examplehttps://your-dashboard-domain.comBOT_API_BASE_URLpublic URL of the bot status/config API, for examplehttps://your-bot-host.com:3001DASHBOARD_BOT_STATUS_URLURL the dashboard uses to talk to the bot APINEXTAUTH_SECRETsession signing secret
The project uses two running services:
-
The bot process This logs in to Discord, runs commands, listeners, AutoMod, Anti-Nuke, music, and exposes the bot status/config API on port
3001. -
The dashboard process This serves the Zenith web UI on port
3000, handles Discord login, and reads/writes guild configuration.
For a production deployment, the dashboard needs to be able to reach the bot API through BOT_API_BASE_URL / DASHBOARD_BOT_STATUS_URL.
Example:
- Dashboard public site:
https://dashboard.example.com - Bot API public URL:
https://bot.example.com:3001
Then your env would look like:
DASHBOARD_PUBLIC_URL=https://dashboard.example.com
BOT_API_BASE_URL=https://bot.example.com:3001
DASHBOARD_BOT_STATUS_URL=https://bot.example.com:3001Before deploying, configure your Discord application:
- Open the Discord Developer Portal.
- Select your application.
- Copy the Application ID into
DISCORD_CLIENT_ID. - Copy the Client Secret into
DISCORD_CLIENT_SECRET. - Copy the bot token into
DISCORD_TOKENandDISCORD_BOT_TOKEN. - Add your dashboard callback URL in OAuth2 Redirects:
Local:
http://localhost:3000/api/auth/callback/discord
Production example:
https://dashboard.example.com/api/auth/callback/discord
This repo is now arranged to support the split you asked for:
- Dashboard on Vercel
- Bot on Pterodactyl
The dashboard frontend is built with Vite, and the dashboard auth/data endpoints are available through Vercel serverless routing in:
The bot stays as the long-running Discord process and keeps exposing the bot API on port 3001.
Vercel will host:
- the React dashboard frontend
- Discord login callback handling
- session handling
- guild/config API routes
- server-to-server calls from the dashboard API to MongoDB and the bot API
Add these environment variables in your Vercel project:
DISCORD_CLIENT_IDDISCORD_CLIENT_SECRETDISCORD_BOT_TOKENMONGODB_URINEXTAUTH_SECRETDASHBOARD_PUBLIC_URLBOT_API_BASE_URLDASHBOARD_BOT_STATUS_URL
Recommended production values:
DASHBOARD_PUBLIC_URL=https://your-dashboard.vercel.app
BOT_API_BASE_URL=https://bot-api.yourdomain.com
DASHBOARD_BOT_STATUS_URL=https://bot-api.yourdomain.com- Push the repository to GitHub.
- Import the repo into Vercel.
- Set the project root to
dashboard. - Confirm these settings:
- Framework preset:
Vite - Build command:
npm run build - Output directory:
dist
- Framework preset:
- Add all required environment variables.
- Deploy.
In the Discord Developer Portal, add this redirect URL:
https://your-dashboard.vercel.app/api/auth/callback/discord
If you connect a custom domain, also add:
https://dashboard.yourdomain.com/api/auth/callback/discord
The bot should be deployed on a host that supports long-running Node processes.
Good choices:
- Pterodactyl
- Railway
- Render background service
- VPS
- PM2
- Upload the repo to your host.
- Install dependencies:
npm install- Set the required env vars:
DISCORD_TOKENDISCORD_BOT_TOKENDISCORD_CLIENT_IDDISCORD_CLIENT_SECRETMONGODB_URILAVALINK_NODE_URLLAVALINK_NODE_AUTHPORTif your panel or reverse proxy needs a custom dashboard/status port mapping
- Start the bot:
npm run start:bot- Make sure the bot API is reachable from Vercel.
The dashboard must be able to reach these bot endpoints:
GET /guildsPOST /guilds/:guildId/cacheGET /guilds/:guildId/music
For the split deployment to work cleanly:
- keep the bot running continuously on Pterodactyl
- expose the bot API publicly through a domain or reverse proxy
- point that public URL into:
BOT_API_BASE_URLDASHBOARD_BOT_STATUS_URL
Example:
- Bot panel machine runs the process
- Nginx or a proxy exposes
https://bot-api.yourdomain.com - Vercel dashboard calls that URL from serverless functions
If your bot API is not publicly reachable, the dashboard can still load login and session pages, but live guild sync, music status, and config pushback to the bot will fail.
If you want the cleanest production setup:
- Host the dashboard on Vercel
- Host the bot on Pterodactyl
- Put the bot API behind a public domain such as
https://bot-api.yourdomain.com - Set
BOT_API_BASE_URLto that bot API URL - Set
DASHBOARD_BOT_STATUS_URLto that same bot API URL - Set
DASHBOARD_PUBLIC_URLto the public Vercel dashboard URL - Add the Vercel callback URL in the Discord Developer Portal
Before pushing this repo to GitHub:
- Make sure
.envis not committed. - Keep only
.env.examplein Git. - Rotate any old secrets that were previously exposed.
- Confirm your Discord OAuth redirect URL matches your real dashboard domain.
- Confirm your dashboard can reach the bot API URL.
- Confirm the Vercel project root is
dashboard.
This repository is configured to read sensitive values from environment variables. Do not commit your .env file.
If a token, client secret, database URI, or webhook was ever exposed before cleanup, rotate it before making the repository public.
This project is distributed under the license in LICENSE.
created by devrock07 · updated by void






