A multipurpose Discord bot for communities of all sizes β moderation, engagement, and automation with a full web dashboard.
Helix helps you run a Discord server: moderate it, welcome new members, verify them, give out self-assignable roles, track activity with detailed audit logs, and keep members engaged with a deep economy system and fun commands. Everything is configurable from Discord commands or the web dashboard β no hosting or code required for server admins.
- Moderation β bans, kicks, timeouts, mutes, purges, warnings with aliases, configurable DM templates, escalation (warn β timeout/kick/ban), and live moderation actions from the dashboard.
- Audit logging β 31 event types across moderation, members, messages, voice, server changes, and AutoMod, with per-event channels and ignore lists.
- Verification β button-based gate with a customizable embed; grants a role on verify.
- Reaction roles β self-assignable role menus with labels, emoji, per-menu limits, and pause/resume.
- Welcoming β welcome/farewell messages with placeholders, auto-role on join, and image cards.
- Economy β wallet & bank, shop, inventory & equipment, item effects, auctions, leaderboards, and RPG-style stats.
- AutoMod β Discord native AutoMod rules plus custom invite/link, caps, emoji, spam, repeat, spoiler, attachment, and zalgo filters with per-filter delete, warn, timeout, kick, or ban actions.
- Social feeds β automatic Reddit feeds per channel (Twitch/YouTube/TikTok/X/Instagram/RSS planned).
- Fun & utility β emotion roleplay commands, canvas image effects, pet pics, polls placeholders, 8-ball, memes, and more.
- Dashboard β per-server web panel for every setting above, with live Discord-style previews.
- AI (beta) β Ollama-powered
askcommand with a family-friendly assistant persona.
Module defaults below come from the module catalog in src/config/modules.ts. Existing guild records may have older values; /configmodule and the dashboard show the stored value for a server.
| Module | What it covers | Catalog default |
|---|---|---|
| General | Info commands, help, ping, profiles | β on |
| Moderation | Ban/kick/timeout/mute/purge/warn, AutoMod | β on |
| Administration | Prefix, staff roles, log channels, toggles | β on |
| Verification | Verify gate + setup | β on |
| Welcoming | Welcome/farewell, auto-role, cards | β on |
| Reaction Roles | Role menus | β on |
| Economy | Wallet/bank/shop/inventory/auctions | β on |
| Fun | 8-ball, memes, games, emotion, image, pets | β on |
| Utility | Misc helpers (password, uuid, colorβ¦) | β on |
| Developer | Owner-only diagnostics & data tools | β on |
| Music | Voice playback | β on |
| Leveling | XP, ranks, role rewards, voice XP, rank cards | β off |
| Symbol | Meaning |
|---|---|
| π’ | Active |
| Very active (current focus) | |
| π΅ | Beta |
| βͺ | Alpha |
| π‘ | Inactive |
| π΄ | Discontinued |
| π£ | Unofficial / private |
| π | Life support (security fixes only) |
| β / π€ / β | Full / partial / no AI |
| βοΈ | In progress |
| Core | Version(s) | Codename | Status | Engine | AI | Notes |
|---|---|---|---|---|---|---|
| β | v1.0.0 β 1.1.8 | Rootspawn | π΄ | D.js 12.2.0 | β | |
| β | v2.0.0 β 2.6.0 | Loopback | π΄ | D.js 12.4.1 | β | |
| β | v3.0.0 β 3.5.0 | EchoRun | π | D.js 12.5.2 | β | |
| β | v4.0.0 β 4.1.2 | Neatline | π΄ | D.js 12.5.3 | β | |
| β | v5.0.0 | Ghostping | π‘ | D.js 13.6.0 | β | |
| β | v5.1.0 | Signalband | π’ | D.js 13.11.0 | β | |
| β | v6.0.0 | Dataloom | π΄ | D.js 13.14.0 | β | |
| β | v6.1.0 | Protothype | π΅ | D.js 14.9.0 | β | |
| β | v7.0.0 | Cleancut | π΄ | D.js 14.11.0 | βοΈ | |
| Hex_1 | v9.0.0 β 9.0.6 | Stackflow | π΄ | D.js 14.6.0 | βοΈ | Deprecated in favor of Carbonkernel |
| Hex_2 | v10.0.1 | Carbonkernel | D.js 14.26 | βοΈ | Current. Sapphire framework + Svelte dashboard + REST API | |
| Cranberry | x | Cranberry | π£ | D.js 14.14.1 | π€ | Private moderation bot for the Helix support server |
v9.0+ runs on Paperplane, a custom fork of Sapphire.
- π Website
- β Add Helix to your server
- π¬ Support server β help, suggestions, and status updates
- π In-bot help β
/helplists commands available to the current member; use/help command:<name>for a specific root or grouped command
These commands and the dashboard write to the same per-guild configuration, but they do not expose the same controls:
| Command | What it does | Permission |
|---|---|---|
/setup |
Stateful, restart-safe setup wizard for roles, channels, prefix, and module states, with start, status, finish, and cancel; legacy preserves the one-shot form. It stores verification settings but does not post the verification button. |
Manage Guild |
/help |
Lists commands the member can use. command:config role admin and other grouped paths are accepted. |
None |
/config |
Sets roles, log channels, prefix, module states, or disabled commands through subcommands. | Slash registration: Administrator; runtime accepts Manage Channels, Manage Roles, Ban Members, Kick Members, or Moderate Members for most subcommands. The administrator role is owner-only. |
/settings |
Displays the current server configuration; it does not change settings. | Manage Guild |
/configmodule |
Enables or disables one module. | Administrator |
/togglecommand |
Enables or disables one non-critical command for the server. | Manage Guild |
/setup-verification |
Configures and enables verification, validates the selected role/channel, and posts the verification message. | Manage Guild and moderator access |
/setup is restart-safe: start creates the wizard, each step command saves its changes before advancing, and status, finish, or cancel manages the flow. The starter or server owner can continue it; the server owner alone can assign the administrator role. /setup legacy preserves the old one-shot form. The dashboard exposes the broader guild configuration API, including warning aliases/DM templates, AutoMod actions, per-event logging channels, and other settings that are not part of /setup; dashboard changes are persisted independently of the command form but share the same guild record.
Leveling: /level rank and /rank render a canvas rank card (embed fallback if the card fails), /level leaderboard shows the top 10, and /level give-xp / /level remove-xp need Manage Server. Reward roles follow the member's level in both directions β taking XP away revokes rewards they no longer qualify for, and with stacking off only the highest earned reward is kept. Voice XP is opt-in via the dashboard Leveling page (voiceXpPerMinute, 0 = off); un-accrued minutes are lost if the bot restarts mid-session. The same dashboard page lists the server's XP leaderboard.
Moderation rules can be scoped per channel and per role. /automod scope action channel:#staff-chat filter:invites action:delete sets one Helix filter's punishment for a channel, /automod scope exempt role:<@&id> exempt:true skips Helix AutoMod for a role, and /automod scope list shows every override. Precedence is guild-wide β channel β role. The same mechanism scopes warn rules (warnSettings.overrides: thresholds, DM, mod channel). The dashboard AutoMod page has a "Channel / role rules" card; warn overrides are managed by API/DB for now.
Mass actions live under /massaction (needs Manage Server): nuke bans a member and clears their recent messages from every text channel, clone duplicates a channel with its overwrites, lockdown locks every text channel (with an optional auto-unlock like /massaction lockdown time:2h), unlockall reverses it, and slowmode applies a preset (off/5s/10s/30s/1m/5m/15m) to one channel or the whole server. Locks record the real @everyone overwrite, and any auto-unlock that expired while the bot was offline is applied on the next boot.
The repository's bun run typecheck and bun run build provide compile-time validation. bun run test is a repository structure/static-validation script, not a live Discord, MongoDB, or permission integration test; it currently reports pre-existing false-positive errors for helper files that do not export command classes. Command registration, database writes, role hierarchy, and permission behavior still require testing in a Discord server.
Requires Bun β₯ 1.3.14 and a MongoDB database.
bun install # install bot dependencies
cp src/example.env src/.env # then fill in DISCORD_TOKEN, MONGO_URI, ...
bun run build # typecheck + compile to dist/
bun run start # run the botLive-reload bot:
bun run devbun run dev:allBoots the bot first, waits for its API, then boots the dashboard. Bot logs pass through untouched; dashboard lines are re-tagged TIMESTAMP - DASH - β¦ (magenta). Ctrl+C stops everything.
To delete both dist/ folders, rebuild the bot and dashboard from clean, then launch both (so a broken compile fails before anything starts):
bun run dev:freshThe web dashboard lives in dashboard/ β a Svelte SPA served by a Bun server that handles Discord login and proxies the bot API.
bun run dashboard:install # install dashboard deps
bun run dashboard:dev # dev: Vite (5173) + Bun server (3000)
bun run dashboard:build # production frontend build
bun run dashboard:start # serve production buildConfigure via DASHBOARD_WEB_PORT, DASHBOARD_WEB_URL (e.g. https://dash.domain.tld), BOT_API_URL, plus DISCORD_CLIENT_ID / DISCORD_CLIENT_SECRET / SESSION_SECRET. Register {DASHBOARD_WEB_URL}/api/auth/callback as an OAuth2 redirect in the Discord developer portal. See dashboard/README.md.
Other useful scripts: bun run validate (pre-commit checks), bun run test, bun run create-module / delete-module (scaffold toggleable modules).
- Sapphire framework β bot architecture, MIT
- Paperplane β Helix's Sapphire fork
- discord.js β Discord API library
- Svelte β dashboard UI
GPL-3.0 β see LICENSE.
