Self-hosted Discord stack

One beacon for gamers, music, stats and safe diagnostics.

NeatherBeacon keeps Alpha on server operations, public commands, Palworld REST commands, and Bravo on Muse-powered music playback, inside one Docker Desktop container.

Designed for a small live server

The bot is intentionally cautious. It creates missing managed resources, reuses known Discord IDs, and reports ambiguous duplicates instead of deleting or guessing.

Safe server sync

Alpha audits roles, categories and channels, then applies additive corrections only when intent is clear.

Music under one roof

Bravo runs upstream Muse in the same container with a Docker volume mounted at /data.

Public fun commands

Pokédex commands use autocomplete, local JSON caching, request deduplication and cached Pokémon artwork.

Community channels

Dedicated public spaces keep Palworld and Pokémon GO conversations easy to find without mixing them into the main chat.

Palworld metrics

Alpha reads server metrics on demand and posts public snapshots with a global cooldown.

Palworld announcements

Staff can post a Discord announcement and relay the same message in game without exposing REST credentials.

Safe diagnostics

Admin-only diagnostics expose runtime health, command hashes and cache metadata without printing secrets or file contents.

Commands

Admin commands stay locked down. Palworld metrics and Pokédex commands are public, rate-limited and safe by default.

/status
Show Alpha, Bravo, runtime and cache status.
/audit
Compare desired server structure without changing anything.
/resync
Apply additive managed Discord changes.
/stats-refresh
Force the Stats voice channels to refresh.
/diag
Show safe Alpha, Bravo, stats and command diagnostics.
/cache-status
Report local cache size and age without file contents.
/metrics-palworld
Show filtered Gaylemon Palworld status with a global 4-minute cooldown.
/announce-palworld message:...
Let admins and moderators post to Discord and relay the announcement in game.
/pokemon name:charizard
Return an autocomplete-backed Pokédex card with artwork.
/weakness pokemon:charizard
Show weaknesses, resistances and immunities.
/move name:flamethrower
Look up a move.
/ability name:intimidate
Look up an ability and sample Pokémon.
/type name:fire
Show offensive and defensive type matchups.
/random-pokemon
Pull a random Pokémon.

Quick start

Prepare secrets locally.
Copy .env.example to .env and fill Discord, YouTube and Spotify values. Never commit .env.
Capture Discord IDs.
Run npm run capture:ids so managed resources are reused by ID.
Enable Palworld REST.
Public metrics use the filtered Gaylemon JSON by default. Set the Palworld REST admin variables only for staff in-game announcements.
Build and restart with notice.
Run .\scripts\rebuild-restart.ps1. Alpha posts an orange maintenance message first.