giveaways.

running a fair draw without counting reactions by hand.

starting a giveaway

giveaway posts use a button for entry and a numbered id for every later command. hosts need Discord’s manage server permission. choose the duration, winner count, and complete prize text before posting, then keep the id from havoc’s confirmation.

,giveaway start 2h 1 game key
/giveaway start duration: 1d12h winners: 3 prize: supporter bundle
starting a giveaway commands
commandwhat it doesneeds
/giveaway start <duration> <winners> <prize>post a button-entry giveaway and start its countdownmanage server

durations combine whole numbers with s, m, h, d, orw: 30m, 2h, and 1d12h are valid. spaces, decimals, and bare numbers are not. a giveaway must run for at least 10 seconds and no more than 60 days.

who can enter

anyone who can see the post and use its entry button can try to enter. requirements are checked by havoc, so seeing the button does not guarantee eligibility. add requirements when starting through the slash command’s requirements value, or set them immediately afterward with the dedicated command.

::role
requires the entrant to hold the named Discord role.
::account
requires the Discord account to be at least the supplied duration old.
::server
requires the member to have been in this server for at least the supplied duration.
,giveaway require 12 role @supporter
,giveaway require 12 account 30d
,giveaway require 12 server 7d
,giveaway require 12 role none

age values use the same duration grammar and may be up to 3650 days. use none to remove one requirement. changing a requirement affects who is eligible; it does not create a second giveaway.

warningset requirements before entries arrive

the start command supports role, account-age, and server-time requirements so eligibility can exist from the first moment. if a host adds them later, members may already have pressed the button under the earlier rules.

finding and checking giveaways

listing is open to anyone and shows every active giveaway with prize, winner count, entry count, and time remaining. viewing one id shows its full card. these read-only commands do not require manage server.

finding and checking giveaways commands
commandwhat it doesneeds
/giveaway listlist running or paused giveawaysanyone
/giveaway view <id>show one giveaway and its entry countanyone
,giveaway list
,giveaway view 12
/giveaway view id: 12

use the numeric id shown on the giveaway post and in the list. a message link is not the id. the list is the quickest recovery path when a host has lost the original confirmation.

editing a live giveaway

a host can change exactly three fields: prize, winner count, or remaining time. the new time is parsed as a duration from the edit, rather than as a clock date. requirements have their own command and cannot be passed as an edit field.

editing a live giveaway commands
commandwhat it doesneeds
/giveaway edit <id> prize <value>replace the displayed prize textmanage server
/giveaway edit <id> winners <value>change how many winners will be drawnmanage server
/giveaway edit <id> time <value>replace the time remaining with a durationmanage server
/giveaway require <id> <role|account|server> <value or none>set or clear one eligibility rulemanage server

havoc attempts to refresh the original post after each update. if that message was deleted or the channel is no longer writable, the command can update its stored record while warning that the post could not be updated.

pausing and resuming

pausing freezes the countdown and preserves entries. resuming starts a new deadline using the amount of time that was left; it does not reset the giveaway to its original full duration.

  1. 01

    pause by id

    run ,giveaway pause 12; havoc reports the time left.

  2. 02

    check the state

    ,giveaway list labels it paused and keeps its entry count.

  3. 03

    resume it

    run ,giveaway resume 12 to restart that remaining countdown.

pausing and resuming commands
commandwhat it doesneeds
/giveaway pause <id>stop the countdown without losing entriesmanage server
/giveaway resume <id>restart a paused giveaway’s countdownmanage server

ending, cancelling, and deleting

these operations are deliberately different. ending settles immediately and draws eligible winners. cancelling settles with no winner. deleting removes the stored record and stops its countdown. choose based on whether the giveaway should produce an outcome and retain a record.

ending, cancelling, and deleting commands
commandwhat it doesneeds
/giveaway end <id>end now and draw winnersmanage server
/giveaway cancel <id>finish with no winnersmanage server
/giveaway delete <id>delete the record and stop its countdownmanage server
/giveaway reroll <id> [count]draw replacement winners from a finished giveawaymanage server
dangerdelete is not cancel

use ,giveaway cancel 12 when members need a clear no-winner outcome. use delete only when the record itself should disappear. reroll works on a finished giveaway, so deleting first removes the record it would need.

reroll defaults to the giveaway’s winner count unless a replacement count is supplied. if there are no eligible entries at settlement, havoc announces that the prize goes to nobody rather than selecting an ineligible member.

what happens after a restart

giveaway records, entries, deadlines, and button handling survive a havoc restart. on startup, havoc resyncs active records and settles anything whose deadline passed while it was offline. a paused giveaway remains paused because its remaining time is stored rather than allowed to count down.

settlement and announcement are tracked separately. if havoc saved the draw and stopped before posting the result, startup reclaims that unfinished announcement instead of drawing a second set of winners. transient delivery failures are retried; a deleted channel or one havoc cannot write to cannot receive the result.

notekeep the post writable

persistence cannot overcome Discord permissions. havoc needs to be able to see the giveaway channel, update the original post, and send the outcome. removing that access can leave members with an old-looking post even though the stored giveaway has settled.