Level up messages are the most-seen message your leveling bot sends. Templates, placeholders, destination settings, and the mistakes that make them spam.
The level-up message is the most-seen message your leveling bot sends, which means it's also the most customizable-in-practice one. Here's how to move it from default "GG {user}, you're level {level}" to something that actually carries your server's personality, plus the configuration that people get wrong.
Where the message lives
On Kiai, level-up message configuration is in the dashboard's level-up section: pick the destination (a channel, DM-only, or silent so messages don't post but rewards still apply), and set the template.
The default is close to what you expect: {user} reached level {level}!. Functional. Also identical to ten thousand other servers. Since a level-up ping is the widest-reach recurring message your bot sends, spending two minutes rewriting it is the cheapest personality upgrade in your whole setup.
The placeholders that matter
Kiai supports a full placeholder system in level-up messages, and these are the ones you'll actually use:
{user}mentions the member. Keep this; being congratulated anonymously defeats the point.{level}is the new level.{level.old}and{level.new}exist for messages that acknowledge the climb.{prestige}shows a member's prestige, if you use the system (premium feature).{rewards.roles.added}renders the role(s) just granted, so milestone messages can announce what was earned, not just that "a level" happened.{user.globalName}/{user.username}for non-mention formats like "another one for Shadow!"{guild.name}if the message might be screenshotted outward.
Placeholders also power XP streak messages ({streak}, {bonus}), XP drop messages ({xp}), custom message rewards, and nickname rewards, so the syntax is one system you learn once.
Templates that actually work
Three archetypes, depending on your server's tone:
The quiet flex (gaming, dev, professional servers):
{user} made it to level {level}.
No exclamation marks, no confetti. The understatement fits servers where leveling is a background scoreboard.
The shout (community, fan, social servers):
GG {user}! You hit level {level} {rewards.roles.added}
When a reward role drops, the mention of the role does more than the level number. Members screenshot this.
The milestone voice (servers with a lore or identity):
{user} reached level {level}. The elders nod approvingly.
One custom line in your server's register beats clever emoji spam. Write one line, not ten.
What doesn't work, in the order we see most often: emoji walls (three is a personality, twelve is a ticker), fake hype that no member would type, and messages so long they get skim-past in a fast channel.
Destination settings, and the mistake
The destination menu is where the real decision lives:
- Custom channel (like #level-ups) is right for nearly every server. It creates a visible scoreboard-within-a-channel without cluttering conversation.
- DM-only is kind for huge, fast servers where a ping-per-level would be noise. Downsides: no public celebration, and blocked DMs go unseen.
- Silent disables posting but keeps rewards and levels working. Useful during onboarding phases or on servers that use webhooks and dashboards instead.
The common mistake: level-up messages in the channel where they triggered. In busy channels this reads as spam; in slow ones it reads as the only content. Pick a dedicated channel. Bonus: one channel with nothing but level-ups becomes a competitive feed people actually scroll.
If ping volume worries you, the lever that matters is the XP curve, not the message: slower early levels mean fewer pings. Discord's own rate limits and DM blocks also apply, so very large servers tend toward dedicated channels over DMs.
Rewards make the message worth sending
The message is half the system. The other half is the reward slot: a role granted at that level converts "congrats" into something with color and hierarchy. If a milestone also pays out money (Kiai integrates with UnbelievaBoat) or fires a custom message elsewhere, the level-up line can reference it: {rewards.roles.added} announces the role just earned, and {rewards.money} totals whatever landed.
The pattern we'd point newer admins to: milestone levels get a message plus an actual reward; every other level gets the quiet template. Members learn the rhythm, and milestone pings feel earned rather than constant.
Destination choice, compared
| Destination | Best for | Tradeoff |
|---|---|---|
| Dedicated channel | Nearly every server | Creates a feed people can scroll; needs the channel to exist |
| DM only | Very large, fast servers | Private, but blocked DMs go unseen and there's no public celebration |
| Current channel | Tiny, slow servers | Reads as spam the moment activity picks up |
| Silent | Onboarding phases, webhook-heavy setups | No visibility at all; rewards still apply |
Most servers start with a dedicated channel and never move. The failure case is not choosing and letting the bot decide per channel, which produces the "why did my meme get a level up reply" confusion in #general.
Quick answers
Can the message mention the member? Yes, and we recommend it: {user} renders as a Discord mention.
Will it work with proxy systems like PluralKit? Message XP covers proxied messages if you enable it; the level-up message references the member the same way.
Level-up messages without a channel? DM-only or silent both work. Rewards still apply.
Can different levels get different messages? Not per-level branching, but rewards at milestone levels can fire their own custom messages, and the reward-role placeholder lets milestone pings look different in practice. If you need richer branching, webhook rewards fire a signed event you can format however your site wants.
Are the templates premium? Level-up message customization is free. Premium is where the surrounding features go (custom rank card styling, auto leaderboards), not your congratulations.