Skip to main content

Discord Bot

The Zander Discord bot is built into zander-web and runs alongside the API and web dashboard. It gives your community intuitive slash commands for everyday tasks and provides your staff with 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


Community Commands

These commands are available to all members of the Discord server:

CommandOptionsDescription
/applyShows information about open staff and player applications
/playLists all available network servers to join
/ranksLinks to the rank perks and donation page
/rulesPosts a link to the server rules
/policyDisplays links to all four server policies (Rules, Terms, Privacy, Refund)
/poll <question>question (required)Creates a community poll with ⬆️/⬇️ reactions
/vaultLinks to the resource and map vault
/watchLinks to the community Watch page for streams and videos
/websitePosts 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
tip

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


Staff Commands

Staff commands require the caller to have a linked Minecraft account with the appropriate LuckPerms permission node.

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).

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
/nicknamecheckzander.web.nicknamecheckManually scan for members whose Discord nickname doesn't match their Minecraft username
/staff-audit-reportzander.web.auditManually trigger the staff activity audit report

Bridge (/bridge)

Requires zander.web.bridge. Used to interact with the 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>StaffAdds 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 listens to the following Discord gateway events:

ListenerEventWhat It Does
guildMemberAddMember joinsTriggers welcome message and verification flow
guildMemberRemoveMember leavesLogs departure
guildMemberUpdateMember profile changesDetects role and nickname changes
guildMemberBoostUpdateBoost changesAcknowledges new server boosts
guildBanAddMember bannedLogs Discord bans
messageNew messageRoutes to content filter and audit logging
messageDeleteMessage deletedLogs deleted messages to the audit channel
messageUpdateMessage editedLogs edited messages to the audit channel
filterNew messageRuns phrase and link filtering; notifies staff if content is flagged
nicknameCheckMember updateValidates nickname matches linked Minecraft username
ipDetectionMember joinsChecks for suspicious join patterns
voiceStateUpdateVoice channel changeTracks voice channel activity
supportTicketInteractionsButton/select interactionsHandles ticket creation button clicks
supportTicketMessageMessage in ticket channelRoutes replies and notes to the ticket system
chatInputCommandErrorCommand errorGlobal slash command error handler
readyBot startsInitialises bot state and logs startup

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