Docs/Plugins/Moderation Logs
Moderation Logs
Route 94 action types into the channels you choose, with per-channel subscriptions and custom formats.
The mod log turns everything that happens - moderation actions, message edits and deletions, member joins and leaves, role and channel changes, config edits - into readable log lines in the channels you choose.
plugins:
modlog:
channels:
674638168474915242:
includes: [] # empty = subscribe to everything
701234567890123456:
includes: [MESSAGE_DELETE, MESSAGE_EDIT]
709876543210987654:
excludes: [MESSAGE_DELETE] # everything except
ignored_channels: [665875009507426304]
ignored_users: [] # hide a user's own actions and events about them
ignored_staff: [] # hide a staff member entirely, both directions
new_member_threshold: 900 # flag accounts younger than this (seconds)
Routing
Each channel under channels subscribes with includes (only these) or
excludes (everything but these). Action names are stable identifiers like
MEMBER_BAN, MESSAGE_DELETE, CONFIG_UPDATE - the dashboard's Mod Log
page lists all of them grouped by category with pickers, which beats typing
them.
ignored_channels suppresses noise at the source - nothing posts about
events in those channels (a bot channel's message deletes, for example).
Threads count as the channel they live under, so ignoring a channel also
ignores everything in its threads and forum posts.
The two user lists differ in direction, and picking the right one matters:
ignored_users ignores a user's own actions and the events about them -
their message edits and deletes, their joins and leaves, their nickname
changes, and moderation taken on them. It does not hide things they do
to other users: if they warn someone or delete someone else's message, that
entry is about the other user, so it still logs. Use it for noisy bots and
users whose events you simply don't want in the log.
ignored_staff is for when you want a staff member's work kept out of
the log too. It covers everything ignored_users covers, plus the other
direction: infractions they issue, messages they delete, commands they run,
tag and config edits they make - none of it posts. The actions themselves
still happen and infractions are still recorded against the target; only the
log lines are skipped. Two caveats: bulk purges log a channel-level line
that never names who ran them, and actions taken through Discord's own UI
(a manual ban from the member list, for example) carry no actor for the bot
to match, so those log as they always did.
Both lists take user IDs or role IDs - a role entry covers every member who currently holds that role, so you can stealth your whole mod team with one line instead of maintaining a list of people.
Smart behaviour you get for free
- Debounce - when the bot itself causes an event (a censor deletion, a purge), you get one purposeful log line, not a burst of raw events.
- Attribution - actions carry the moderator, the reason, and the infraction number where relevant.
- Message archives - bulk deletions link a web archive of the removed messages instead of flooding the log.
Native Discord AutoMod
HepBoat also logs Discord's own AutoMod: every rule trigger
(AUTOMOD_ACTION - what matched, what Discord did about it) and every rule
create, update, or delete land in the mod log like any other event, so your
AutoMod activity and your bot activity read as one audit trail.
The dashboard's AutoMod page lists your server's native rules - keyword
lists, mention limits, and the rest - straight from Discord. With the
AUTOMOD_DASH feature you can also create, edit, toggle, and delete rules
from that page; without it the page stays read-only and the logging above
keeps working regardless.
Recently added events
Worth subscribing if your log predates them:
- Unbanned - the bot lifting a ban (command, appeal approval, or the dashboard), with the moderator and reason. The gateway's own Member unbanned event still covers unbans done by hand in Discord.
- Timeout removed by a mod -
!untimeout, separate from the plain Timeout cleared entry that covers a timeout simply expiring. - Lockdown enabled manually / Lockdown lifted manually - the
!raid onand!raid offcommands, naming the moderator.
Per-channel options
Each channel in plugins.modlog.channels takes more than an event list:
mode: PLAINwrites one line per event;mode: PRETTYwrites embeds. The dashboard calls this Plain text / Embeds.richpromotes named actions to an embed inside an otherwise plain channel, for the handful you want to stand out.compacttightens the plain one-liners.timestampsprefixes each entry with the time, rendered intimezone.exclude_categorydrops everything from channels under a category, the category-wide counterpart toignored_channels.
Custom formats
With the MODLOG_CUSTOM_FORMAT feature, any action's rendering can be
overridden per server (custom), in both plain and pretty modes. The
dashboard's format builder starts you from the current format - hit
Customize on any event and the plain one-liner and the full embed load
ready to edit, with a Discord-style preview updating live against sample
data as you type. You control everything the bot can render: the embed's
title, text, author line and icon, thumbnail, color, footer, and up to 25
fields you can rename, reorder, and set inline or full-width. A "Load
default" button per section takes that half back to the shipped format,
and the editor warns about placeholders that would not resolve.
Pick one of your log channels above the event list to browse just the events that channel receives - handy on a busy setup. Formats themselves always apply server-wide.
Overrides save and stage even before the feature is granted; the bot uses the defaults until then.
Commands
| Command | What it does |
|---|---|
/modlog hush |
Silence modlog output in this guild until unhushed. |
/modlog unhush |
Re-enable modlog output after a hush. |