Officer hub with jump links
/giveaway lists what’s running, with entry counts and links back to each buried card.
Open giveaways are listed soonest-deadline-first with their entry count and countdown, plus the last few finished ones marked ended or cancelled, each as a link straight to its message. The same /giveaway command serves officers the management hub and everyone else the member hosting hub, so nobody has to remember two commands.
Who can enter, three ways
Everyone, a one-click guild-members preset, or a hand-picked list of roles where holding any one qualifies.
The select offers Everyone, Guild members only (which is just the roles mode pre-filled with your configured guild role), and Specific roles… with a multi-select for up to 25 roles. Holding any one of the listed roles qualifies, which is what officers actually mean when they list several. A roles giveaway with an empty list qualifies nobody rather than everyone — an officer who opened the picker and chose nothing was trying to restrict it — and Post is refused outright in that state, so a card nobody can enter never goes up. If your server has no guild role configured, the preset says so in its own label instead of quietly doing nothing.
Gate entry by attendance or IGN
An optional attendance minimum and an optional linked in-game name, stacked on top of whoever the eligibility lets in.
A minimum attendance is checked after whatever the eligibility already allowed, so "guild members who have actually raided lately" is expressible without a fourth mode; the refusal tells the member what they need and what they have. It is deliberately not offered on a raid raffle, where the roster already is the filter and a second floor would exclude the people it just rewarded. The in-game-name requirement is different: it is about being able to hand the prize over, so it IS applied to a raffle, filtering the roster at snapshot time. It is refused last of all, because "go and run /ign set" is a thirty-second fix and should not mask a role gate the member can do nothing about.
Multi-tier prizes
Type 5m, 2m, 1m and each place pays its own amount, in draw order, marked 🥇🥈🥉 on the card.
Tiers are the prize model, not an add-on: a flat giveaway is simply N equal places, so the escrow total, the credit loop, the refund and a reroll all read one list and cannot disagree about who is owed what. A stored ladder also sets the winner count, so the card can never promise three winners over a two-place prize. Winners take places in draw order, which is the only ordering a member can check against the announcement, and the place is recorded, so a reroll on second place draws another second place rather than another first. One unreadable entry refuses the whole ladder rather than guessing which place was meant.
Recurring rounds
Set 🔁 Repeat to a number of days — up to 90 — and a fresh round posts itself each time the current one draws.
The next round is created as a draft and then posted through the ordinary post-then-open path — exactly what a human does — so recurrence adds no second way for a giveaway to become open, and the escrow, the one-at-a-time cap and the message stamp all still run. Each round points at the original of the series rather than at its predecessor, so a long-running weekly is not a thousand-link chain to walk. A member-funded series the host can no longer afford stops itself, clears its own repeat setting and DMs the host with the shortfall, instead of failing silently on every tick. Repeat can be set or cleared on a live giveaway, since it only concerns future rounds.
Card styling and saved looks
Colour, cover image, title override and the Enter button’s label, emoji and colour — reusable as named presets.
A guild running several giveaways a week in one channel needs to tell them apart at a glance, and a giveaway has no board behind it — the post is the whole surface, which makes styling load-bearing rather than decorative. 🎨 Style sets an embed colour, a button colour, a card title, a button label and emoji, and a cover image (a pasted URL, or an upload via /giveaway image: which is re-hosted onto the post so it survives the source URL expiring). Save look stores that appearance under a name, up to 25 per server, and it appears in a picker on future giveaways. A preset carries appearance only — never a prize, deadline or eligibility.
Fund prizes from a guild bank
Off by default: an officer prize is credited to the winner and the banks are untouched unless you opt in.
By default a guild-funded prize is credited to the winner and the merchant and regear banks are left alone — the same ruling regear credits ship with. /settings → Economy can point giveaway prizes at the merchant or the regear bank instead, and each draw then writes a matching bank movement so the guild’s books stay closed. It is deliberately not floored at the bank balance: refusing a draw because a bank is short would break a promise already printed on the card, and a negative bank is visible and correctable where an unpaid winner is not. Member-funded giveaways never touch a bank — that silver came from a member and the escrow already accounts for it.
Cancel and reroll, both on the record
A cancel pays nobody and refunds the stake; a reroll claws the prize back with a compensating entry, never a deletion.
Cancelling flips the same conditional status the draw uses, refunds a member host’s whole stake inside that flip, strikes the card title through, and keeps the entry rows so "who had entered?" is still answerable afterwards. A reroll stamps the replaced winner’s row rather than deleting it, writes a giveaway_undo against their balance, and draws a replacement from entrants minus every winner the giveaway ever had — so repeated rerolls walk down the pool instead of circling back to someone already replaced. If the pool is exhausted the reroll refuses and nobody new is drawn. The confirmation says in words that a credited prize is being taken back, before the click rather than after.
Edit a live giveaway — the safe half only
Change how it looks, retitle it, or give it longer. The prize, winners and eligibility are fixed once people enter.
✏️ Edit on the manage panel reaches the card’s appearance and the deadline. The deadline is extend-only, enforced in SQL: shortening it would be a way to close entry the moment an unwanted entrant appeared, and ⏱️ Draw now already ends one early, openly and with an announcement. The prize, the silver, the winner count, the eligibility and the odds have no setter that can reach an open row at all, and a test asserts that absence — those are the terms people entered on, and on a member-funded giveaway changing them would invalidate an escrow already taken.