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.
| Command | What it does |
|---|---|
[prefix]giveaway list | Every giveaway still running |
[prefix]giveaway end [message] | End one early and draw now |
[prefix]giveaway reroll [message] | Draw a different winner |
[prefix]giveaway guide | The in-chat explanation of conditions |

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.
| Kind | Written as | Member must have |
|---|---|---|
| Role | role:@VIP | That role |
| Booster | booster | Be boosting the server |
| Text level | level 10 | Reached that level |
| Voice level | voice 5 | Reached that voice level |
| Voice time | voicetime 10h | Spent that long in voice |
| Messages | messages 500 | Sent that many messages |
| Account age | account 30d | An account at least that old |
| Server age | joined 7d | Been 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 @VIP — or 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.
