serenity

Giveaways

Timed giveaways with entry conditions and weighted bonus entries.

Replace [prefix] with your server's prefix.

Creating One

// Syntax
[prefix]giveaway create [channel]

// Example
;giveaway create #giveaways

Serenity walks you through prize, duration and number of winners, then posts the giveaway with a join button.

CommandWhat it does
[prefix]giveaway listEvery giveaway still running
[prefix]giveaway end [message]End one early and draw now
[prefix]giveaway reroll [message]Draw a different winner
[prefix]giveaway guideThe in-chat explanation of conditions
A running giveaway with prize, end time, entry count and its requirements

Entry Conditions

Conditions decide who may enter at all. Everyone else can still see the giveaway — they're told why they can't join when they press the button.

The Building Blocks

Every condition is one of eight kinds. The numeric ones all mean at least, never exactly.

KindWritten asMember must have
Rolerole:@VIPThat role
BoosterboosterBe boosting the server
Text levellevel 10Reached that level
Voice levelvoice 5Reached that voice level
Voice timevoicetime 10hSpent that long in voice
Messagesmessages 500Sent that many messages
Account ageaccount 30dAn account at least that old
Server agejoined 7dBeen in the server that long

Each kind has short forms — lvl, vl, vt, msgs, accountage, joinage — and the comparison can be written level >= 10, level 10 or level:10, all meaning the same thing. Durations take s, m, h, d and w: voicetime 90m, account 4w.

And, Or, Not

This is the part worth understanding, because it's the difference between a giveaway three people can enter and one everybody can.

Conditions are stored as groups. Inside a group the conditions are alternatives — any one of them is enough. Between groups they all have to hold.

level 20 or voice 10 and role:@VIP

reads as (text level 20 or voice level 10) and has @VIPor widens the current group, and opens a new one. Parentheses are accepted for readability but change nothing; the storage model is already an and-of-ors, and anything deeper wouldn't survive a round trip.

Any condition can be inverted with not or !:

not booster
!role:@Muted

Read your expression back to yourself with "and" as also and "or" as either. role:@Member and role:@Booster is two groups and needs both roles — if you meant either one, it's role:@Member or role:@Booster in a single group.

Setting Them

// Syntax
[prefix]giveaway requirement set [message] [expression]

// Example
;giveaway requirement set [link] level 20 or voice 10 and role:@VIP

set replaces everything with a one-line expression. To build them up one at a time instead:

// Syntax
[prefix]giveaway requirement add [message] [and|or] [condition]

// Example
;giveaway requirement add [link] and level 10
;giveaway requirement add [link] or booster

and starts a new group with that condition, or adds it to the last group.

;giveaway requirement list [link]     // the current expression, in plain english
;giveaway requirement types           // every kind, with its aliases
;giveaway requirement clear [link]    // back to open entry

On the Dashboard

The same conditions are a form on the dashboard, under the server's giveaway page. Instead of an expression you get a dropdown per condition, a role picker, and an Invert condition toggle for not.

Groups are labelled there rather than punctuated — the first group reads Must match one of, every group after it And one of, which is the same logic written out.

Two things are genuinely easier in the browser: picking roles (no ids, no mentions) and seeing an existing set of conditions laid out as groups. Building a giveaway during a raid is faster in chat; auditing one is faster on the dashboard.

The dashboard takes voice time in hours and both age conditions in days, while the command takes a duration like 90m or 4w. They end up as the same stored value — don't be surprised when voicetime 90m comes back as 1.5 in the form.

Bonus Entries

Bonus entries don't gate anything — they hand extra tickets to people who qualify:

// Syntax
[prefix]giveaway bonus [type] [message] [entries] [value]

// Example
;giveaway bonus booster [link] 2
;giveaway bonus level [link] 3 25

Available for role, booster, level, voicelevel and voicetime — the things a member simply holds, since there's nothing to reward about not having a role. Between 1 and 50 extra entries each, and they stack: a booster who's also level 25 carries both.

Bonus entries are on the dashboard as well, next to the conditions, with the same dropdowns.

Conditions shrink the pool, bonus entries tilt it. Gating a giveaway behind level 20 annoys everyone below it; giving level 20s three tickets instead rewards them without shutting anyone out.

;giveaway bonus list [link]
;giveaway bonus clear [link]

messages, level and voicetime conditions read from leveling and activity tracking. On a server where those were only switched on last week, everybody looks brand new — and a condition nobody can meet makes a giveaway nobody can enter.

The giveaway rule builder on the dashboard, with two condition groups and a bonus entry