Skip to main content
Codes Drop Portals is a moderator-run giveaway “campaign”. The bot drops a clickable magic portal in a random channel from a list you choose. The first member to click activates it, others join within a short window, and the bot runs a suspenseful “checking entries → finding cheaters → selecting winner” sequence before handing one random eligible member a UGC item code in a private thread. It keeps dropping at random intervals until every code is claimed. Open Dashboard → Activity → Codes Drop Portals.
This feature is free and requires Moderator access. Only one campaign can run per server at a time.

Lifecycle

1

Paste your codes & pick channels

In the Portal & Codes card, list the drop channels and paste your item codes (one item per line — see below). Configure the embed, timing, eligibility, winner thread, images, and logging in the cards beneath.
2

Press Start Campaign

The bot saves your settings, loads the codes, and begins dropping portals. The Campaign & Codes panel at the top of the view shows the live status, the channels in use, and the codes tracker.
3

Members activate & join

The portal appears in a random channel. The first click opens it; others join within the join window. If nobody clicks, the portal hops to another channel after the move timeout.
4

A winner is drawn

After the suspense steps, the bot applies the role gate and per-member cap, picks a random eligible member, claims one random available code, and delivers it in a private thread (inviting the winner, the server owner, and any extra users you listed). Members who don’t win, are missing the required role (“burned”), or hit the code cap (“smashed”) get a themed private message.
5

Repeat until codes run out

The next portal drops after a random interval — sooner when nobody won. When the last code is claimed the campaign completes automatically.
Use /codes_drop_portals_control in Discord to see the running campaign and stop it with a one-click red button.

Item codes format

Paste one item per line in the Item Codes box. Put the item name first, then a colon, then the codes separated by commas:
Sword of Fire: ABC-123, DEF-456, GHI-789
Magic Hat: JKL-901, MNO-234
Golden Wings: PQR-567
The dashboard shows a live N items · M codes counter and flags problems as you type. Each code may be up to 40 characters; duplicate codes, empty items, and malformed lines are rejected. Codes are loaded into the campaign when you press Start Campaign, and are only ever visible to dashboard managers (in the tracker) and to the winner (in their thread).

Portal & Codes card

Enable
toggle
Master toggle for the feature on this server.
Drop Channels
channel list (required, up to 15)
Portals appear in a random channel from this list and hop between them until activated.
Item Codes
textarea (required)
The items and codes to give away, in Item: code1, code2 format (one item per line). Max 40 characters per code.

Portal Embed

An embed editor (title, message, color, with Random color support) for the “a portal has appeared” message members click. The portal is always sent as an embed — it carries the portal image, footer, colour, and the Activate button — so there is no plain-message option here. The portal’s animated image comes from the Portal Images card, not here.

Timing

Join window (seconds)
number
How long members have to join after the portal is activated.
Move portal after (seconds)
number
If nobody activates the portal in this time, it is deleted and re-posted in another random channel.
Drop interval min / max (minutes)
number
After someone wins, the next portal drops after a random time in this range.
No-winner retry min / max (minutes)
number
When nobody wins, the bot retries sooner using this (usually shorter) range.
Suspense delays (seconds)
number
The “checking entries”, “finding cheaters”, and “selecting winner” steps each pause for the configured number of seconds for dramatic effect.

Eligibility

Require a role to win
toggle + role
When on, members without the chosen role are “burned” and cannot win.
Codes per member
number
The maximum number of codes a single member can win in this campaign. 0 = unlimited. Members who have hit the cap are “smashed”.

Winner Thread

Winner Message
message / embed editor (requires {code})
The title + message posted in the winner’s private thread. Choose Message or Embed mode with the tabs. Supports placeholders — see Placeholders: {user}, {user_name}, {item}, {code}, {server}. {code} is required — it’s how the winner receives their code, so the campaign won’t start without {code} somewhere in the message (the default template is Congrats {user}! 🎉 You made it through the portal! / {item}: {code}). A Jump to the portal link is added automatically, and the campaign’s Portal ID appears in the embed footer (or below the text in message mode).
Thread Channel
channel picker (optional)
The channel the private thread is opened under. Leave empty to use the channel the portal dropped in.
Auto-archive
dropdown
How long the thread stays active before archiving (1 hour, 1 day, 3 days, or 7 days).
Also invite (user IDs)
user-ID list (up to 10)
Extra staff auto-added to every winner thread. The winner and server owner are always added.

Portal Images

The animated image shown for each portal state. Leaving a field blank (or pressing Remove) resets that state to the bundled default. You can paste a direct image URL or pick from your Server Images library.
StateWhen it shows
Portal appearsThe “dust appeared” drop
Portal openedAfter someone activates it
Cooldown / closingSuspense steps + after the draw
WinnerIn the winner’s private thread
Did not winEphemeral shown to members who lost
BurnedMembers missing the required role
SmashedMembers who hit the code cap

Logging

Public drops log channel
channel picker (optional)
Posts a public summary of each drop (winner + item, never the code).
Show next-drop time in public log
toggle (default on)
Adds a “Next portal <in N>” countdown to each public drops-log embed.
Staff mod-log channel
channel picker (optional)
A verbose, staff-only log of each drop including the delivered code, remaining counts, and who was burned/smashed. Every drop is also written to the server’s per-guild log file (with the winner and code) for auditing.
Portal images must be on a public URL. Default portal images are served by the bot’s API host (web_public_url in settings_bot.json, default api.rbxweb.net). Discord cannot fetch localhost, so during local testing the default images render in Discord only if web_public_url points at a publicly reachable host. Custom URL / library images you set yourself work as long as they’re public.

Campaign & Codes panel

The panel at the top of the view is the live control centre for a running campaign:
  • Status — a pill shows Idle, Running, or Paused, alongside the campaign code, start time, and next-drop time. Each campaign has its own code — the first five digits of your server id followed by four random digits (e.g. 887614827) — shown in the dashboard and on the portal embed footer (as Portal ID).
  • Channels in use — which channels drops appear in (shown as Random from #a, #b… when several are selected, or #channel (fixed) for a single one), plus the winner-thread, public drops-log, and staff mod-log channels.
  • Pause Drops / Resume Drops — temporarily halt drops without ending the campaign (the live portal is removed and no new portals drop while paused), then resume dropping the remaining codes. While paused you can’t start a second campaign — resume or end this one first.
  • End Campaign — terminate the campaign entirely. Unclaimed codes stay in the tracker for auditing.

Recent Campaigns

Below the live status is a Recent Campaigns list — the last few campaigns for your server as collapsible items, newest first. The server keeps up to 6 campaigns (the running one plus the five most recent finished ones); older campaigns and their codes are removed automatically when you start a new one. Each item shows the campaign code, its status badge (Running / Paused / Ended / Completed), when it ran, and a claimed / left / total summary with a usage bar. Expand an item to see that campaign’s codes tracker: every code with its status (available / claimed) and who won it, with filter (all / available / claimed) and sort controls. The tracker paginates — pick 10 / 25 / 50 / 100 per page. Ended campaigns stay listed so you can audit which codes went out. Finished campaigns also have a delete (trash) button on their row to remove that record and all of its codes from the history. The currently-running campaign can’t be deleted — end it first.

Presets (Premium)

Saving and filling Codes Drop Portals presets requires Premium tier — the same as Embed Builder and Competition presets. Free servers see the preset bar with an upgrade prompt.
Use Save as Preset (next to Save Settings) to store the current configuration — channels, embed, timing, eligibility, winner thread, images, and logging — as a reusable named preset. The Fill from Preset bar at the top lets you load a saved preset back into the form, then tweak and save or start. Presets store the configuration only, not the item codes (those are pasted fresh per campaign). The number of presets you can save depends on your tier.

Slash commands

/codes_drop_portals_control
moderator
Shows the running campaign (status, campaign code, started time, codes claimed/remaining, next drop) in an ephemeral embed with a red Stop Campaign button. Stopping removes the live portal and ends the campaign; unclaimed codes stay in the tracker.
The bot needs Manage Messages (to move/clear the portal button) and Create Private Threads (to deliver winner codes). These are included in the standard invite permissions — no extra setup is required.