Discord Manager

Create Discord Giveaways

Server owners can create giveaways from the dashboard for a guided setup, or use slash commands directly in Discord.

Before You Start

Bot Installed

The Discord bot must already be in the server where the giveaway will run.

Account Linked

Your TCM account must be linked to the Discord account that owns or manages the server.

Permission Granted

You need Manage Server, Manage Events, or Administrator permission to create and manage giveaways.

Create From Dashboard

  1. Step 1

    Open Discord Manager

    Sign in with a TCM account linked to Discord, then open the server management dashboard.

  2. Step 2

    Choose A Server

    Only servers where your Discord account can manage the server are shown.

  3. Step 3

    Fill Out Create Giveaway

    Set the prize, channel, end duration or exact date/time, winner count, entry method, optional notifications, optional activity entries, phrase rules, reply behavior, reminder rows, role requirement, optional server tag requirement, bonus weight, and image. You can save the setup as a reusable template or export it as JSON before posting.

  4. Step 4

    Reuse Or Import Settings

    Load a saved template or import a giveaway-template JSON file to duplicate the same settings in another server or reuse the setup with a new end time.

  5. Step 5

    Post The Giveaway

    The bot posts the giveaway embed in the selected Discord channel and starts tracking entries.

Dashboard image uploads are stored in R2 and attached to the Discord giveaway embed as a public image URL.

Entry Methods

Entry methods can be used alone or combined on the dashboard. For slash commands, use `entry_methods` with comma-separated values like `button,reaction,activity,invite,boost`.

Button Entry

Members click Enter Giveaway on the Discord message. Clicking again removes their entry. This is the recommended default.

Reaction Entry

Members react with any configured emoji. Removing a configured reaction removes their entry.

Activity Entry

Members earn weighted entries for messages, replies, comments, and posts. Server owners can use the dashboard to choose a first-X-hours campaign window, a per-member earning cadence such as once every 24 hours, or no activity time limit. Owners can require an attachment when the goal is to encourage image or video posts, and can require a phrase when only campaign messages should count.

Invite Entry

Members earn weighted entries for verified invited joins. The bot needs Manage Server permission to read invite usage.

Boost Entry

Members earn weighted entries when they start boosting the server during an active giveaway. The giveaway can require them to still be boosting when winners are drawn.

Booster Bonus

Active server boosters can receive extra weighted entries from any enabled entry method: button, reaction, activity, invite, or boost.

Notifications

Entry replies can be enabled or disabled. The bot can also DM entrants when they enter, and reminder DMs are sent from scheduled dashboard rows at least 3 days apart.

Slash Commands

/giveaway create prize:<text> duration:<duration>

Creates a giveaway using a relative duration like 1h, 2d, or 1w2d. Optional fields include channel, winners, description, entry_method, entry_methods, emoji, image_url, required_role, require_server_tag, bonus_role, bonus_weight, reply_on_entry, reply_on_reaction, reply_on_invite, reply_on_boost, dm_on_entry, activity_hours, activity_entries, activity_reply, activity_window_reply, activity_require_attachment, activity_phrase, invite_entries, boost_entries, boost_require_active, and booster_bonus_entries.

/giveaway create prize:<text> ends_at:<YYYY-MM-DD HH:mm> ends_timezone:<timezone>

Creates a giveaway at an exact server-owner local time. Example timezone values: America/New_York, Europe/London, Australia/Sydney. Discord displays the final timestamp in each member's local timezone.

/giveaway create prize:<text> entry_method:reaction emoji:<emoji emoji emoji>

Creates a reaction-entry giveaway. Use one or more standard emojis like 🎉 🎁 🔥, or custom Discord emoji mentions like <:name:id> or <a:name:id>. Separate multiple emojis with spaces or commas.

/giveaway create prize:<text> entry_method:activity activity_hours:48 activity_entries:2

Creates an activity giveaway. In the dashboard, activity can be limited to the first X campaign hours, limited so each member earns once every X hours, or left without a time limit. If activity replies are enabled, replies are rate-limited per member so the bot does not answer every qualifying message.

/giveaway create prize:<text> entry_method:activity activity_hours:48 activity_entries:2 activity_require_attachment:true

Creates an activity giveaway where only messages with an attachment, such as an image or video, earn weighted entries.

/giveaway create prize:<text> entry_method:activity activity_hours:24 activity_phrase:<phrase>

Creates an activity giveaway where only messages containing the configured phrase earn entries. Phrase matching is case-insensitive and lenient with punctuation, spacing, and small typos.

/giveaway create prize:<text> entry_methods:button,reaction,activity emoji:<emoji emoji> activity_hours:48

Creates a combined-method giveaway where members can enter by button, reaction, and eligible activity messages.

/giveaway create prize:<text> entry_methods:button,boost boost_entries:5 boost_require_active:true

Creates a boost giveaway where members earn weighted entries when they start boosting the server during the giveaway. The active requirement removes boost-entry credit if they are not still boosting when winners are drawn.

/giveaway create prize:<text> entry_methods:button,reaction booster_bonus_entries:2

Adds extra weighted entries for active server boosters on every entry method. This is separate from the boost entry method.

/giveaway end id:<giveaway_id>

Ends an active giveaway immediately and draws winners.

/giveaway list status:<active|ended|cancelled|all>

Lists recent giveaways in the server with IDs, status, entries, and relative end times. This helps admins migrate from bots that use g.list or /glist.

/giveaway edit id:<giveaway_id> prize:<text> duration:<duration>

Edits an active giveaway. Optional fields mirror creation options, including winners, description, entry methods, emojis, image_url, role requirements, server tag requirement, entry replies, activity entries, activity_phrase, activity_window_reply, and invite entries.

/giveaway delete id:<giveaway_id>

Cancels and deletes an active giveaway without drawing winners. Use end when winners should be drawn immediately.

/giveaway reroll id:<giveaway_id>

Draws replacement winner(s) from the stored entries.

/giveaway export id:<giveaway_id>

Exports entries as weighted JSON.

Supported duration units are `s`, `m`, `h`, `d`, and `w`. Durations can be combined, such as `1w2d`, `3d4h`, or `90m`. For an exact end time, use the dashboard Date & Time option or slash-command `ends_at` with `ends_timezone`.

Local Time Display

Giveaway embeds use Discord timestamps, such as `<t:1785600000:F>` and `<t:1785600000:R>`. Discord automatically shows those times in each member's local timezone.

Weights And Export

Every member gets a base weight of 1. If a configured bonus role applies, that role weight is added to the member entry.

[
  {
    "name": "Alice",
    "weight": 2,
    "color": "#e11d48"
  }
]

Troubleshooting

I cannot see my server

Confirm the bot is in the server, your TCM account is linked to the same Discord account, and you have Manage Server, Manage Events, or Administrator permission.

The giveaway image did not upload

Confirm R2 runtime environment variables are configured for service.discordmanager and that the file is an image.

Reaction entries are not tracked

Confirm the bot has reaction permissions in the channel and the Discord bot is running with reaction intent enabled.

Someone cannot enter

Check whether the giveaway has a required role. The bot verifies role eligibility before storing the entry.