Repo: github.com/LordDemonos/xanny-helper
Docker image: demonos/xanny-helper:latest on Docker Hub
Discord bot for raid schedules, boss respawn/lockout commands, guild inventory, and suggestions—aimed at EverQuest–style communities (e.g. Project Quarm).
docker pull demonos/xanny-helper:latest
docker run --env-file .env \
-v /path/to/config:/app/config \
-v /path/to/cache:/app/cache \
demonos/xanny-helper:latestUse env.example as a template for .env. Mount config/ if JSON service-account paths live there; persist cache/ if you need data across restarts. Do not bake secrets into custom images.
Build from this repo instead: see Build from source below.
- Boss respawn — Ingests kills from a target-tracking channel;
/respawn,/lockout,/raidnight,/schedule,/boss-nickname(details below). - Raid schedule — Reads schedule from Discord; can publish to a guild site (e.g. GitHub-backed pages).
- Inventory — Guild bank file uploads and sync.
- Suggestions — Google Sheets integration and Discord posting.
- Ops — No secrets in logs; credentials via env at runtime. TypeScript, optional Docker.
| Command | Description |
|---|---|
/respawn |
One boss or all bosses in a zone; optional “Post to channel”. |
/lockout |
Lockout / respawn duration for a boss. |
/raidnight |
Lockouts up during the next raid window (9 PM–11:59 PM ET), from cached schedule. |
/schedule (admin) |
Raid-night posts: start, list, cancel, post-now. |
/boss-nickname |
Personal alias for /respawn and /lockout. |
Zone order (e.g. Vex Thal) lives in src/modules/boss-respawn/zoneBossOrder.ts. Variants (e.g. North/South blob) work when the kill line includes the note.
Default lockout times ship in data/default_bosses.json. If you use Project Quarm Boss Tracker, keep that file aligned with the app.
Setup: docs/DISCORD_SETUP.md.
Needs: Node.js 20+, and .env from env.example.
npm install
npm run build
npm startnpm run dev— ts-node, no build.npm run start:debug/npm run dev:debug— verbose logging.
Docker (local build):
docker build -t xanny-helper .
docker run --env-file .env -v /path/to/config:/app/config -v /path/to/cache:/app/cache xanny-helper- Google Calendar — Effectively off for our use case; code/toggle
ENABLE_CALENDAR_FUNCTIONSremains. - Offnight file pipeline — Unused; re-enable with
ENABLE_OFFNIGHT_FILE_OPERATIONSif needed.
Tailored to one guild’s channels and env—not a generic SaaS. Fork: copy env.example, read docs/DISCORD_SETUP.md. Never commit .env, Google JSON keys, or tokens; they stay runtime-only.
src/— application code.data/default_bosses.json,src/modules/boss-respawn/zoneBossOrder.ts— boss data / ordering.npm run verify-boss-respawn— optional sanity check (scripts/).
Issues and PRs welcome on GitHub.
Happy raiding.