Reference

What it does, and how to use it

Eight commands, one idea underneath: read a blueprint, apply a blueprint. Everything below follows from that.

One idea, four commands

A blueprint describes a server independently of where it came from. The engine applies a blueprint to a target server. That's the whole architecture — and it means cloning, backing up, restoring and syncing are the same code path with different ends plugged in.

CommandBlueprint comes fromGoes to
/cloneLive serverLive server
/backupLive serverJSON file
/restoreJSON fileLive server
/syncLive serverLive server, without deleting

All commands

/clone

Copies a server onto another. Confirmation dialog, live progress bar, cancel button, result report. The main event.

/sync

Adds only what is missing. Deletes nothing, overwrites no settings — for keeping a second server in step with the first.

/backup

Hands you the whole server as one file. Auto-compressed above 1 MB so it fits Discord's upload limit.

/restore

Applies a backup file to a server. The source server does not need to exist any more.

/preview

Dry run. Shows what would be copied, what would be deleted and how long it should take. Changes nothing.

/servers

Every server the bot can reach, with IDs and a permission check at a glance — 👑 ready, ⚠️ not an administrator.

/status

Running jobs with their stage and progress, plus any unfinished run waiting to be resumed.

/help

The short version of this page, right inside Discord.

Options for /clone

OptionDefaultWhat it does
sourcefrom .envSource server — picked from a suggestion list, never typed
targetfrom .envTarget server — same suggestion list
wipe_targetTrueClear the target before building
resumeFalseContinue an interrupted run instead of starting over
rolesTrueCopy roles
channelsTrueCopy categories and channels
emojisTrueCopy emojis
stickersTrueCopy stickers
settingsTrueCopy name, icon, banner and base settings
messages intent0Rebuild this many messages per channel via webhook
member_roles intentFalseReassign roles to members present on both servers
⚠️

Options marked intent need a privileged gateway intent switched on in the Developer Portal and in your .env. See optional extras.

What gets copied

Server

  • Name, icon, banner, splash, description
  • Verification level, content filter, notifications
  • AFK channel and timeout
  • System channel including its flags

Roles

  • Every permission bit, exactly
  • Colour, hoist, mentionable, role icon
  • Correct order — built top-down
  • The @everyone permissions

Channels

  • Categories with their overrides
  • Text: topic, slowmode, NSFW, auto-archive, announcement mode
  • Voice: bitrate, user limit, region, video quality
  • Stage channels and forums including tags

Extras

  • Emojis and stickers
  • Per-channel role permission overrides
  • Messages, optionally, as a webhook rebuild
  • Role assignments, optionally
🎚️

Voice bitrate follows the target. If the destination server is boosted, quality is preserved; if it is not, the bitrate is capped cleanly instead of failing.

What can't be copied

Limits of the Discord API, not of this bot. Anything claiming otherwise is worth a second look.

  • Members. People have to join the new server themselves.
  • Real messages. Only a webhook rebuild — without reactions, threads or edit history.
  • Bots and webhooks. They have to be re-invited or recreated.
  • Boosts, vanity URL, audit log. Tied to the original server.
  • Roles above the bot's own role. Discord forbids this outright.

Backup & restore

/backup writes the complete blueprint to one file. Below 1 MB it stays readable JSON; above that it is gzip-compressed so it stays under Discord's upload limit. A copy is also saved to the backups/ folder next to the bot.

discord
# Full backup, images included
/backup

# Structure only — much smaller, no icons or emojis
/backup include_images:False

# Rebuild from a file, on any server
/restore file:<your-backup.esc.json> target:<server>
🔐

A backup contains your server's entire permission structure. Treat the file as carefully as you would access to the server itself.

Sync instead of clone

/sync matches by name, creates only what is missing, and never deletes or overwrites — for topping up a second server after changing the first.

/clone/sync
Deletes in targetYes, if wipe_targetNever
Existing objectsRebuiltReused
Server settingsOverwrittenLeft alone
ResultExact copyTarget plus what was missing

Resume after an interruption

Every created object is written to state/<target-id>.json at once. If a run stops, that checkpoint lets the next attempt skip ahead.

discord
# See whether anything is waiting
/status

# Continue exactly where it stopped
/clone resume:True
  • Objects that still exist are skipped.
  • Objects deleted in the meantime are recreated.
  • The target is never wiped again — that would destroy exactly what the first run achieved.
  • Checkpoints expire after 24 hours.

Safety rails

Same server refused

If source and target match, the bot stops before writing anything. That mistake would delete the original.

Permissions checked first

Rights are verified before the first deletion, not after. Includes a warning when the bot's role sits too low.

Only you can confirm

Buttons respond solely to the person who ran the command, and the prompt expires after 60 seconds.

One job per server

A second clone into the same target is rejected while the first is still running.

Access is restricted

Only the IDs in OWNER_IDS, and only administrators of the target server, can start anything.

No pings on rebuild

Rebuilt messages have mass mentions defused and mentions disabled — nobody gets notified twice.

Configuration

Everything lives in a local .env file. Nothing is stored anywhere else, and nothing leaves your machine except calls to Discord.

VariableDefaultMeaning
DISCORD_TOKENRequired. Your bot token
OWNER_IDSemptyWho may use the bot. Empty means any server admin
DEV_GUILD_IDemptyRegister commands on one server instantly instead of globally
SOURCE_GUILD_IDemptyDefault source for /clone
TARGET_GUILD_IDemptyDefault target for /clone
CLONE_DELAY0.6Starting pause between API calls; adapts on its own
EMBED_COLOR0x5865F2Accent colour of the embeds
LOG_LEVELINFODEBUG, INFO, WARNING, ERROR
ENABLE_MESSAGE_CLONEfalseUnlocks messages — needs Message Content intent
ENABLE_MEMBER_ROLESfalseUnlocks member_roles — needs Server Members intent

Set it up in fifteen minutes

The Developer Portal, the invite link, and the setting almost everybody forgets.