ZT Plush logoZT Plush

Documentation

Your guide to ZT Plush — every command, every variable, every detail you'll need. Last updated for v3.1.0.

Getting Started

Three steps to get ZT Plush running in your server:

  1. Click the invite link and choose your server.
  2. Authorize the requested permissions. The bot needs Manage Roles, Manage Messages, Send Messages, Embed Links, Add Reactions, and a few more — it asks only for what it actually uses.
  3. In any channel, run /info for a full feature overview, or /help for category-organized commands.
First-time tip: The Server Owner should run zt!setrole <tier> @Role to assign staff tiers. Tiers are helper, mod, senior, and owner. This unlocks the bot's permission system across every feature.

Explanation: How Things Work

Before diving into individual features, here's how the recurring patterns work across the bot. Three things show up everywhere: variables, permission tiers, and defaults.

Variables (the curly braces)

Many features let you customize message templates. Anywhere you see {like_this} in a template, the bot replaces it with real values when the message goes out. Welcome messages, scheduled messages, giveaway embeds, and broadcasts all support them.

Common variables — available in most templates that involve a member or guild:

{user}mentions the user (e.g. @SomeName)
{user.tag}username#discriminator format
{user.name}just the username, no mention
{user.id}the Discord user ID
{server}the server name
{server.id}the server ID
{membercount}current member count
{date}today's date in the server's locale
{time}current time

Feature-specific variables (like {prize} for giveaways or {ends} for scheduled events) are documented in each feature section. If a variable doesn't apply to the message you're writing — say, {user} in a scheduled message that fires to a channel without a specific recipient — it just gets left as text. The bot won't crash.

Permission tiers

Every command lists a required tier. Everyone means any member. Helper+ means the Helper tier or higher (so Helper, Mod, Senior, and Owner). See the Permission Tiers section for full details.

Defaults vs. customization

Many features (welcome messages, giveaway embeds, AutoMod responses) work out of the box with sensible defaults. Customization is optional — leave a field blank in the dashboard and the bot falls back to the default. That makes it safe to experiment: you can't accidentally “break” a feature by leaving it half-configured.

About Plush+ — Some features have a free tier (works for any server) and a Plush+ tier (unlocks higher limits, more slots, exclusive features). Plush+ is a one-time $13.99 per server, no subscription, applies forever to that server.

Permission Tiers

ZT Plush has four staff tiers plus the Server Owner. Each tier has clearly defined responsibilities:

Helper+

Read-only access to mod tools. Can view warnings and use /messagelog snipe.

Mod+

Day-to-day moderation. Run giveaways, toggle emoji/sticker policy, view AutoMod settings, all moderation actions.

Senior+

Server configuration. Configure tickets, welcome messages, reaction roles, AutoMod tweaks, music settings, stats channels, verification, scheduled messages.

Server Owner

Bot identity and sensitive settings. Assign staff tiers, control mod log, toggle AutoMod, toggle Message Logger, sync commands, unban users.

Setting up your staff team: Run zt!setrole <tier> @Role to map a Discord role to a tier. Any member with that role inherits the tier's permissions across the entire bot. One role can be mapped to one tier; higher tiers automatically include lower-tier permissions.

Moderation Commands

Severity-based warnings with auto-escalation. Warnings have three severities: low, medium, high. The bot automatically escalates based on a member's total active warnings.

CommandDescription
zt!warn @user low|medium|high <reason>Issue a warning
zt!warnings @userView a member's warnings
zt!unwarn <id>Low: Mod+, Med: Senior+, High: Owner
zt!timeout @user <duration> <reason>Up to 7d for Mod+, 28d for Senior+
zt!untimeout @userRemove timeout
zt!kick @user <reason>Kick member
zt!ban @user <reason>Ban member
zt!unban <user_id>Unban (irreversible — Owner only)

Auto-escalation thresholds trigger when total active warnings reach: 3 → automatic timeout, 6 → kick, 8 → ban. Low/medium severity warnings clear when a member leaves; high severity persists across rejoins (capped at 5).

Aurora AutoMod

Detects and removes phishing/scam links automatically. Uses a curated Discord-targeted list plus the URLhaus public threat-intel feed (~14,000 domains, refreshed every 12 hours).

Default escalation

Per member, within 24 hours of the first offense:

  • 1st offense: Delete + high-severity warning + DM offender + ping staff
  • 2nd offense: Delete + high warning + 1-hour timeout
  • 3rd offense: Delete + 24-hour timeout
  • 4th+ offense: Delete + ban

Allowlist & Blocklist (v3.1.0)

Server-specific overrides for the bot's threat detection. Configured from the dashboard's AutoMod page:

  • Allowlist — domains the bot will never flag, even if they show up in URLhaus. Use for GIF hosts, your own domain, legit short links.
  • Blocklist — domains the bot will always flag, regardless of any threat feed. Use for scammers targeting your community that aren't in URLhaus yet.

Both lists support leading-position wildcards: *.example.com matches all subdomains (e.g. sub.example.com) but not the bare example.com itself. No caps on either list — safety doesn't have a quota.

CommandDescription
/automod viewCurrent settings (read-only)
/automod toggle <on|off>Enable/disable globally
/automod dm <on|off>DM offenders on first hit
/automod alert_role @RoleStaff role to ping in mod log
/automod response <mode>default / delete_only / delete_warn / delete_ban
/automod refresh_threatsManually update threat list
Staff are exempt from AutoMod. Members at Helper+ tier and above will never have their messages removed, even if they post a flagged link.

Welcome & Auto-Roles

Customizable welcome and goodbye messages with variable substitution. Auto-assign a role on join. Configure everything from the dashboard's Welcome page, or use the slash commands below.

CommandDescription
zt!setwelcomechannel #channelWhere welcomes post
zt!setgoodbyechannel #channelWhere goodbyes post
zt!setwelcomemsg <text>Welcome template
zt!setgoodbyemsg <text>Goodbye template
zt!setjoinrole @RoleAuto-role on join

Welcome Rotation (v3.1.0)

Tired of every new member getting the same greeting? Set up a rotation pool of welcome messages and the bot randomly picks one on each join.

  • Free: 10 messages in the pool
  • Plush+ 30 messages in the pool

Each message can be individually paused without losing its slot — handy for seasonal greetings. Configure rotation from the dashboard's Welcome page. If the rotation is enabled but the pool is empty (or all messages are paused), the bot falls back to the single welcome message above.

Variables available in welcome, goodbye, and rotation messages:

{user}mention the new member
{user.tag}username#discriminator
{user.name}just the username
{server}the server name
{membercount}current member count
{date}today's date
{time}current time

Birthday Tracker

Let members register their birthday with the bot. On the day, the bot posts an announcement in your chosen channel — optionally pinging a celebration role.

CommandDescription
/birthday set <month> <day>Register or update your birthday
/birthday view [@user]See yours or someone else's
/birthday clearRemove your birthday
/birthday listSee this month's upcoming birthdays

Configure the announcement channel, ping role, and custom message from the dashboard's Birthday page.

Booster Welcome

When someone boosts your server, the bot can post a thank-you message. Configure the channel and message template from the dashboard's Booster page.

Booster Tier Roles (v3.1.0) — Track how many boosts each member has contributed and auto-assign milestone roles when they hit specific thresholds (e.g. “3+ boosts”, “5+ boosts”). Free for everyone, up to 12 tiers per server. Configure from the dashboard.

Counting & Word-Chain

Two classic Discord channel games, both built in:

  • Counting — members take turns counting up: 1, 2, 3, 4… The bot tracks the current number, the all-time high, and (optionally) prevents the same user from counting twice in a row.
  • Word-Chain — each new word must start with the last letter of the previous word. The bot enforces the rule, tracks the chain length, and remembers your server's best streak.

Both are configured per-channel from the dashboard. Set the channel, the bot enforces the rules. Failed attempts are deleted automatically.

Reaction Roles

Click-to-assign role panels. Pipe-separated syntax, supports unicode and custom emojis.

CommandDescription
zt!rrcreate #channel | Title | 🎮 @Role | 🎬 @RoleCreate panel
zt!rredit <message_id> add <emoji> @RoleAdd reaction to existing panel
zt!rredit <message_id> remove <emoji>Remove reaction
zt!rrlistList all panels
zt!rrdelete <message_id>Delete panel

Custom Commands

Define your own slash-prefix commands with custom responses. Optionally restrict who can use them, and add multiple responses to pick from at random.

CommandDescription
/customcommand create <name> <response>Create a new command
/customcommand edit <name> <response>Update the response
/customcommand restrict <name> @RoleRestrict to a role
/customcommand random <name> <toggle>Enable multi-response random pick
/customcommand delete <name>Delete a command
/customcommand listSee available commands

Giveaways

Run prize drawings with role-based bonus entries. Start from the dashboard or via slash command. Bonuses are additive: a member with two bonused roles gets both bonuses summed on top of their base 1 entry.

CommandDescription
/giveaway start prize:<text> duration:<dur> [winners] [required_role] [exclude_host]Start a giveaway
/giveaway end id:<id>End early
/giveaway reroll id:<id>Pick a new winner
zt!bonus add @Role <1-100>Server-wide bonus entries for a role
zt!bonus remove @RoleRemove a bonus
zt!bonus listShow all bonuses
zt!setlogchannel #channelWhere giveaway logs go

Customization (v3.2.0)

From the dashboard's Giveaways page, you can set server-wide defaults for new giveaway embeds — title template, color, footer, thumbnail, plus a rotating pool of up to 4 image URLs (randomly picked per giveaway). Templates support variables:

Variables available in giveaway templates:

{prize}the prize name
{id}giveaway ID number
{ends}relative end time (e.g. "in 2 hours")
{endsfull}full end timestamp
{hostmention}mention the host
{winners}number of winners
{entries}current entry count
{winnermentions}comma-separated winner mentions (winner/ended templates only)
Existing giveaways aren't touched by customization changes — only new giveaways inherit the current defaults. Defaults are snapshotted at create time, so changing them later won't mess with a giveaway that's already running.

“Who entered” view (v3.2.0)

On the dashboard's Giveaways page, each giveaway card has a collapsible Show entrants dropdown. Available to anyone with Manage Server permissions. Shows entry weights (so you can see who got bonus entries) and lazy-loads so it doesn't bog down the page.

Scheduled Messages

Queue messages to fire at a specific time, or have them recur on a schedule. Each message can broadcast to multiple channels in one shot.

  • Free: 10 scheduled messages per server, 1 channel each
  • Plush+ 40 scheduled messages per server, up to 5 channels each (broadcast)

Schedule types:

  • once — fires at a specific date/time, then disables itself
  • hourly, daily, weekly — repeats at that interval starting from when you save
  • custom — fires every N minutes (1 minute to 30 days)

Each scheduled message can be plain text or a custom embed (title, description, color, image, thumbnail, footer). Configure everything from the dashboard's Scheduled Messages page.

Bot offline at fire time? When the bot starts back up, it spots any messages that should have fired during downtime, disables them, and notifies the mod log channel (or DMs the owner). You can re-enable from the dashboard once you've decided whether to fire-now or skip.

Message Logger

Plush+ Full audit-log mirror for your server. Tracks everything Discord's own audit log shows, with optional role exceptions so trusted staff don't get logged.

What gets logged: message edits and deletes, member joins/leaves, voice channel activity, role and channel creation/deletion, permission changes, and more.

CommandDescription
/messagelog snipe [count]Show recently deleted in this channel
/messagelog viewCurrent settings
/messagelog toggle <on|off>Enable/disable (privacy-sensitive)
/messagelog post_to_modlog <on|off>Auto-post deletions to mod log
Plush+ unlocks: unlimited logging across all channels, role exceptions, and full dashboard configuration. Free tier has limited retention to keep storage costs manageable.

Role Rewards

Plush+ When a member gains a specific role, the bot automatically gives them another role. Use it to set up “promotion chains” — getting promoted to Junior Mod also grants the all-staff color role, for example.

Each rule has a trigger role (what they gain) and a reward role (what gets added). Optionally configure the reward to be removed when the trigger is removed.

Configure from the dashboard's Role Rewards page. Each server can have multiple rules; they all evaluate independently.

Mass-Tag

Plush+ Send a DM to every member who holds a specific role. Useful for staff announcements, ticket follow-ups, or coordinating events.

Safeguards: Members can opt out per-server. Hard caps on recipients and daily sends prevent accidental abuse. Throttled DM delivery to avoid Discord rate limits.

CommandDescription
/masstag send role:@Role message:<text>Send to all members of a role
/masstag optoutOpt out of mass tags in this server
/masstag optinOpt back in
/masstag statusSee active send progress + daily quota
/masstag cancelCancel an in-progress send

Verification Gate

Bot-protected entry gate, free for everyone. New members see a button → solve a colored-button challenge → role assigned. Stops raid bots cold.

CommandDescription
/verify setup channel:#x verified_role:@Role rules:"text"Set up the panel
/verify viewCurrent settings
/verify disableDisable verification
Anti-spam: 5 failed attempts triggers a 1-hour cooldown. Make sure the bot's role is above the verified role in Server Settings → Roles.

Stats Channels

Auto-updating voice channels that display live server stats. Pick a stat type, pick a channel, customize the name template — the bot keeps the name in sync.

Available stat types: members, online, bots, humans, roles, channels, boosts, bot status.

  • Free: 2 stats channels per server
  • Plush+ 10 stats channels per server

Configure from the dashboard's Stats Channels page.

Support Tickets

13 ticket categories with auto-transcripts. Set up the panel once; members open tickets via dropdown.

CommandDescription
zt!ticketsetup #channelPost the ticket panel
zt!resetticketpanelRecreate the panel
zt!setsupportrole @RoleRole pinged when ticket opens
zt!setticketlogs #channelWhere ticket transcripts go on close

Music Player

Lavalink-powered with multi-source playback. Best results: SoundCloud URLs — text queries open a picker. YouTube major-label tracks may require login; SoundCloud and indie YouTube work reliably.

CommandDescription
/music play <query>Play or queue a track
/music skipSkip current track
/music queueView the queue
/music nowplayingShow what's playing
/music pause / resume / stop / leavePlayback controls
/music volume / shuffle / loop / filterTweak playback
/music remove / clearManage queue
/music lyricsFetch lyrics
/music playlist save / load / deleteSaved playlists (Plush+ unlimited)
/music 247 <on|off>24/7 mode
/music stayinvc <on|off>Don't auto-leave when VC empties

Translation

DeepL-powered translation across 25+ languages. Caps apply per-user, per-server, per day — meaning your usage in one server doesn't eat into your usage in another.

  • Free servers: 5 translations per user per day
  • Plush+ 20 translations per user per day (4× the cap)
CommandDescription
/translate text:<text or msg ID> to:<lang>Translate text or quote a message ID
Why the cap? DeepL is a paid API and the best translation engine currently available. The cap helps keep costs sustainable on the bot's end. With enough support from Plush+ servers, we'll be able to raise this cap in the future for more convenience to everyone — that's you all.

Cached translations don't count — same text + same target language = free repeat. Resets at midnight UTC.

Polls, AFK, Reminders

CommandDescription
/poll create <question> <options> [duration]Pipe-separated options, 2-10
/poll end <message_id>End early
/afk set <reason>Set AFK status
/afk clearClear AFK manually
/remind me <duration> <message>Set a reminder
/remind listView your reminders
/remind cancel <id>Cancel a reminder

Content Extraction

Extract emojis, stickers, avatars from any message. Embed social media URLs cleanly.

CommandDescription
/emoji steal <input>Up to 10 emojis or a message ID
/sticker steal <message_id>Steal a sticker
/avatar [@user]View avatar with download buttons
/tweet embed <url>Embed Twitter/X URL
/reddit embed <url>Embed Reddit URL
/instagram embed <url>Embed Instagram URL
/tiktok embed <url>Embed TikTok URL
/emoji toggle <on|off>Toggle emoji extraction
/sticker toggle <on|off>Toggle sticker extraction

Command Updates

Discord caches command lists per-server. After updates, new commands may not appear immediately. This is normal — here's how to fix it:

  1. Refresh your Discord client first: Press Ctrl+R on desktop, force-close and reopen on mobile.
  2. Still missing? Server Owner runs /sync refresh — instant per-server sync (5-min cooldown).
  3. Need to reset? /sync reset removes guild-specific overrides.

Why this happens: ZT Plush registers commands globally. Discord's CDN propagates updates within ~1 hour, but Ctrl+R and /sync refresh skip the wait.

The Road Ahead

Curious what's next? Here's the public roadmap. Anything labeled Future ideas is subject to change — Doog keeps things flexible to respond to feedback from servers like yours.

v3.1.0Released
  • ✓ Scheduled Messages
  • ✓ Welcome Rotation
  • ✓ AutoMod Allow/Blocklist
  • ✓ Translation per-server cap (5/20)
  • ✓ Role Rewards (Plush+)
  • ✓ Boost Tracker + Tier Roles
  • ✓ Giveaway bonus entries
  • ✓ Dashboard ops panel
v3.2.0In Progress
  • ○ Giveaway Customization (URL-based)
  • ○ Soundboard (Plush+, 35 slots)
  • ○ Custom Permission Tiers (Plush+)
  • ○ “Who entered” admin view
  • ○ Categorized dashboard grid
v3.3+Ideas
  • · File uploads (soundboard, giveaway images)
  • · Higher translation caps as community grows
  • · More language support
  • · Custom Tiers Phase 2 (deeper hooks)
  • · Expanded Aurora detection
  • · Server-to-server analytics

Subject to change based on feedback and community growth.

v3.0
v3.1
v3.2
v3.3
v4.0?

You are here: v3.2 in progress

Still need help?

Join the support server and ask Doog directly. Bug reports and feature ideas welcome.

Join Support Server