Changelog
User-visible changes to GoofBot. Latest at the top. Currently running v3.2.0.
v3.2.0
2026-04-29League of Legends + Valorant tracking (highly requested!)
- Experimental — currently running on a Riot dev API key while we wait for Riot to review our Production API Key application (the tier required for Valorant endpoints).
- Dev keys rotate every 24 hours, so you may briefly see "API key not configured" until the operator rotates. Once Riot approves the Production key, the EXP banner goes away and the key becomes stable.
- Tracking, refresh, and announcement settings are safe to configure now — your data persists across rotations.
- Slash commands:
/lol track | untrack | list | profile | matches | matchand/valorant track | untrack | list | profile | matches. - Region picker covers every shard Riot exposes (NA1/EUW1/EUN1/KR/JP1/BR1/LA1/LA2/OCE/TR1/RU/ME1/SG2/TW2/VN2/PH2/TH2 for LoL; NA/EU/AP/KR/LATAM/BR for Valorant).
- Per-queue W/L for non-ranked too — League's API only reports W/L for the two ranked queues, but the dashboard now also shows ARAM, ARAM Mayhem, Normals, Quickplay, Arena, Swarm, and rotating event modes by aggregating cached match digests.
- Same approach for Valorant — Competitive, Unrated, Swiftplay, Spike Rush, Deathmatch, Team Deathmatch, and featured modes.
/lol matches queue:<id>filter — pull e.g. ARAM-only or Ranked-Solo-only matches./lol match <match_id>— single-match drill-down with both team comps, KDA, items, vision, gold.- New Gaming sidebar group with
/games/loland/games/valorantdashboard pages — tracklist with rank + per-queue stat columns, add-account form, settings card for the (next-phase) auto-announce loop. - Public preview at
/demo/games/loland/demo/games/valorant— what the integration looks like with fabricated data, no login required.
Moderation
/mod warnconfirmation now echoes the reason — the ephemeral "Warned @user" reply showed the warning number and active count but not the reason itself. It now includes aReason:line so the issuer doesn't have to dig through the rapsheet to verify what the warning recorded.
Analytics
- Messages (30D) KPI fixed for every guild — the dashboard tile was stuck at 0 on every guild that hadn't opted into message-content storage (which is off by default for privacy). Activity now flows through a separate always-on counter that records counts only — no message content, no IDs, no per-message timestamps — so the KPI works without compromising the privacy posture.
- The opt-in content log keeps doing its job for ticket history, edit/delete review, and the Logs-page search.
v3.1.0
2026-04-27Auto-build template overhaul
- Streamer / Community / Gaming / Everything templates now build a
much more complete server in one click: voice channels expand from
`voice-hub` alone to also include `stream-chat`, `music`, `afk`, and
`mod-voice`. Logs category gains `modmail`, `system-status`, and
(for Twitch-flavoured presets) `twitch-chat-log`.
- Auto-creates more roles: Twitch Sub + Twitch VIP (for live-alerts
presets — wires straight into role-sync once a broadcaster links
their Twitch), Streamer + Creator self-tag roles (for clips presets).
- Reaction-role panels expand by preset: Pronouns + Notifications +
**Colors** (the colors panel now auto-posts everywhere — was
previously template-only). Gaming preset adds Platform + Region.
Community adds Region. Everything adds both.
- Starter content seeded in every preset:
#rulesgets the verify
panel embed posted automatically, `#general` gets a welcome message
pinned with links to `#roles` / `#support` / `#rules` / the docs.
- Default chat commands for streamer / all / officialBot:
`!discord`, `!socials`, `!subscribe`, `!schedule`. Idempotent — won't
overwrite a custom command you already created with the same trigger.
- Default chat-claim items for streamer / all:
wave,hug,gg,
`lurk`, `f` with 30s cooldown. Master toggle stays OFF until
operator opts in.
- Starboard defaults seeded (threshold 3, ⭐ emoji) when the preset's
starboard flag is on.
- Post-build checklist — every preset finishes with a 2–4-item
next-step list shown on the Setup wizard hero card: link Twitch,
mod the bot, customise welcome/verify, review roles. The Twitch
items only show on presets that include live-alerts.
- OperatorGuide on /docs — new "Auto-build (the one-click setup)"
handbook section explains exactly what each user-facing template
builds, what it doesn't do, and how idempotency works.
v3.0.0
2026-04-27Standalone Twitch tenancy + Twitch viewer experience overhaul
- Sign in with Twitch only — no Discord required. Twitch sign-in
for an unlinked viewer provisions a standalone tenant + lands them
on a dedicated `/twitch-bot/dashboard`. Linked viewers still resolve
to their Discord identity.
- Unlinked Twitch viewers earn + play + claim in any guild. Until
now, chatters who hadn't linked Discord were locked out of the bot
economy entirely (no points earning, no chat games, no `!claim`).
Fixed: shadow balances + claim inventory tracked per Twitch user_id;
collapse into the cross-platform balance + Discord-keyed inventory
the moment they link.
- Twitch chat XP with subscriber/VIP/mod multipliers. Standalone
tenants get a per-broadcaster XP curve; hybrid guilds get a parallel
shadow that collapses into the cross-platform XP table at link time.
- Standalone Twitch dashboard at
/twitch-bot/dashboardwith
editable cards for chat games (master + per-game toggles + cooldown +
max bet), claim items (trigger registration with daily/seconds
cooldown), AutoMod / chat settings / blocked terms (via Helix on the
broadcaster's stored OAuth token), and analytics (chat lines/day,
top chatters, command usage, points distribution, top XP earners).
- Auto-join Twitch chat for every standalone tenant via tmi.js
`syncChannels`. Bot needs to be modded in chat for `!ban` / `!timeout`
/ `!clear` / `!slow` / `!subsonly` to work — there's a "mod the bot"
prompt on the standalone dashboard.
- Username-change handling — every Twitch chat message upserts the
viewer into a `twitch_viewers` registry keyed on the stable
`user_id`. Login renames auto-propagate to display + the previous
login goes into a `login_history` JSON array. History never breaks
on rename.
- Upgrade to Hybrid — standalone tenants can link a Discord server
later via a guild-picker flow. Migration runs in a single
transaction: settings, claim items, claim inventory, points balances,
XP, watchlist row, `bot_mode = hybrid` all imported into the chosen
Discord guild. Snapshot saved for rollback.
- Rollback — destination guild's dashboard shows a
"this server was upgraded from a Twitch-only tenant" banner with a
rollback button. Rollback removes only what we INSERTed at upgrade
time (settings, claims, points, watchlist row, bot_mode toggle) and
re-activates the standalone tenant. Discord-side post-upgrade changes
are discarded.
!points/!balance/!topfor unlinked + standalone viewers.
Standalone tenants get a per-broadcaster leaderboard; unlinked
viewers in hybrid guilds see their shadow balance with a friendly
"link to keep these forever" hint.
- Discord/Twitch sign-in switching — sign in with either platform
to access the same dashboard. Twitch-only sessions force Twitch-only
view of every guild they touch; Discord-signed sessions see the
guild's stored bot mode. Logging out + back in via the other
provider now works correctly (was forcing Twitch-only view due to a
column-name typo).
- OAuth flow polish — drop forced consent on returning logins for
both Discord (`prompt=consent` removed) and Twitch (`force_verify`
default flipped to false). Mobile sign-in via Universal Links now
silently re-authorizes for already-consented users.
- Hybrid Twitch tab editor parity — chat games config + claim
trigger editor now also live on the regular Twitch tab in hybrid
mode (previously only on `/twitch-home`). Single canonical POST
endpoint with `return_to` so saves redirect back to wherever you
submitted from.
**Schema additions** (all `IF NOT EXISTS`):
`twitch_viewers`, `twitch_viewer_points`, `twitch_viewer_xp`,
`twitch_standalone_tenants` + 5 standalone children,
`twitch_chat_xp` + 3 analytics counter tables, `twitch_tenant_upgrades`.
Plus PRAGMA-guarded ALTER TABLE additions: `tenancy` +
`twitch_user_id` columns on `web_sessions`, `daily` column on
`claim_items` (was added in v2.8.0; idempotent), `access_token` /
`refresh_token` / `token_expires_at` / `scopes` columns on
`twitch_standalone_tenants`.
v2.9.0
2026-04-27Bot-mode framework + Twitch chat games + chat claim items
- Bot mode (Hybrid / Discord-only / Twitch-only) per guild,
configurable from the Setup wizard with a confirm-on-save bar.
Hybrid is the default and unchanged from before. Discord-only
hides Twitch surfaces from the dashboard and parks the Twitch
runtime. Twitch-only opens a dedicated `/twitch-home` dashboard
with a Twitch-first sidebar (Home → Twitch home, Stream → Live
& chat / Clips, Safety → Moderation) and parks Discord-side
engagement features. Switching modes never deletes saved
configuration.
- Twitch chat games: four stateless point wagers run on linked
chatters in your watched Twitch channels.
!slots <bet>— three reels of 🍒🍋🔔⭐💎 with up to 25× jackpot!roulette <bet>— six-chamber Russian roulette!flip <bet>— coin flip with mild house edge!dice <bet>— 1-6 roll with tiered payouts
Master toggle `twitch_games_enabled` defaults OFF. Each game has
its own toggle (defaults ON when master is on). Per-user-per-game
cooldown plus configurable max bet keep things sustainable.
- Chat claim items: streamer-defined collectibles your chatters
tally with `!claim <trigger>`. Streamer registers triggers on the
Twitch home dashboard (`bum`, `hug`, `wave`, etc.); each chatter
has a per-trigger inventory and the bot replies with their new
total on each claim. Each trigger can have a per-claim seconds
cooldown OR a once-per-day mode that resets at midnight UTC.
- Twitch home dashboard (
/twitch-home) — surfaces existing
Twitch features as a first-class layout instead of as a sub-tab
when in twitch-only mode. KPI strip, quick links into the full
Twitch config, embed editor for the live-stream embed, editable
chat-games config form, and the chat-claims trigger editor all
live here.
- Per-mode sidebar reorganisation: each mode gets a layout
designed for it, not just hidden items from the canonical
sidebar. Twitch-only sees Home / Stream / Safety with three
curated entries; Discord-only sees the canonical sidebar minus
the entire Twitch section; hybrid is unchanged.
- Route-guard middleware: typed/bookmarked URLs that don't apply
to the active mode redirect to the mode's home dashboard, so the
visible sidebar and the actual reachable routes always match.
Setup wizard + bot-mode POST + welcome-preview always reachable.
- Per-mode runtime gates: each subsystem (welcome flow, Discord
XP, Discord points, Twitch points, announcer, EventSub, bridge,
go-live role) gets a one-line `isPlatformActive(guildId, ...)`
gate at its entry point. Hybrid mode returns true everywhere;
single modes skip the opposite platform's runtime work.
- Docs page upgrades: new handbook sections for bot mode, chat
games, and claim items. Settings reference grouped under "Chat
games & claim items" before the broader Twitch group so the new
toggles are easier to find.
- Mod cards mode-aware: structural filters / active warnings /
quick mod actions cards on the Moderation page tag themselves
`data-platform="discord"` and auto-hide in twitch-only mode.
Blocked words + command permissions stay visible because they
apply on Twitch too.
- /clips sidebar highlight fixed: the Clips tab now highlights
correctly when on /clips (was passing `activeTab: "twitch"` and
highlighting the parent tab).
v2.8.0
2026-04-27Public docs page + tickets polish + dashboard refresh
- Public knowledge center at
/docs(also/guide,/help).
Generated from the live command source + `SETTING_SCHEMA` so the
command index and settings reference always match the running build.
Includes a Start-here path, Core workflows, Operator guides (Server
setup / Tickets / Moderation / Community / Twitch / Settings model),
high-use jump-pills, and the full slash-command index.
- Per-category ticket templates. Override the label, intro prompt,
and category-specific mod role per ticket type from the dashboard
Tickets tab. Built-ins still apply when nothing is overridden.
- Ticket SLA tracking. New
tickets_sla_warn_hourssetting (default
24, 0 disables). Open-tickets dashboard table gains an Age column
that turns yellow at half SLA, red at full.
- Bulk ticket actions. Bulk close every open ticket older than N
days through the canonical close path (transcript, archive move,
reopen button if enabled, close DM/rating). Bulk transfer re-tags
open tickets between categories.
- Knowledge base articles. New
kb_articlestable + dashboard
editor on the Tickets tab + ephemeral `/kb search|show|list` slash
command so members can find staff-authored answers before opening
a ticket.
- Reopen workflow (gated OFF). New
tickets_reopen_enabled
setting; when on, the close embed gets a Reopen button that
restores opener access and moves the channel back to the open
Tickets category. Off by default — most teams prefer that closed
means closed.
- Visual refresh. Rebalanced palette away from purple toward
blue/amber on graphite. New top-bar grouping with a cleaner user
chip, KPI strip on hero pages, theme-specific top-bar bg for
light/vaporwave/sakura. Mobile fix: logged-out Discord login CTA
no longer clipped on narrow viewports.
- Density picker (small / medium / large) in the topbar alongside
the theme picker. Persisted in the `goofbot_density` cookie.
Scales root font-size + spacing tokens so every part of the UI
responds to the choice.
- Tickets QoL fixes. KB dashboard editor now loads the article
body (was opening with an empty required textarea). `/ticket setup`
reads `admin_role` / `moderator_role` via `getSettingList` so
multi-role configurations work.
- Dev tooling.
npm run deploy-commandsnow auto-picks.env.dev
if present, falls back to `.env`. Lets dev iterate on slash command
shapes without manually exporting a different token.
v2.7.0
2026-04-24QoL round 2 + auto-build expansion
- Auto-build presets are now comprehensive. Each preset (Streamer /
Community / Gaming / Everything) builds out every channel relevant to
that style of server (tickets, mod-log, audit-log, starboard,
birthdays, boost announces, donations, voice hub, …) and flips the
matching feature flags on. Pick a preset, customize after.
- Auto-create staff roles. When admin / mod roles aren't already
configured AND the bot has Manage Roles, auto-build creates **GoofBot
Admin** + **GoofBot Mod** with sensible default permissions and wires
them into `admin_role` / `moderator_role`. Mod-only categories (Logs,
Tickets) get matching read/write overwrites.
- Welcome card live preview. Community tab → Welcome message now
shows a render of the join card with your accent / template / font
applied. Click 🔄 to refresh after editing branding.
- Send a test Twitch event. Twitch tab → "Test & observe" card
fires a synthetic Follow / Sub / Gift / Raid / Cheer payload through
the same dispatch pipeline as a real webhook so you can verify your
channel + ping role + template wiring without waiting.
- Live EventSub viewer. Same card shows the last 25 EventSub events
that touched your guild, refreshed every 30s. In-memory ring buffer,
cleared on bot restart.
- First-run guided tour. New admins land on the dashboard and get a
5-step modal walking them through auto-build, Twitch, welcome, and
the health-pip system. Dismissed once, gone forever (cookie-backed).
- Reaction-role editor. Existing mappings now have an Edit button
that swaps in an inline emoji+role form, plus a Trash button with a
confirm prompt.
- Reaction-role templates. One-click panels for Pronouns,
Notifications, Color roles, Region, Platform, and Age band — posts
the embed, auto-creates any roles that don't exist, wires the emoji
reactions in one go.
- Floating toast stack with auto-dismiss for save / error feedback,
promoted from inline `.toast` messages.
- Sortable tables. Add
data-sortableto a table and column
headers become click-to-sort (numeric / text auto-detected).
- Mobile sidebar drawer. Sub-1024px viewports get a hamburger
toggle that slides the sidebar in over the main content.
- Per-section reset. Each settings card has a "Reset" button that
clears every key in that section (channels / roles / toggles /
numbers / text) without touching siblings.
- Audit log pagination. 50 rows per page with prev / next, plus
a `data-sortable` table.
- Nuclear setup options (☢). Setup wizard hides two heavy
destructive options behind a `<details>` panel + multi-step
confirms + typed phrase ("WIPE _server_" / "ARCHIVE _server_"):
- Wipe + rebuild deletes every category and channel, then runs
auto-build. Roles untouched. Irreversible.
- Archive + rebuild moves every existing channel under a new
`📦 Archive (read-only)` category locked to admins only, then
runs auto-build. Roles untouched. Reversible.
- Owner-only. Both options are restricted to the actual Discord
server owner (the user whose Discord ID matches `guild.ownerId`).
Dashboard managers and Discord admins cannot trigger them, and the
bot owner has no special override — they still need to be the
server owner of the specific guild. The dashboard hides the panel
entirely from non-owners. Defense-in-depth: the server route does
its own ownership check, the auto-build module independently
re-verifies inside `wipeAllChannels` / `archiveAllChannels`, and
every attempt (allowed or denied) is recorded in the audit log.
v2.6.0
2026-04-25Quality-of-life sweep
- Auto-build wizard. Setup Wizard offers a one-click "Auto-build my
server" button that creates GoofBot's recommended categories,
channels, optional roles, automod defaults, and wires every relevant
guild setting in one shot. Three optional presets (Streamer /
Community / Gaming) tweak which features are auto-enabled.
- Save indicator + leave-page warning. Settings form now shows a
"● Unsaved changes" pip and intercepts navigation away from the page
if you have pending edits.
- Per-section health pips. Each settings card header carries a
green / yellow / red dot — green when ready, yellow when optional
config is missing, red when a hard dependency is unset.
- Show only configured toggle. Hides every setting you haven't
touched so the Discord tab fits one screen.
- Cmd / Ctrl + K focuses the sidebar feature search from any page.
- Audit log quick filters. "My actions in the last 24h", "Mod
actions", "Owner-hub access" buttons on the audit page.
- Live embed-template preview. Embed editor renders a faux-Discord
preview as you type title / description / colour.
- Changelog page. This page —
/changelog— is publicly readable.
v2.5.0
2026-04-24Twitch + Discord feature batch
- Voice-channel XP. Earn XP for time spent in voice (unmuted, not
alone, not bot). New `xp_voice_*` settings.
- Loyalty quests. Daily-login streaks, chat milestones, referral
bonuses on top of the existing points system.
- Server template export / import. Download every guild setting
+ tags + custom commands + role rewards + automod + blocked terms
+ embed templates as JSON, restore into another guild.
- Tournaments. `/tournament create | join | start | report |
bracket | list` — single-elimination with random pairings, byes
auto-resolve, next round auto-generates.
- Hype auto-clip. Twitch chat-velocity detector fires
!clip
when msgs/10s spikes past a threshold.
- Cross-server trust groups. `/trust create | join | configure |
leave | list` — opt-in sharing of blocked-words + automod regex
rules between partnered servers.
- Donation alerts. Ko-fi webhook receiver at
/webhooks/kofi
with optional bonus points to linked tippers.
- Multi-language framework (locked). DeepL / LibreTranslate /
MyMemory translator with DB cache; flipped off at the module level
while we validate quality.
v2.4.0
2026-04-24Owner Hub + security hardening
- Owner Hub at
/dashboard/owner— bot-wide analytics, all-guilds
list, audit log, access-control pane.
- CSRF protection on every POST (auto-injected via layout).
- Audit log with scope filter; every state-change recorded.
- TOTP 2FA step-up for
/dashboard/owner/*and/admin/analytics,
with QR-code enrolment + 8 single-use recovery codes.
- MFA reset via DM approval — owner-initiated reset is gated by
the target's "Approve / Cancel" button in their DM.
- Known-device tracking — owner-tier accounts get a 1-year
device cookie on first verify; new-device sign-ins fire a Discord
DM alert.
- Support access framework.
/goofbot supportlets a guild
owner authorise the support team to access their dashboard until
the ticket closes.
v2.3.0
2026-04-24Twitch alert + utility batch
- EventSub event router. Per-guild-per-type editor for follower /
sub / resub / gift / raid / cheer / channel-points alerts —
channel + ping role + custom message template per event.
- Raid auto-shoutout. Inbound raids fire
!sofor the raider in
Twitch chat with their last-played game.
/twitchmodslash command suite. Discord-side mirror of the
Twitch chat mod commands (timeout / ban / unban / clear / slow /
followermode / subsonly / emoteonly / title / game / raid).
- Live-status badge endpoint.
/live/<login>/badge.svgfor
embedding on a streamer's site.
!markVOD timestamps. Mods / VIPs mark moments during a live
stream; on `stream.offline` the bot posts a clickable list to a
linked Discord channel.
- Clip gallery.
/dashboard/guilds/:id/clipswith auto-post on
new clip + filter by title / channel / clipper.
- Cross-platform giveaway entries.
!enterin Twitch chat joins
a Discord giveaway. Per-giveaway `platforms` choice (both /
discord-only / twitch-only).
- Twitch schedule sync. Helix
/schedulepolled every 6 hours;
15-minute countdowns post per segment, plus a Monday 09:00 UTC
weekly roundup.