Levels and experience
Every message written in a channel earns between 15 and 25 XP, drawn at
random. Only one gain is counted per minute and per member: writing ten messages in
a row earns no more than a single one. Bots, direct messages and system messages (joins, pins) earn
nothing.
Going from level L to the next costs 5 × L² + 50 × L + 100 XP. The cost
therefore rises at every tier, and only total XP is stored: the level is derived from it.
The last column assumes an ordinary conversation, at the average gain. It gives the order of
magnitude. Real time depends on how far apart the messages are, since the counter only keeps one
gain per minute.
On every level-up, the bot replies in the channel where the message was written.
The announcement is set from the dashboard: embed or plain text, title, description, colour, plus
the {level} and {xp} variables on top of the usual ones. A channel the bot cannot write
in blocks nothing: the level is earned, only the announcement is dropped.
The module is on by default. Turning it off stops gains and announcements without
erasing anything: the leaderboard stays in the database and comes back intact when it is turned on
again. To fix a particular case, /xp adds, removes or sets a
member's XP; /rank and
/leaderboard show the result.
Sanctions, history and notes
Every sanction issued by the bot is recorded: ban, temporary ban, kick, timeout, warning, and even
the liftings (unban, warning removal). Each one gets its twelve-character code.
The order of operations is not incidental. The DM goes out before the sanction.
After a ban, the bot no longer shares a server with the person and could not write to them. The
record, for its part, comes before the call to Discord so that the code exists; if Discord refuses
the action, the record is rolled back, and no phantom sanction is left in the file.
A temporary ban schedules its own lifting. When it falls due, the bot checks that the ban has not
been re-applied in the meantime by a moderator: if it has, it does not lift it. A permanent
/ban issued during the period cancels the scheduled lifting.
Notes (/note, 25 per sanction) are never shown to the
member concerned: they serve the conversation between moderators, months later, when nobody
remembers the context.
Protection at the door
Three independent mechanisms, which stack or are used on their own:
-
The captcha: on arrival, the member must solve a challenge to get their role.
By default: 3 attempts, 5 minutes, kick on failure. The request
goes by direct message; if the member has closed theirs, the bot creates a temporary
verification channel in the category you designated, visible to them alone, deleted afterwards.
-
Verification through the site: the member clicks a button, finishes on the
site, and finds their role on the way back. The bot grants nothing itself here: it is the site
that checks the identity with Discord, then assigns the role.
-
The anti-raid: it does not target the individual but the flow. Past
8 joins in 10 seconds (default values), it alerts, quarantines or
kicks. The account-age filter lets regulars caught in the wave through.
The quarantine role is what all three have in common: applied on arrival, it
limits what the newcomer can see and do, and is removed once verification has been passed. As long
as it is there, you keep control, and nothing stops you from clearing someone by hand.
Tickets
A panel posted in a channel, 25 kinds of request at most (the limit of a Discord
dropdown), and for each one: its emoji, its colour, its welcome message, its opening form and the
team with access to it. Opening creates a private channel between the requester and that team. On
closing, the conversation is archived as HTML in the archive channel, and the exchange stays readable
once the channel is gone.
Music and DJ roles
Playback relies on a dedicated audio infrastructure. If it is unavailable, the music
commands say so and everything else in the bot keeps working.
The commands that control ongoing playback (/pause, /resume,
/stop, /loop, /volume) are DJs only. A DJ is: the server
owner, an administrator, a member with “Manage Server”, or a member holding a role added by
/dj add. As long as no DJ role is configured, these commands
therefore answer to those three profiles only. Staff roles are a separate list:
they do not grant DJ status.
The read-only commands (/queue, /nowplaying, /lyrics) and
adding tracks (/play) stay open to everyone.
Giveaways
Accepted duration: from 10 seconds to 28 days, written freely
(30m, 1h30m, 2d). Up to 20 running giveaways
and 20 winners per draw.
The draw is always run by the bot, never by the site: only it can check, at the moment of the draw,
that the winners are still on the server and hold the role required at entry. If nobody comes
forward, /giveaway reroll draws again.
Logging
21 kinds of events, split into 5 categories (Messages, Members, Moderation, Voice, Server), each one
switchable on its own. Every category can point at its own channel: moderation on one side,
messages on the other.
Message content is never stored in the database. When a message is deleted, the
bot posts an embed in the channel you designated, and that is all that happens. An action taken by the
bot itself (a ban through /ban) is logged only once, by the moderation log that names
the moderator.
Backups
A backup photographs the structure of the server (roles, channels, permissions)
and hands back a private code, sent by direct message. 3 backups are kept per owner. It
contains no message: it is not a conversation history. The code restores that
structure into the current server, so it can also clone a server by importing it elsewhere.
Temporary voice channels
Joining the trigger channel creates a channel the member owns: they can rename it, restrict access
to it or cap its size. The channel disappears as soon as it empties, with no cleaning up to do.