
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:
- Click the invite link and choose your server.
- 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.
- In any channel, run
/infofor a full feature overview, or/helpfor category-organized commands.
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 timeFeature-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.
Permission Tiers
ZT Plush has four staff tiers plus the Server Owner. Each tier has clearly defined responsibilities:
Read-only access to mod tools. Can view warnings and use /messagelog snipe.
Day-to-day moderation. Run giveaways, toggle emoji/sticker policy, view AutoMod settings, all moderation actions.
Server configuration. Configure tickets, welcome messages, reaction roles, AutoMod tweaks, music settings, stats channels, verification, scheduled messages.
Bot identity and sensitive settings. Assign staff tiers, control mod log, toggle AutoMod, toggle Message Logger, sync commands, unban users.
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.
| Command | Tier | Description |
|---|---|---|
zt!warn @user low|medium|high <reason> | Helper+ | Issue a warning |
zt!warnings @user | Helper+ | View a member's warnings |
zt!unwarn <id> | Tiered | Low: Mod+, Med: Senior+, High: Owner |
zt!timeout @user <duration> <reason> | Mod+ | Up to 7d for Mod+, 28d for Senior+ |
zt!untimeout @user | Mod+ | Remove timeout |
zt!kick @user <reason> | Mod+ | Kick member |
zt!ban @user <reason> | Senior+ | Ban member |
zt!unban <user_id> | Owner | 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.
| Command | Tier | Description |
|---|---|---|
/automod view | Mod+ | Current settings (read-only) |
/automod toggle <on|off> | Owner | Enable/disable globally |
/automod dm <on|off> | Senior+ | DM offenders on first hit |
/automod alert_role @Role | Senior+ | Staff role to ping in mod log |
/automod response <mode> | Owner | default / delete_only / delete_warn / delete_ban |
/automod refresh_threats | Senior+ | Manually update threat list |
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.
| Command | Tier | Description |
|---|---|---|
zt!setwelcomechannel #channel | Senior+ | Where welcomes post |
zt!setgoodbyechannel #channel | Senior+ | Where goodbyes post |
zt!setwelcomemsg <text> | Senior+ | Welcome template |
zt!setgoodbyemsg <text> | Senior+ | Goodbye template |
zt!setjoinrole @Role | Senior+ | Auto-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 timeBirthday 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.
| Command | Tier | Description |
|---|---|---|
/birthday set <month> <day> | Everyone | Register or update your birthday |
/birthday view [@user] | Everyone | See yours or someone else's |
/birthday clear | Everyone | Remove your birthday |
/birthday list | Everyone | See 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.
| Command | Tier | Description |
|---|---|---|
zt!rrcreate #channel | Title | 🎮 @Role | 🎬 @Role | Senior+ | Create panel |
zt!rredit <message_id> add <emoji> @Role | Senior+ | Add reaction to existing panel |
zt!rredit <message_id> remove <emoji> | Senior+ | Remove reaction |
zt!rrlist | Senior+ | List all panels |
zt!rrdelete <message_id> | Senior+ | 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.
| Command | Tier | Description |
|---|---|---|
/customcommand create <name> <response> | Senior+ | Create a new command |
/customcommand edit <name> <response> | Senior+ | Update the response |
/customcommand restrict <name> @Role | Senior+ | Restrict to a role |
/customcommand random <name> <toggle> | Senior+ | Enable multi-response random pick |
/customcommand delete <name> | Senior+ | Delete a command |
/customcommand list | Everyone | See 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.
| Command | Tier | Description |
|---|---|---|
/giveaway start prize:<text> duration:<dur> [winners] [required_role] [exclude_host] | Mod+ | Start a giveaway |
/giveaway end id:<id> | Mod+ | End early |
/giveaway reroll id:<id> | Mod+ | Pick a new winner |
zt!bonus add @Role <1-100> | Senior+ | Server-wide bonus entries for a role |
zt!bonus remove @Role | Senior+ | Remove a bonus |
zt!bonus list | Senior+ | Show all bonuses |
zt!setlogchannel #channel | Senior+ | Where 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)“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 itselfhourly,daily,weekly— repeats at that interval starting from when you savecustom— 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.
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.
| Command | Tier | Description |
|---|---|---|
/messagelog snipe [count] | Helper+ | Show recently deleted in this channel |
/messagelog view | Senior+ | Current settings |
/messagelog toggle <on|off> | Owner | Enable/disable (privacy-sensitive) |
/messagelog post_to_modlog <on|off> | Senior+ | Auto-post deletions to mod log |
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.
| Command | Tier | Description |
|---|---|---|
/masstag send role:@Role message:<text> | Senior+ | Send to all members of a role |
/masstag optout | Everyone | Opt out of mass tags in this server |
/masstag optin | Everyone | Opt back in |
/masstag status | Senior+ | See active send progress + daily quota |
/masstag cancel | Senior+ | Cancel 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.
| Command | Tier | Description |
|---|---|---|
/verify setup channel:#x verified_role:@Role rules:"text" | Senior+ | Set up the panel |
/verify view | Senior+ | Current settings |
/verify disable | Senior+ | Disable verification |
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.
| Command | Tier | Description |
|---|---|---|
zt!ticketsetup #channel | Senior+ | Post the ticket panel |
zt!resetticketpanel | Senior+ | Recreate the panel |
zt!setsupportrole @Role | Senior+ | Role pinged when ticket opens |
zt!setticketlogs #channel | Senior+ | Where 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.
| Command | Tier | Description |
|---|---|---|
/music play <query> | Everyone | Play or queue a track |
/music skip | Everyone | Skip current track |
/music queue | Everyone | View the queue |
/music nowplaying | Everyone | Show what's playing |
/music pause / resume / stop / leave | Everyone | Playback controls |
/music volume / shuffle / loop / filter | Everyone | Tweak playback |
/music remove / clear | Everyone | Manage queue |
/music lyrics | Everyone | Fetch lyrics |
/music playlist save / load / delete | Everyone | Saved playlists (Plush+ unlimited) |
/music 247 <on|off> | Senior+ | 24/7 mode |
/music stayinvc <on|off> | Senior+ | 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)
| Command | Tier | Description |
|---|---|---|
/translate text:<text or msg ID> to:<lang> | Everyone | Translate text or quote a message ID |
Cached translations don't count — same text + same target language = free repeat. Resets at midnight UTC.
Polls, AFK, Reminders
| Command | Tier | Description |
|---|---|---|
/poll create <question> <options> [duration] | Everyone | Pipe-separated options, 2-10 |
/poll end <message_id> | Creator only | End early |
/afk set <reason> | Everyone | Set AFK status |
/afk clear | Everyone | Clear AFK manually |
/remind me <duration> <message> | Everyone | Set a reminder |
/remind list | Everyone | View your reminders |
/remind cancel <id> | Everyone | Cancel a reminder |
Content Extraction
Extract emojis, stickers, avatars from any message. Embed social media URLs cleanly.
| Command | Tier | Description |
|---|---|---|
/emoji steal <input> | Everyone | Up to 10 emojis or a message ID |
/sticker steal <message_id> | Everyone | Steal a sticker |
/avatar [@user] | Everyone | View avatar with download buttons |
/tweet embed <url> | Everyone | Embed Twitter/X URL |
/reddit embed <url> | Everyone | Embed Reddit URL |
/instagram embed <url> | Everyone | Embed Instagram URL |
/tiktok embed <url> | Everyone | Embed TikTok URL |
/emoji toggle <on|off> | Mod+ | Toggle emoji extraction |
/sticker toggle <on|off> | Mod+ | 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:
- Refresh your Discord client first: Press Ctrl+R on desktop, force-close and reopen on mobile.
- Still missing? Server Owner runs
/sync refresh— instant per-server sync (5-min cooldown). - Need to reset?
/sync resetremoves 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.
- ✓ 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
- ○ Giveaway Customization (URL-based)
- ○ Soundboard (Plush+, 35 slots)
- ○ Custom Permission Tiers (Plush+)
- ○ “Who entered” admin view
- ○ Categorized dashboard grid
- · 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.
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