Trap channel
Set up a channel nobody should ever post in, and punish the self-bots and spam accounts that do.
A trap channel is a channel with a standing warning in it and nothing else. Real members read the warning and leave it alone. Automated accounts that post into every channel the moment they join do not, and get punished immediately. It costs nothing to run and catches the kind of account that arrives faster than a moderator can react. Every trap command needs the Manage Guild permission.
Set the trap
Create it
Run ,trap setup to have the bot make a channel for
you, or ,trap setup #channel to designate one you already have. Creating one needs Manage
Channels.
Choose the punishment
Run ,trap action <action>. The default is softban.
Whitelist anyone who must be able to post there
Check it
Run ,trap settings to see the whole configuration
in one embed.
Leave the channel visible. A trap nobody can see is a trap nothing walks into. The bot posts a standing embed in it saying not to send messages, so a member who wanders in has been told.
Threads inside a trap channel count as part of the trap. A message posted in one is treated the same as a message in the channel itself.
Choose what happens to whoever posts
,trap action sets the punishment.
| Action | Bot needs | Effect |
|---|---|---|
softban | Ban Members | Bans with a message purge, then immediately unbans. The default |
ban | Ban Members | Permanent |
kick | Kick Members | They can rejoin |
timeout | Moderate Members | Reversible. Takes an optional duration, one hour by default |
mute | Manage Roles | Needs a mute role set with ,config muterole |
jail | Manage Roles | Needs a jail role set with ,config jailrole |
,trap action timeout 2h sets the action and its duration together.
Every catch is deleted before anything else happens, and the caught message never reaches your snipe
cache or your delete and edit logs. One trap embed goes to the log channel from
,config logchannel.
Staff are not immune
Only the server owner and whitelisted users and roles are immune. An Administrator who is not whitelisted gets caught and punished like anybody else. That is deliberate — permission-based immunity made the trap a silent no-op for every moderator who tried to test it.
It also means you cannot run ,trap commands inside a trap channel. Configure it from somewhere
else, or whitelist your staff role.
Punish repeat offenders harder
,trap escalation on [action] applies a harsher
punishment to anybody caught more than once. It is off by default and escalates to ban unless you
name something else.
Offence counts come from a member's punishment history, so clearing their history with
,punishmenthistory clear resets
their count.
,trap joingate on [days] applies the escalation action
on a member's first catch when their account or their membership is newer than the number of days
you set. It accepts 1 to 90 days and defaults to 7, and it is off by default.
The join gate uses the escalation action whether or not escalation itself is on, and that action is
ban until you change it. ,trap escalation sets it
either way, so ,trap escalation off timeout gives the gate a gentler action while leaving repeat
escalation switched off.
Manage the warning embed
The standing embed in a trap channel is controlled by two separate commands, and they do different things.
,trap counter controls whether the embed exists at all
and what number it shows.
| Argument | Does |
|---|---|
on / off | Shows or hides the embed. off gives you a silent trap with nothing posted in it |
reset | Sets the displayed count back to zero |
set <count> | Corrects the displayed count |
,trap embed controls what it looks like.
| Argument | Does |
|---|---|
view | Returns the current embed code, or the default one if you have not set anything |
set <code> | Replaces it |
remove | Goes back to the default |
resend | Deletes the current embed and posts a fresh one |
Turning the counter off does not delete your custom code, and setting a code does not turn the counter on. A custom code must produce a real embed — plain text alone is refused, because a standing message with no embed cannot be posted.
Four tokens are available in the counter embed on top of the usual ones:
| Token | Becomes |
|---|---|
{trap.counter} | how many accounts the trap has caught |
{trap.action} | the punishment, written out |
{trap.channel} | the trap channel's name, written #name |
{trap.escalation} | the escalation punishment, or nothing when escalation is off |
Tell the person what happened
,trap dm controls the message a caught account receives. It
is on by default.
| Argument | Does |
|---|---|
on / off | Sends or does not send a DM |
invite <on/off> | Includes a single-use rejoin invite, valid for a day, to a channel that is not the trap |
embed <code> | Replaces the default DM with your own embed code |
embed check | Shows the code currently set |
embed reset | Goes back to the default DM |
The DM is sent before a ban or kick, which is the only moment it can still be delivered. A custom DM
code can carry text, an embed and buttons at once, and {action} and {trap.channel} work inside it.
Run more than one trap
,trap channels takes add, remove and list, up to
five channels. Each gets its own warning embed. The channel you named during setup is the primary one
and cannot be removed — re-run ,trap setup to change it,
which resets the list.
The catch count is shared across the whole server, so a catch anywhere updates every trap channel's embed.
,trap randomize on [hours] periodically renames your
trap channels so a fixed name cannot be learned and skipped. It accepts 1 to 168 hours, defaults to
24, is off by default, and needs Manage Channels. Channels the bot cannot rename are left alone.
Review and remove
,trap settings prints the whole configuration.
,trap stats reports what the trap has actually caught —
totals by action, unique accounts, how many were repeats, and the busiest days.
,trap disable removes the trap.
Common issues
A moderator got banned by the trap. Whitelist them or their role with
,trap whitelist add. Permissions never grant
immunity.
My ,trap command did nothing. You ran it inside a trap channel, so the message was deleted
before it could be read as a command. Run it somewhere else.
Someone posted in the trap and nothing happened. The bot could not apply the punishment — usually a missing permission, a member above it in the role hierarchy, or a mute or jail role that is not set. It reports the failure in your log channel rather than recording a catch that never happened.
Nothing is logged. Set a log channel with
,config logchannel.
The warning embed disappeared. Run
,trap embed resend.
My custom embed was refused. A counter embed has to be an actual embed. A code containing only text or only buttons cannot be posted as a standing message.