Skip to main content

Discord Bot

The Zander Discord bot ships as part of the same system that runs your website and dashboard, so everything stays in sync automatically. It gives your community easy-to-use slash commands (the /command options you see when you type / in Discord) for everyday tasks, and gives your staff powerful moderation and management tools - all without leaving Discord.

note

📸 Screenshot: The Discord bot responding to a /play command, showing an embed with available network servers


One System, Kept in Sync

The Discord bot and the website aren't two separate things bolted together - they share the same underlying data and logic. That means whatever happens on one side is reflected on the other, automatically. New commands and behaviors are picked up without any extra setup work on your part. A few concrete examples of what this means in practice:

  • The profile picture shown on a player's website profile is the exact same one the /profile command shows in Discord - update it once, and it's correct everywhere.
  • If a player's Discord nickname doesn't match their linked Minecraft username, Zander catches that both when their Discord profile changes and right after they link their account on the website - so mismatches don't slip through either path.
  • Linking a Discord account can also update related Discord settings (like ticket-channel access) right away, since the bot and website can act on the same Discord connection.

Community Commands

These commands are available to all members of the Discord server (no permission check):

CommandOptionsDescription
/apply-Shows information about open staff and player applications
/play-Lists all available network servers to join
/ranks-Links to the rank perks and donation page
/rules-Posts a link to the server rules
/policy-Displays links to all four server policies (Rules, Terms, Privacy, Refund)
/poll <question>question (required)Creates a community poll with ⬆️/⬇️ reactions
/vault-Links to the resource and map vault
/watch-Links to the community Watch page for streams and videos
/website-Posts a link to the network website
/shopdirectory <material> [type]material (required), type (buying/selling)Browse in-game shop listings by item type
/profileusername, discord_user, or discord_tag (at least one)Shows a player's linked profile with stats and join date
/report <user> <reason>Both requiredReport a Discord member to staff
/staffhelp <query>query (required)Send a direct message to staff for help or assistance
/support-Ticket creation/management (create, submit, panel setup, add participant)
tip

Most community commands respond only to the user who ran them (ephemeral), keeping channels tidy.


Staff Commands

Staff commands don't check Discord roles directly. Instead, the bot looks up the Discord user's linked website account and checks the same staff permissions the dashboard uses. This means a Discord user won't be able to run staff commands unless their Discord account is linked to a website account that has the right permission - having a matching Discord server role isn't enough on its own.

note

📸 Screenshot: A staff member using /punish to issue a warning, with the punishment embed showing in the channel

Punishments (/punish)

SubcommandOptionsPermissionDescription
warn <user> <reason>evidence, silent (optional)zander.discord.punish.warnIssue a formal warning
kick <user> <reason>evidence, silent (optional)zander.discord.punish.kickKick from the guild
ban <user> <reason>evidence, silent (optional)zander.discord.punish.banPermanent ban
tempban <user> <reason> <duration>evidence, silent (optional)zander.discord.punish.banTemporary ban
mute <user> <reason>evidence, silent (optional)zander.discord.punish.mutePermanent mute (chat + voice)
tempmute <user> <reason> <duration>evidence, silent (optional)zander.discord.punish.muteTemporary mute
unban <user> <reason>-zander.discord.punish.banLift an active ban
unmute <user> <reason>-zander.discord.punish.muteLift an active mute
historyuser, username, or discord_tag (at least one)zander.discord.punish.historyView cross-platform punishment history

Duration format: <number><unit> - e.g. 1h (1 hour), 7d (7 days), 2w (2 weeks).

Profile / Identity

CommandPermissionDescription
/forcelinkzander.discord.forcelinkForce-links a Discord user to a Minecraft account
/nicknamecheckzander.web.nicknamecheckManually scan for members whose Discord nickname doesn't match their Minecraft username

Management & Auditing

CommandPermissionDescription
/auditzander.web.auditView a linked user's activity across all platforms
/lp-audit [scope] [export]zander.discord.lpauditRead-only audit comparing LuckPerms groups to Discord roles
/staff-audit-reportzander.web.auditManually trigger the staff activity audit report

Bridge (/bridge)

Requires zander.web.bridge. Used to interact with the cross-server command bridge executor.

SubcommandDescription
status [status] [slug] [limit] [claim]View the executor task queue
add <command> <slug>Queue a command for execution on a server
routine <slug>Trigger a saved multi-step routine
report <taskid> <status>Report task execution results
reset <taskid>Reset a task back to pending
clear [filters]Remove tasks from the queue

Support Ticket Commands (/ticket)

The /ticket command manages support tickets from within Discord:

SubcommandWho Can UseDescription
createAnyoneOpens the ticket creation flow
submitAnyoneSubmits a new ticket
panel [channel] [category]Staff (ManageChannels)Posts a "Create Ticket" button in a channel
add <user|role>Staff (zander.web.tickets.manageparticipants)Adds a participant to the current ticket
remove <user|role>StaffRemoves a participant from the current ticket
status <status>Staff or category staff roleUpdates ticket status
closeStaff or ticket ownerCloses the ticket
manual <user> <subject> <description>Staff (ManageChannels)Opens a ticket on behalf of a user
note

📸 Screenshot: A Discord ticket channel with the ticket info embed, status, and staff reply


Event Listeners

The bot automatically reacts to things happening in your Discord server - messages, member joins, role changes, and more - listed below:

ListenerEventWhat It Does
readyclient readyStartup logging/init
message, filter, generalKenobi, special-may4th, ipDetectionmessageCreateChat filtering, Easter-egg replies, IP-sharing detection
messageUpdatemessageUpdateLogs edited messages to the audit channel
messageDeletemessageDeleteLogs deleted messages to the audit channel
guildMemberAddMember joinsTriggers welcome message and verification flow
guildMemberRemoveMember leavesLogs departure
guildMemberUpdate, guildMemberBoostUpdate, nicknameCheckMember profile changesDetects role/boost changes; nickname enforcement (also triggered directly right after a Discord account link on the website)
guildBanAddMember bannedSyncs Discord bans into the punishments system
voiceStateUpdateVoice channel changeTracks voice channel activity
supportTicketInteractionsButton/select interactionsHandles ticket creation button clicks
supportTicketMessageMessage in ticket channelRelays replies and notes to the ticket system
chatInputCommandErrorCommand errorCentral error handler for failed slash commands

Automated Tasks (Cron)

Background jobs run on a schedule to keep your network running smoothly:

JobScheduleDescription
announcementExpiryCronPeriodicDisables announcements past their end date
bridgeCleanupCronPeriodicPurges completed or stale bridge executor tasks
cakeDayUserCheckDailyCelebrates user account anniversaries
eventAnnouncementCronEvery minuteSends scheduled event announcements to Discord
eventTemplateCronHourlyAuto-generates event drafts from active templates
nicknameCheckCronPeriodicScans all linked members for nickname mismatches
punishmentExpiryCronPeriodicLifts punishments that have reached their expiry date
schedulerCronPeriodicDelivers scheduled Discord messages
staffAuditReportCronWeekly (configurable)Generates and posts the staff activity audit report
unverifiedReminderCronPeriodicSends reminders to unverified guild members
userCodeExpiryCronPeriodicExpires unused Discord linking verification codes
voteMonthlyRewardCron1st of each month at 00:05 UTCProcesses monthly vote rewards
watchTwitchCronPeriodicPolls Twitch for new creator streams
watchYoutubeCronPeriodicPolls YouTube for new creator videos