EM MediaGiveaways, docsAdd to server

Everything the bot does.

Add it, then run one. There is no dashboard to configure and no setup step, and the invite asks for four permissions with no privileged intents. A giveaway posts, counts entries on its own, ends on time whether or not the bot was restarted in between, and draws winners who are verified one by one before anything is announced.

/gstart duration:24h winners:2 prize:5x ISP ProxiesThat is a complete giveaway. Everything below is optional.
Concept

One giveaway, two servers.

A giveaway is usually posted in one community on behalf of another. The server it is posted in is the audience. The server it is for is whoever provides the prize and wants the members.

The second one is named with join, as an ordinary invite link. The bot resolves it once when the giveaway starts and turns it into a button beside Enter, carrying the server's real name. That replaces the follow up message somebody used to post underneath by hand, and it is what tells the reporting which brand a giveaway ran for.

Adding require-join turns it into a condition rather than an invitation. That only filters if the bot is also in that server, because Discord tells nobody from the outside who is a member where. When it is not, the bot says so as the giveaway starts instead of pretending the rule applies.

Reference

Commands.

Every command works only inside a server. Anyone with Manage Server can use them, and that can be handed to a role with /gsettings set manager-role.

/gstartStart a giveaway in one line. The fastest way in.
duration
Required. 30s, 10m, 2h, 3d, 1w, or combined like 1d12h.
winners
Required. How many people win, 1 to 20.
prize
Required. What is being given away.
channel
Where to post it. Defaults to the channel you are in.
sponsor
Shown under the prize, as Name | https://link.
join
Invite of the server the giveaway is for. Becomes a button next to Enter.
require-join
Only members of that server may enter.
/gcreateThe same thing as a form, for when there is more to fill in.
channel
Where to post it. Defaults to the channel you are in.
image
Shown at the bottom of the giveaway.
required-role
Only members with this role may enter.
account-age
Minimum age of the Discord account, in days.
member-days
Minimum time in this server, in days.
ping-role
Pinged once when the giveaway starts.
join
Invite of the server the giveaway is for.
require-join
Only members of that server may enter.

The form itself asks for prize, duration, winners, description and sponsor. Everything above is set on the command before you send it.

/glistEvery giveaway currently running in this server, with a link, the deadline and the entry count.

Only you can see the answer.

/gendEnd a giveaway now and draw the winners.
id
Required. Pick it from the list as you type.
/gdeleteCall a giveaway off without drawing anyone.
id
Required. Pick it from the list as you type.

The message is removed. The entries are kept, so the export still works afterwards.

/grerollDraw a replacement, for a winner who never claimed.
id
Required. Pick it from the list as you type.
count
How many replacements to draw. Defaults to one.

Everyone who already won that giveaway is out of the pool. You can also right click the giveaway message, Apps, Reroll Giveaway.

/gexportEntrants and winners as a CSV, for the brand sponsoring the prize.
id
Required. Pick it from the list as you type.

Only you receive the file. IDs stay full length in Excel and names that begin with a formula character are neutralised.

/gsettingsDefaults for this server: show, set and reset.
color
Accent colour of a running giveaway.
button-label
Text on the entry button.
button-emoji
Emoji on the entry button.
ping-role
Default role to ping when a giveaway starts.
manager-role
Role allowed to run giveaways without Manage Server.
invite
Invite used in the claim instructions for winners.
/ghelpThe short version of this page, inside Discord.
/gaboutVersion, uptime and who runs the bot.
Rules

Who may enter.

All optional, all set per giveaway, and all stated on the giveaway itself so nobody presses Enter only to be turned away. Everything except the last one is answered from what Discord already sends with the click, which is why the bot needs no privileged intents.

A role

Only members holding it may enter. Checked again when winners are drawn, so a role removed in the meantime still counts.

Account age

A minimum age for the Discord account itself, in days. The usual answer to accounts made for one giveaway.

Time in the server

A minimum number of days since joining. If Discord does not report a join date, the condition passes rather than turn away a real member.

Membership of another server

The server the giveaway is for. Checked when somebody presses Enter and again when winners are drawn, so leaving in between does not win.

Setup

Four permissions.

View Channel, Send Messages, Embed Links and Read Message History. Nothing else, and no privileged intents at all. Only the first three can stop a giveaway from starting; without the fourth the winner announcement simply sits below the giveaway instead of replying to it.

A private channel is the one case that needs a hand. Discord hides such a channel from the bot completely, and no permission granted on the invite can override that. When it happens the bot says which permission is missing and, where one exists, names a role in that server which already has everything needed in that exact channel. Giving the bot that role is usually the whole fix.

Numbers

Limits.

Duration
30 seconds to 60 days
Winners
1 to 20
Prize
200 characters
Description
1000 characters
Entry data kept for
90 days after the giveaway ends

One giveaway per channel, each with its own entries. The same prize across five communities is five giveaways carrying the same sponsor.

Edge cases

When something fails.

The bot was offline at the deadline

Deadlines live on disk, not in memory. The giveaway ends as soon as the bot is back and says in the announcement that it ran late. Entries are untouched.

Discord fails while drawing

Nothing is announced and nothing is written down. It is retried a minute later. A giveaway never reports that nobody entered when people did.

A winner left the server

Every drawn winner is verified individually before anything is posted. Anyone who left, or who no longer meets a condition, is skipped and the next name is drawn.

The channel was deleted

The draw still happens and the organiser receives the winners by direct message, rather than the giveaway retrying forever against a channel that is gone.

Data

What is stored.

Entering records a Discord user ID, the username at that moment, and the time. Nothing else, no message content, and no privileged intents that would allow reading any. Entries are removed 90 days after a giveaway ends.

Privacy policy