Skip to main content
Righteous

Logging

Route messages, members, roles, channels, voice, invites, emojis and moderation events to their own channels, and the one rule that trips everyone up.

Righteous can log eight categories of server activity (messages, members, roles, channels, voice, invites, emojis & stickers, and moderation) each to its own channel, each independently narrowed to specific events. ,log (and /log) is the whole surface, and it needs Administrator: the permission is declared once on the parent command and covers every subcommand under it.

An empty event list means EVERY event, not none

This is the single most counter-intuitive line in the whole feature, so it goes first: point a category at a channel with ,log add and stop there, and you get full coverage of that category, not silence. Narrowing which events post is something you opt into with ,log events: until you do, everything logs. It's a deliberate exception to how gates normally work here: most things fail closed by default, this one fails open on purpose, because "add a channel and get nothing" would look like the feature was broken.

Route a category to a channel

Syntax

,log add <#channel> [categories...]

Example

,log add #mod-log members roles

Naming no categories routes every category to that channel. Categories are: messages, members, roles, channels, voice, invites, emojis, moderation. Voice is the chattiest of the eight (every join, leave, move, mute, deafen and stream change goes through it) so it's usually the first one worth narrowing.

Syntax

,log remove <#channel> [categories...]

Example

,log remove #mod-log

Naming no categories un-routes the channel entirely: every category currently pointed at it stops. Naming specific categories clears only those, and only where they actually point at that channel; a category routed elsewhere is left alone.

Narrow what a category logs

Syntax

,log events <category> [event] [on|off]

Example

,log events voice voicejoin off

Run with just a category to see its current sub-events and which are on. Toggle a single event off and Righteous quietly expands the stored list to "everything except that one" behind the scenes: you never see the mechanics, but it's why turning the last remaining event back on collapses the list back down to "all events" rather than leaving an equivalent-but-explicit list sitting there.

Tip

Voice is the worked example for this: turn off voicejoin and voiceleave (by far the noisiest pair) and keep voicemove, voicemute, voicedeafen and voicestream logging normally.

See and clear your routing

Syntax

,log list

One line per category: which channel it's routed to, how many of its events are enabled, and whether webhook delivery is on.

Syntax

,log reset

Clears every category, channel and ignore entry at once. There's no per-category form of this: for one category, use ,log remove instead.

Exempt a channel, role or member

Syntax

,log ignore <member|channel|role>

Example

,log ignore #staff-chat

Syntax

,log ignore list

Syntax

,log ignore remove <target>

Example

,log ignore remove #staff-chat

The ignore list is guild-wide, not per-category: one list suppresses a channel, member or role from every logged category at once, not just the one you were looking at when you added it. It's the only piece of this feature that fails open by design in the other direction too: an ignore entry only ever suppresses something a reader could already see, so an uncertain match errs toward "not ignored" rather than silently dropping a log line that should have gone out.

Turn on webhook delivery

Syntax

,log webhook <#channel|default> <on|off|name|avatar> [value]

Example

,log webhook #mod-log on

Delivering through a webhook instead of a plain bot message is free: ,log webhook #channel on reuses one webhook per channel even when several categories share it. Customizing that webhook's name or avatar is Server Premium, checked at the moment you try to set one rather than declared up front, because the same command handles both the free toggle and the paid customization.

Syntax

,log webhook default <name|avatar> <value>

Example

,log webhook default name Righteous Logs

The word default targets a server-wide fallback identity rather than one channel: set with Server Premium the same way. Identity resolves in this order for any given category: its own name/avatar override, if it has one; then the server-wide default, if that's set; then the webhook's own built-in identity if neither is. Setting a name doesn't blank out the avatar, and vice versa: they're two independent overrides, not one "custom identity" toggle.

Restore a deleted role or channel

Every logged role or channel deletion carries a Restore button on its log line, good for one click, ever, per snapshot. It's the most heavily gated control in the system for exactly that reason:

  • The click is a race-safe one-time claim: two admins hitting Restore on the same deletion within the same second cannot both succeed. Whoever loses the race is simply told someone beat them to it.
  • It's permission-checked against fake permissions the same way every other role/channel action here is, and for a role restore, checked against the role's position at the moment it was deleted: not against anything currently in the server, since the role doesn't exist yet to compare.
  • On failure (missing permission, failed hierarchy check, the bot itself lacking the needed permission) the claim is released, so a legitimate admin coming along after a refused attempt can still use the button.

Restore recreates the role or channel with its recorded settings: name, colour, permissions, topic, overwrites, and so on. It does not restore what the object contained: a restored role gets nobody's membership back, and a restored channel starts with no message history. It's a fresh object built from the old settings, not the same object come back to life.

Deleting a logged channel clears its routing, not its row

If you delete a channel a category is logging to, that category's channel pointer clears. Logging to it simply stops, but its own settings (which sub-events are on, any webhook name override) aren't lost. Point ,log add back at a new channel and those settings are still there, rather than needing to be reconfigured from scratch.

Open the config panel

Syntax

,log panel

A dedicated panel with its own page per category, an Overview and a Webhooks page, everything the commands above can do without typing subcommand names. It's not a page bolted onto the general ,config panel: logging has too many categories and sub-event toggles to fit inside that panel's page budget.

Common issues

A category I only pointed at a channel is logging everything, including things I didn't want. By design. See the callout at the top. Use ,log events to narrow it.

Webhook delivery works, but the name/avatar I set never shows up. That half is Server Premium; the toggle itself is free but the customization isn't. ,donate covers what unlocks it.

I deleted the channel a category logged to, and now nothing posts, but ,log list still shows the category configured. That's expected: the row survives, only the routing clears. Run ,log add again pointing it somewhere new.

Restore says someone already used it, but I don't see who. It's a one-time claim per snapshot; once anyone succeeds, or a legitimate attempt fails and releases the claim to nobody, the next click either confirms it's done or works. Check the log line's own text for who restored it.

Nothing here fixed it. The shared common issues page works the same ground from the symptom end.