CommandsDocsPremium
Add to Discord

Documentation

Guides for the commands that do the real work: custom embeds, automated messages, role systems and server security.

Getting started

Invite Kelly with the Administrator permission so every module can manage itself, or use a custom invite and grant permissions per module. Commands work with either prefix , or slash, and you can run them in any channel the bot can see. Most settings can also be managed from the dashboard.

tip
Turn on modules first

Some modules are off until you configure them. If a command says the module is disabled, run its setup subcommand first, like ,welcome set or ,log channel.

Welcomer embeds

A plain welcome message is fine, but an embed is better. Embeds let you control the title, color, thumbnail, fields and footer, and they stay aligned with Discord's UI.

Step 1: pick a channel

Point the welcomer at a channel. If the channel doesn't exist yet, create it first:

,welcome set #welcome

Step 2: choose embed mode

The setup will ask what to send. Choose embed to use the JSON builder. You can switch back to plain text anytime:

,welcome set #welcome embed

Step 3: write the embed

Send the embed as JSON in **one message**, then confirm. This example covers most of what you need:

welcome-embed.json
{
  "title": "Welcome to {server}!",
  "description": "Hey {user.mention}, you're member #{member.count}.\nCheck out <#123456789012345678> to see the rules.",
  "color": "#e879f9",
  "thumbnail": {
    "url": "{user.avatar}"
  },
  "footer": {
    "text": "Joined {time}"
  },
  "fields": [
    {
      "name": "Useful links",
      "value": "[Rules]({server.rules}) • [Support](https://discord.gg/kelly)"
    }
  ]
}

Use {placeholder} tokens to fill in info about the member and server automatically:

PlaceholderReplaced with
{user.mention}Mentions the new member
{user.name}Member's username
{user.tag}Username and discriminator (like kelly#0001)
{user.avatar}Member's avatar URL
{server.name}Your server's name
{server.icon}Your server's icon URL
{member.count}Current member count
{time}The join time, auto-formatted

Step 4: preview before saving

Always preview. It sends a test message to the channel so you can see it exactly as members will:

,welcome preview
,welcome reset

,welcome reset turns the welcomer off. The embed stays saved, so you can turn it back on without rewriting it.

warn
JSON must be valid

One missing comma or quote will reject the whole embed. If you get an error, paste your JSON into a validator and check the embed-json section below.

Goodbye & boost messages

The same builder powers the other automatic messages:

CommandSends when
,goodbye set #channel embedA member leaves
,boost set #channel embedA member boosts the server
,goodbye previewTest the goodbye message
,boost previewTest the boost message

For goodbye, {member.count} reflects the member count after the leave, and {time} is the leave time.

Embed JSON reference

Every field below works in the welcome, goodbye, boost, sticky and timer messages. Anything you leave out is simply omitted.

FieldWhat it does
titleString, max 256 characters. Shown at the top of the embed.
descriptionString, max 4096 characters. Markdown is supported.
urlMakes the title a link to this address.
colorAccent color: hex (#e879f9) or an integer.
timestampISO 8601 date; rendered as a small time in the footer.
image.urlLarge image shown at the bottom of the embed.
thumbnail.urlSmall image shown in the top-right corner.
authorObject: { name, url, icon_url }. Small line above the title.
footerObject: { text, icon_url }. Small line at the bottom.
fieldsArray of { name, value, inline } blocks in the middle.
tip
Line breaks

In JSON, use the two-character sequence \n (backslash n) inside a string to force a new line in the embed.

Sticky messages

A sticky message always stays at the bottom of a channel. If members chat over it, the bot re-posts it. Great for rules, trade info or event announcements.

,stickymessage set #rules **Please read the rules before chatting.**

The content supports the same embed JSON. To use an embed, replace the text with your JSON and set the message in embed mode:

,stickymessage set #rules embed
,stickymessage stop #rules
,stickymessage preview
warn
Keep them limited

Each sticky message costs a small amount of bot traffic. One or two per server is plenty; don't sticky every channel.

Timers

Timers post a message on a repeating schedule. Use them for bump reminders, weekly events or "check the poll" nudges.

,timer set #general "Vote in today's poll!" 2h

Durations accept compact units: 30m, 2h, 1d. List and remove timers with:

,timer list
,timer remove <id>
info
Embed support

Like sticky messages, timers accept embed JSON instead of plain text. Pass the JSON after the interval with --embed.

Logging

Logging is a three-step setup: pick where logs go, pick which modules log, then fine-tune events.

1. Set the channel

,log channel #mod-logs

2. Enable modules

,log modules messages
,log modules members
,log modules moderation

3. Fine-tune events

,log events

,log events opens a menu of every individual event: message edits, role changes, channel updates, joins and more. Toggle just the ones you care about.

tip
Separate channels are better

Point moderation actions at a staff-only channel and member events at a public one. Members seeing every ban can get messy.

Reaction & button roles

Let members assign roles themselves, no moderators needed.

Reaction roles

Post a message first (any channel), then run:

,reactionrole add

The bot asks for the message link, the emoji, and the role to give. Add more emoji/role pairs to the same message by running it again with the same link.

Button roles

,buttonrole add

Same flow, but members click a button instead of reacting. Buttons are clearer and work on mobile, but there's a limit per message, so plan your layout.

,reactionrole list
,buttonrole list
,reactionrole remove <id>
warn
Role placement

Kelly can only assign roles that sit below its own highest role. Move Kelly's role above any roles you want it to hand out.

Autorole

Give every new member a role automatically, like a base role, a "Members" tag, or a muted-by-default role for new accounts.

,autorole add @Member
,autorole list
,autorole remove @Member
warn
Server boost roles

Autorole won't assign server-boost or managed roles (like bot roles). It also can't assign roles above Kelly's top role.

Level rewards

Reward active members with roles at certain levels. First enable leveling, then attach roles:

,levels config
,levels reward add 10 @Active Member
,levels reward add 25 @Regular
,levels reward list
,levels reward remove 25

Tune how fast levels are earned with:

,levels xp
info
Rewards only go up

Roles are given when a member crosses the level. They aren't taken away if the reward is later removed, so clean those up manually if needed.

Auto-mod filters

The ,filter command runs the automated moderation shown on the homepage: blocked words, invites, links, spam and caps. It's built from small pieces you turn on one at a time.

Word filters

,filter word add <banned word>
,filter word list
,filter word remove <banned word>

Link, invite & spam control

,filter invites on
,filter links on
,filter spam on
,filter caps on

Punishment & exceptions

,filter punishment mute
,filter ignore #memes

,filter punishment sets what happens when someone triggers a filter: warn, mute, kick or ban. Strikes build up over time, so repeat offenders escalate automatically.

tip
Whitelist channels

Use ,filter ignore for channels like #memes where caps and spammy content are expected.

Anti-raid & anti-nuke

These two switches protect your server from the loud and the quiet attacks: raids of new accounts, and admin actions that shouldn't happen.

Anti-raid

,antiraid on
,antiraid threshold 10

Anti-raid watches join speed and blocks suspicious accounts like new profiles, no avatar, or mass joins. ,antiraid threshold sets how many joins per minute are allowed before protection kicks in.

Anti-nuke

,antinuke on
,antinuke limit ban 5
,antinuke whitelist @Staff

Anti-nuke limits destructive actions such as bans, kicks and channel deletes, and punishes whoever goes past the limit, even if they have admin permissions. Use ,antinuke whitelist for trusted staff.

warn
Configure before you need it

Don't enable anti-nuke while a raid is already happening. Set your limits in advance so the system has clean data to work from.

Tickets & giveaways

Tickets

,tickets panel

Creates the ticket panel. Members click a button to open a private channel; staff close it when done. Configure which category tickets open in and who can see them with:

,tickets category
,tickets close
,tickets transcript

Giveaways

,giveaway start 4h Nitro
,giveaway end
,giveaway reroll

,giveaway start takes a duration and a prize. Winners are picked when it ends; reroll picks a new winner if the first one was invalid.