███████╗██╗ ██╗██████╗ ██████╗ ██╗ ██╗
╚══███╔╝╚██╗ ██╔╝██╔══██╗██╔═══██╗╚██╗██╔╝
███╔╝ ╚████╔╝ ██████╔╝██║ ██║ ╚███╔╝
███╔╝ ╚██╔╝ ██╔══██╗██║ ██║ ██╔██╗
███████╗ ██║ ██║ ██║╚██████╔╝██╔╝ ██╗
╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝
ZyroX Bot — Python Discord Bot + FastAPI Backend
✦ Overview
This folder contains the ZyroX Discord bot built on discord.py v2 alongside a FastAPI backend that powers the web dashboard. Everything runs from a single python CodeX.py command.
bot/
├── api/ FastAPI backend (routes, schemas, db manager)
│ └── routes/ /bot /guilds /admin
├── cogs/
│ ├── antinuke/ Antinuke protection event listeners
│ ├── automod/ Automod enforcement event listeners
│ ├── commands/ All slash & prefix command modules
│ ├── events/ General Discord event listeners
│ ├── moderation/ Moderation action modules
│ └── zyrox/ Core ZyroX feature cogs
├── core/ Bot client, context, cog base classes
├── games/ Standalone game logic + button views
├── utils/ Emoji, tools, sync, Cloudflare tunnel
├── assets/ Fonts, backgrounds, GIFs
└── CodeX.py Entry point
✦ Features
|
🛡️ Antinuke
|
🤖 Automod
|
|
🎵 Music
|
⚙️ Moderation
|
|
🎉 Engagement
|
🎮 Games
|
|
🌐 API Backend
|
🔧 Developer
|
✦ Prerequisites
| Requirement | Notes |
|---|---|
| Python 3.10+ | — |
| Lavalink v4 node | for music features |
| Discord bot token | from Developer Portal |
| Cloudflare account (free) | for HTTPS tunnel — browser setup only |
✦ Setup
1 — Install dependencies
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate
pip install -r requirements.txt
2 — Configure environment
Create a .env file (copy from .env.example):
# ── Core ──────────────────────────────────────────────────────────
TOKEN = your_discord_bot_token
brand_name = 'ZyroX'
# ── Owner IDs (comma-separated — no code changes needed) ──────────
OWNER_IDS = 870179991462236170,767979794411028491
# ── Lavalink ──────────────────────────────────────────────────────
LAVALINK_HOST = "your-lavalink-host"
LAVALINK_PASSWORD = "your_password"
LAVALINK_SECURE = "true"
LAVALINK_PORT = ""
# ── Emoji Sync ────────────────────────────────────────────────────
EMOJI_SYNC = "true"
# ── API / Dashboard Backend ───────────────────────────────────────
API_ENABLED = "true"
API_PORT = "8000"
DASHBOARD_API_KEY = "change_this_to_a_strong_secret"
CORS_ORIGINS = ""
# ── Cloudflare Tunnel ─────────────────────────────────────────────
TUNNEL_ENABLED = "true"
CF_TUNNEL_TOKEN = "your_tunnel_token"
CF_TUNNEL_URL = "https://api.yourdomain.com"
# ── Webhooks ──────────────────────────────────────────────────────
WEBHOOK_URL = "https://discord.com/api/webhooks/..."
3 — Run
python CodeX.py
✦ Environment Reference
| Variable | Default | Description |
|---|---|---|
TOKEN |
— | Discord bot token |
OWNER_IDS |
— | Comma-separated owner Discord user IDs |
LAVALINK_HOST |
— | Lavalink server hostname (no protocol) |
LAVALINK_PASSWORD |
— | Lavalink password |
LAVALINK_SECURE |
true |
true = HTTPS, false = HTTP |
LAVALINK_PORT |
(empty) | Port — only when LAVALINK_SECURE=false |
EMOJI_SYNC |
true |
Auto-sync application emojis on startup |
API_ENABLED |
true |
Start the FastAPI dashboard backend |
API_PORT |
8000 |
Port the backend listens on |
DASHBOARD_API_KEY |
— | Shared secret between bot API and dashboard |
CORS_ORIGINS |
(empty) | Extra CORS-allowed origins, comma-separated |
WEBHOOK_URL |
— | Discord webhook for command logs |
TUNNEL_ENABLED |
true |
Expose API over HTTPS via Cloudflare Tunnel |
CF_TUNNEL_TOKEN |
— | Token from Cloudflare Zero Trust dashboard |
CF_TUNNEL_URL |
— | Your permanent public URL |
✦ HTTPS Tunnel (Cloudflare)
Uses pycloudflared — downloads the cloudflared binary automatically on first run. No system installs, no CLI, works on Pterodactyl and any Python host.
Why Cloudflare over ngrok:
| Cloudflare Tunnel | ngrok free | |
|---|---|---|
| Bandwidth | Unlimited | 1 GB/month |
| Requests | Unlimited | 10k/month |
| URL stability | Permanent | Permanent (1 domain) |
| System install | ❌ Not needed | ❌ Not needed |
| Cost | Free | Free |
Setup (browser only — no CLI needed):
- Go to one.dash.cloudflare.com → Networks → Tunnels → Create a tunnel
- Choose Cloudflared, name it (e.g.
zyrox-api), save - On Install connector, copy the token from the command shown:
cloudflared tunnel run --token <COPY_THIS_TOKEN> - On Public Hostname tab → add a hostname:
- Subdomain:
api· Domain:yourdomain.com· Service:http://localhost:8000
- Subdomain:
- Add to
.env:CF_TUNNEL_TOKEN = "eyJhIjoiXXXX..." CF_TUNNEL_URL = "https://api.yourdomain.com"
On every startup the console prints:
◈ Tunnel: cloudflared binary ready — starting tunnel on port 8000…
◈ Tunnel: API is live at https://api.yourdomain.com
↳ NEXT_PUBLIC_API_URL = https://api.yourdomain.com/api/v1
Set TUNNEL_ENABLED=false to disable.
✦ Emoji Sync
When EMOJI_SYNC=true, the bot syncs application emojis on every startup:
| Event | Action |
|---|---|
| New emoji found | Uploaded to application, ID written to emoji.py |
| Stale ID detected | emoji.py patched automatically |
| No changes | Sync completes instantly, no restart |
| After any patch | Bot restarts so fresh IDs are live |
✦ Deployment
Upload the entire bot/ folder to your host and set the start command to:
python CodeX.py
pycloudflared downloads the binary on first run — no extra steps on any host.
Recommended free hosts: Render · Railway · Fly.io · Pterodactyl
⭐ NexioHost — Premium bot hosting, built for Discord bots. Fast, reliable, and affordable.
✦ Troubleshooting
| Problem | Fix |
|---|---|
| Bot fails to start | Check TOKEN and gateway intents in Developer Portal |
| Music not working | Verify LAVALINK_HOST, LAVALINK_SECURE, LAVALINK_PORT |
| Dashboard can't reach API | Check API_ENABLED=true and NEXT_PUBLIC_API_URL in dashboard |
| CORS errors | Add your Vercel URL to CORS_ORIGINS in .env |
| Emojis showing as plain text | Run once with EMOJI_SYNC=true to upload and patch IDs |
| Tunnel not starting | Check CF_TUNNEL_TOKEN is valid and pycloudflared is installed |
| Want to add an owner | Add their ID to OWNER_IDS in .env — no code changes needed |
