This feature is free and requires Moderator access. Only one campaign can run per server at a time.
Lifecycle
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.
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.
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.
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.
/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: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
Master toggle for the feature on this server.
Portals appear in a random channel from this list and hop between them until activated.
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
How long members have to join after the portal is activated.
If nobody activates the portal in this time, it is deleted and re-posted in another random channel.
After someone wins, the next portal drops after a random time in this range.
When nobody wins, the bot retries sooner using this (usually shorter) range.
The “checking entries”, “finding cheaters”, and “selecting winner” steps each pause for the configured number of seconds for dramatic effect.
Eligibility
When on, members without the chosen role are “burned” and cannot win.
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
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).The channel the private thread is opened under. Leave empty to use the channel the portal dropped in.
How long the thread stays active before archiving (1 hour, 1 day, 3 days, or 7 days).
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.| State | When it shows |
|---|---|
| Portal appears | The “dust appeared” drop |
| Portal opened | After someone activates it |
| Cooldown / closing | Suspense steps + after the draw |
| Winner | In the winner’s private thread |
| Did not win | Ephemeral shown to members who lost |
| Burned | Members missing the required role |
| Smashed | Members who hit the code cap |
Logging
Posts a public summary of each drop (winner + item, never the code).
Adds a “Next portal <in N>” countdown to each public drops-log embed.
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 aclaimed / 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.
Slash commands
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.