A work in progress, in the best way

Freshly scrambled.

What’s here, what’s changing, and what’s still on the horizon.

Latest

September 2026

More test coverage: lockdown, purge, slowmode.

Three moderation utility commands — /lockdown, /unlock, /purge, and /slowmode — had zero test coverage at their command-dispatch layer despite being live in production for a while. All four now have real tests: permission refusal, single-channel vs. whole-server lockdown scope, a channel the bot can't manage surfacing as a skipped entry instead of silently vanishing, purge's user-filtered pagination, and slowmode targeting an explicit channel over the current one. Caught a real bug in the new test fixtures themselves along the way (a fake channel missing its .guild back-reference) before it could mask anything — no behavior changed in the bot itself.

Update

September 2026

Staff notes.

Context for the next staff member, not just you.

  • /note add <user> <text> attaches a private note to a member — nothing about it reaches them, and unlike /warn it never appears in /modlogs, since a note isn't a punishment.
  • /note list <user> shows everything recorded, newest first, with who wrote each one and when. /note remove <id> deletes one.
  • No dashboard page — same as /remind and /schedule, the command surface is the whole feature.
Update

September 2026

More test coverage: /role.

/role's own command layer had no tests — only the underlying grant/remove functions did. This is the actual command that carries the privilege-escalation fix from earlier this session (a moderator with only Manage Roles can't use the bot's own authority to grant a role above their own), now confirmed through the real command dispatch, not just in isolation. No behavior changed.

Update

September 2026

Sticky messages.

Always the last thing said.

  • Add one from the dashboard — a channel and a message. As new messages come in, the bot deletes its old post and reposts the same text at the bottom, so it's always the most recent thing in the channel.
  • Throttled to once every 10 seconds per channel, so a busy conversation doesn't trigger a delete-and-repost on every single message.
  • No new bot permissions needed beyond what it already has to send and delete in that channel.
Update

September 2026

More test coverage: giveaways.

/giveaway's command layer — starting, ending, rerolling, the ban list, and entering via the button — had no tests of its own before this, only the underlying data functions. The real access-control path now has one specifically: a member who enters, leaves, then gets giveaway-banned is confirmed refused the next time they try to click Enter. No behavior changed.

Update

September 2026

Scheduled messages.

Write it once, let it post itself.

  • /schedule create — pick a channel, how long until it first posts, and optionally a daily or weekly repeat.
  • /schedule list shows everything still active with its ID; /schedule cancel <id> stops one.
  • A repeating message that fires a little late never drifts — it advances from its own scheduled time, not from whenever the check happened to run.
  • Different from /remind: this posts to a channel for everyone, not a personal ping, and it can repeat.
Update

September 2026

Birthdays.

A small thing, remembered automatically.

  • /birthday set <month> <day> — no year collected, just enough to know when to announce it.
  • Turn on announcements from the dashboard and pick a channel; the bot posts there on the day, on its own.
  • /birthday upcoming shows who's next, soonest first. /birthday remove clears yours.
Update

September 2026

Minimum account age.

Raid protection's account-age check only looks at joiners caught in an already-detected burst. This is the unconditional version.

  • Set a minimum age; anyone whose account is younger gets kicked or banned the moment they join — no raid needs to be happening.
  • Optional log channel gets a line every time it triggers, with the account's exact age.
  • A quiet, standing defense against alts and ban evasion, not just a burst-of-joins reaction.
Update

September 2026

Temp voice channels.

"Join to Create," for servers that want it.

  • Pick a hub voice channel from the dashboard — joining it spawns a fresh voice channel, named from a template, and moves the member straight into it.
  • Deleted automatically the instant it's empty again. Only channels this feature created are ever touched — an empty channel it didn't make is left alone, always.
  • Choose a template with {username} and {server}, and optionally a specific category for new channels instead of defaulting to the hub's own.
Update

September 2026

Reminders.

Tell it once, forget about it until it matters.

  • /remind create <duration> <text> — the bot pings you back in the same channel once the duration is up.
  • /remind list shows what's still coming; /remind cancel <id> calls one off.
  • Survives a bot restart — reminders are stored, not held in memory, and checked every 30 seconds.
  • Capped at 25 upcoming reminders per person and a maximum of 1 year out, so the list stays a list.
Update

September 2026

A general link filter, and a real bug fix underneath it.

New: AutoMod now has a Links filter, separate from Invite links — blocks any URL, not just Discord invites, with its own thresholds and escalation. Configure it from AutoMod → Links or /filters link. An invite link still gets reported as an invite, not a link, when both are on.

Bug fix, found while building it: the database has required the mass-mention filter's offense records to be tagged mass_mention since this table was first created — but the filter has always written massMention instead. Every mass-mention offense has been silently failing to record, which means that filter's mute/kick/ban escalation has never actually been able to fire in production; only the message deletion itself ever worked. Fixed and verified directly against the live database.

Update

September 2026

More test coverage: command permissions.

/permissions set, reset, and list govern which Discord permission every overridable command requires in a server — including the Administrator-only gate on changing that in the first place. That gate, and all three subcommands, now have tests: the admin check, writing and clearing an override, the "nothing customized yet" and "already at default" replies, and confirming one server's overrides never leak into another's list.

Update

September 2026

Test coverage, not a new feature.

Follow-through on something flagged last update: /mute, /tempmute, /unmute, /kick, /ban, /tempban, /unban, and /modlogs — the entire manual moderation suite besides /warn — had zero test coverage anywhere in the codebase. All eight now do: success paths, parsed-duration edge cases, hierarchy failures, and the "already resolved" cases (unbanning someone who isn't banned, unmuting someone already unmuted). No behavior changed — this is entirely about catching the next regression before it ships, not after.

Update

September 2026

Warning escalation.

Enough warnings should mean something happens on its own.

  • Add thresholds — a warning count paired with mute, kick, or ban — from the new Warning escalation dashboard page.
  • Reach that exact /warn count and the action fires automatically, logged as its own case with the same appeal button every other punishment gets.
  • Separate from AutoMod's own detection ladder — this only ever counts deliberate staff /warn commands, so the two systems never double up on the same member.
  • While building this, found the manual moderation command suite (/warn, /mute, /kick, /ban, and the rest) had zero test coverage anywhere in the codebase — a real, pre-existing gap. The new escalation logic is now fully tested; closing the rest of that gap is a larger job for its own pass.
Update

September 2026

Nicknames, checked too.

One rule set, applied everywhere someone can put text.

  • Turn on "Check nicknames too" on the Word filter page and the same blocked words and phrases — the same disguised-text matching, the same exempt roles — apply to nicknames, not just messages.
  • A matching nickname is cleared, not replaced with something else. No new rule list to keep in sync with the one you already have.
Update

September 2026

This page stopped being a wall of text.

Enough updates have shipped that this page itself became the problem — an 8,000-pixel scroll of nearly identical "Update" entries before you could reach anything else on the site. The six most recent now show by default; everything older is one click away behind "Show older updates," not gone.

Update

September 2026

Avatar, userinfo, serverinfo.

Three everyday lookups that were surprisingly the last ones missing.

  • /avatar [user] — a full-size view, defaults to yourself.
  • /userinfo [user] — account age, server join date, and roles.
  • /serverinfo — member count, boost tier, role and channel counts.

Open to everyone, nothing to configure.

Update

September 2026

Sticky roles.

Leaving shouldn't mean losing everything.

  • Turn it on and a member's roles are remembered the moment they leave, then restored automatically the moment they rejoin.
  • Pick roles that should never stick — a boost role Discord already manages, or anything else that shouldn't just reappear on its own.
  • Caught by the new docs-coverage test before it even shipped: this page had no guide section for about five minutes of this build.
Update

September 2026

Four documentation gaps closed, and a test that keeps them closed.

AutoMod (as a whole), Long-message review, Member notices, and the Appeals dashboard page all had live dashboard settings with zero coverage in the guides — some predating this week entirely. All four now have real sections.

  • More than a one-time fix: a new test now fails the build if any dashboard plugin ships without a matching docs section, the same way an earlier test now catches a command missing from the public command directory. Both were real gaps that slipped through silently before either test existed.
Update

September 2026

Plugin cards get a pulse.

A small, concrete piece of the visual pass: the plugin grid — the most-clicked part of the entire dashboard — had no hover state at all, unlike the marketing page's feature cards or the server picker. It now lifts and its border warms on hover, the same treatment those already had, so the whole dashboard feels like one consistent interface instead of two.

Update

September 2026

Snipe and AFK.

Two classics, both instant — nothing to configure.

  • /snipe [channel] shows the last deleted message there — author, content, and how long ago. Requires Manage Messages by default: showing anyone the content of a message staff just removed would work against the point of removing it.
  • /afk [reason] marks you away; anyone who mentions you gets told why, and it clears itself the instant you send another message — nothing to turn back off by hand.
Update

September 2026

Boost announcements.

Give boosters the moment they deserve.

  • Turn it on, pick a channel, and write the message — the same {user}/{username}/{server} placeholders as welcome messages.
  • Fires the instant someone starts boosting, not on renewal, so it never repeats for the same ongoing boost.
Planned

Room to grow.

Premium features and a dedicated support portal are planned for a later release. There are no paid plans or checkout flows available yet. We’ll publish the details here when they are ready.