Overview At-a-glance stats for Horizon Gaming's ticket system
Horizon Gaming Back to Home
⚡ Demo Mode — Explore the dashboard freely. No data is saved.
Total Tickets
1,247
All time
Open Now
8
Active right now
Closed Today
23
Last 24 hours
Avg Response
4m
Staff response time
Recent Tickets
# Category Opened By Opened Status Assigned To
#0418 🎫 General Support xXDragonSlayer99Xx 2 hours ago Open MegaAdmin
#0417 ⚖️ Ban Appeal ShadowHunter42 3 hours ago Pending Unassigned
#0416 🚨 Staff Report NightWolf_2024 5 hours ago Open SeniorStaff
#0415 🎫 General Support ProGamer_Elite 7 hours ago Closed MegaAdmin
#0414 ⚖️ Ban Appeal StarFighter_Rex 9 hours ago Closed MegaAdmin
Category Breakdown
CategoryOpenTotal
🎫 General Support 4 623
⚖️ Ban Appeal 3 412
🚨 Staff Report 1 212
Top Staff This Week
Staff MemberClosedAvg Time
MegaAdmin 47 3m 12s
SeniorStaff 31 5m 44s
ModHelper 18 8m 02s
Staff Roles
@Staff @Senior Staff @Moderator
Ticket Settings
Auto-close Inactive Tickets
Automatically close tickets with no activity
Danger Zone
Reset All Settings
This will delete all configuration for this server
Ticket Categories
Manage your ticket types and their settings
🎫 General Support
ticket
Staff Roles
@Staff @Senior Staff
Embed Color
#5865f2
Mode
Thread Ticket
Questions
2 intake questions
Auto-close
24 hours
⚖️ Ban Appeal
ticket
Staff Roles
@Senior Staff @Admin
Embed Color
#f0b232
Mode
Channel Ticket
Questions
4 intake questions
Auto-close
72 hours
🚨 Staff Report
private
Staff Roles
@Admin
Embed Color
#f23f43
Mode
Channel Ticket
Questions
3 intake questions
Auto-close
Off
AutoMod Filters
Filter Bad Words
Delete messages containing blacklisted words
Filter Invite Links
Remove Discord server invite links from messages
Anti-Spam
Slow-mode users sending rapid messages
Block External Links
Prevent members from posting non-Discord URLs
Mention Spam
Limit mass @mentions per message
Caps Lock Filter
Delete messages that are mostly uppercase
Recent Mod Actions
ActionUserModeratorReasonTime
Timeout SpamBot2024 MegaAdmin Spam in #general 12 min ago
Ban ToxicUser99 SeniorStaff Repeated harassment 1 hour ago
Warn RuleBreaker42 ModHelper Posting NSFW content 2 hours ago
Unban ReformedPlayer MegaAdmin Ban appeal accepted 5 hours ago
Ticket Messages
Panel Button Message
Active Staff
12
Tickets This Week
96
Avg Close Time
6m
Staff Performance
Staff MemberRoleTickets ClosedAvg ResponseRating
MegaAdminAdmin473m 12s★★★★★
SeniorStaffSenior Staff315m 44s★★★★☆
ModHelperStaff188m 02s★★★★☆
NewMod2024Staff712m 30s★★★☆☆
Ticket Transcripts
#CategoryUserClosed ByDateActions
#0413 🎫 General Support xXDragonSlayer99Xx MegaAdmin Mar 14, 2026
#0412 ⚖️ Ban Appeal ShadowHunter42 SeniorStaff Mar 14, 2026
#0411 🎫 General Support ProGamer_Elite MegaAdmin Mar 13, 2026
Embed Builder
Welcome & Leave Messages
Enable Welcome Messages
Send a message when a new member joins
Enable Leave Messages
Send a message when a member leaves
Engagement & Polls
TitleTypeVotesEndsStatus
🗳️ Favourite game mode? Poll 284 Mar 20, 2026 Active
🎁 Nitro Giveaway Giveaway 1,042 entries Mar 16, 2026 Active
🗳️ New channel suggestions Poll 157 Mar 10, 2026 Ended
🟢 Main Support Panel
Style: Dropdown  ·  Categories: All
Horizon Gaming Support
Select a category below to open a ticket. Our staff team will be with you shortly.
🟢 Appeals Panel
Style: Buttons  ·  Categories: Ban Appeal, Mute Appeal
Ban & Mute Appeals
Use the buttons below to submit your appeal. Please include relevant details.
🤖 Bot Nickname

Override the bot's display name in this server.

🖼️ Bot Avatar (per-server)

Upload an image or paste a URL to set the bot's avatar for this server.

🤖
💬 Bot Status
✅ Verification

Set up a verification panel so members must verify before accessing your server.

🗂️ Moderation Log
ActionUserModeratorReasonDate
Ban xXDragonSlayer99Xx MegaAdmin Repeated rule violations 2 hours ago
Mute ShadowHunter42 SeniorStaff Spamming in general 5 hours ago
Kick NightWolf_2024 Moderator AFK / Inactive 1 day ago
Warn GamerPro777 MegaAdmin Inappropriate language 1 day ago
Unban BladeRunner55 SeniorStaff Appeal accepted 2 days ago
🔍 User Lookup
S
ShadowHunter42
ID: 298351784634597376
In Server
Joined Discord
Jan 14, 2020
Joined Server
Mar 2, 2024
Tickets Opened
7
Warnings
2
Roles
@Member @Verified
📋 Audit Log

Recent Discord server audit events.

EventByTargetTime
🔨 Member BannedMegaAdminxXDragonSlayer99Xx2h ago
✏️ Channel UpdatedMegaAdmin#general3h ago
👢 Member KickedSeniorStaffNightWolf_20245h ago
🔧 Role UpdatedMegaAdmin@Moderator6h ago
✉️ Message DeletedModerator#off-topic8h ago
➕ Role CreatedMegaAdmin@Trial Staff1d ago
🔓 Member UnbannedSeniorStaffBladeRunner552d ago
Application Forms
Form NameCategoryResponsesStatusActions
📋 Staff Application Staff 42 Active
📋 Gang Application Community 17 Active
📋 Streamer Application Community 8 Closed
🚀 Quick Start

Get the bot working in under 5 minutes:

  1. Go to General Settings → add your staff roles and set a ticket category (the Discord channel category tickets are created under).
  2. Go to Panel → click Add Panel, configure it, then click Post to send the panel embed to a channel.
  3. Members can now click the button/dropdown on the panel to open a ticket.
Everything saves automatically when you change a setting — there's no global Save button unless shown explicitly.
⚙️ General Settings
Staff Roles
Roles that can see and manage all tickets. Members with these roles get pinged when tickets open (unless overridden per-category).
Ticket Category
The Discord channel category that new ticket channels are created under. Required.
Log Channel
Where ticket transcripts and close notifications are sent.
Panel Style
Dropdown — one panel with a dropdown listing all categories. Buttons — one button per category, all on one panel.
Purge on Close
When enabled, the ticket channel is deleted after closing. When disabled it stays (useful for thread-based tickets).
DM on Close
Sends the user a DM with a summary when their ticket is closed.
📌 Ticket Panel

The panel is the embed with a button or dropdown that members click to open a ticket.

  1. Click Add Panel to create a new one.
  2. Give it a title, description, and choose which categories appear on it.
  3. Click Post next to a panel to send it to a channel. You can re-post it to update an existing one — the old message stays until you delete it manually.
You can have multiple panels in different channels — useful for separating support topics by channel.
🗂️ Categories

Each category is a type of ticket. You can have as many as you want.

Type: Ticket
Creates a private text channel visible only to the opener and staff.
Type: Thread
Creates a private thread inside a chosen channel instead of a new channel.
Type: Application
DMs the user questions and posts their answers to an output channel. No ticket channel is created.
Ping
Whether staff get pinged when a ticket in this category is opened.
Exclusive Roles
When on, only the specific roles set on this category can see the ticket — global staff roles are ignored for this category.
Specific Staff Roles
Roles that can see tickets in this category. Leave empty to use the global staff roles. Add roles here to ping only those roles instead of everyone.
Max Open
How many tickets a single user can have open in this category at once.
Channel Name Template
Customise the ticket channel name. Use {username}, {ticketnumber}, {userid}, {category}.
Anonymous
Hides who opened the ticket from staff in the channel. The opener is still visible on the dashboard.
❓ Intake Questions

Ask users questions before or when they open a ticket.

Modal (up to 5)
A popup form appears in Discord when the user clicks the panel button. Fast and in-app, but limited to 5 questions with short answers.
DM (unlimited)
The bot DMs the user each question one by one. Supports unlimited questions and long answers. The ticket (or application output) is only created after all answers are submitted.
For application-mode categories the delivery method is always DM.
💬 Custom Messages

Configure the text the bot sends at key moments. Supports placeholders:

{user}
Mentions the ticket opener.
{closer}
Mentions the person who closed the ticket.
{time}
A relative timestamp (used in the resolve message).
Ticket Open
Sent inside the ticket channel when it's first created.
Ticket Close
Sent when a ticket is closed with the Close button.
Resolve: Sent
Sent when staff use the /rclose command to mark a ticket resolved — gives the user a window to respond before auto-close.
Resolve: Cancelled
Sent if the user responds within the window, cancelling the auto-close.
⏱️ Auto-Close

Tickets with no activity are automatically closed after a set time.

Auto-Close After
Hours of inactivity before a ticket is closed. Set to 0 to disable.
Warning At
Hours before closure to send a warning message in the ticket. Should be less than the close time.
Any message in the ticket (from any user) resets the inactivity timer.
🚫 Blacklist

Prevent specific users or roles from opening any tickets.

  1. Go to General Settings → scroll to the Blacklist card.
  2. Add user IDs or select roles to block.
  3. Optionally set a custom message shown to blocked users when they try to open a ticket.
To get a user's ID, enable Developer Mode in Discord (Settings → Advanced), then right-click the user and click Copy ID.
👤 Anonymous Tickets

When the Anonymous toggle is on for a category, the ticket channel name becomes ticket-anon-XXXX and the opener's name and avatar are hidden in the channel embed — staff can't tell who opened it just by looking at the channel.

Admins (Manage Server permission) can still see the opener's identity on the Overview dashboard and in the ticket data.

📋 Application Forms

Standalone forms with an "Apply Now" button — completely separate from the ticket system.

  1. Go to Applications → click + New Form.
  2. Fill in the form name, questions (one per line), and the output channel where answers will be posted.
  3. Click Create Form, then click Post to Channel on the form and choose which channel to post the Apply Now embed to.
  4. Members click Apply Now → bot DMs them the questions → answers are posted to the output channel with Accept, Deny, and Open Ticket buttons.

Submitted applications appear in the table below the forms list where you can review and action them from the dashboard too.

The "Open Ticket" button on an accepted application opens a ticket channel directly with the applicant.
✉️ Embed Builder

Send custom Discord embeds to any channel from the dashboard.

  1. Go to Embed Builder and choose a channel.
  2. Fill in any combination of title, description, color, author, footer, thumbnail, image, and fields.
  3. The preview on the right updates live as you type.
  4. Click Send Embed to post it.
The plain message field (above the embed) supports Discord mentions like @here or @role.
📊 Polls & Giveaways

Polls — members vote by clicking buttons. Votes are shown live. A poll ends at the set time and shows the final results. You can also end it early from the dashboard.

Giveaways — members enter by clicking a button. At the end time the bot picks a winner (or multiple) at random and announces them. You can reroll from the dashboard if needed.

Duration format: 10m = 10 minutes, 2h = 2 hours, 1d = 1 day.
🛡️ Moderation

Warnings — use /warn @user reason to warn a user. Warnings are stored and visible in the User Lookup tab. Use /warnings @user to view them.

Automod — configure word filters, link blocking, invite blocking, spam detection, caps limits, mass mention limits, and Zalgo text filtering. Set the action to delete, warn, or mute. Whitelist roles that bypass automod.

Automod is automatically disabled inside ticket channels — members can freely send links, images, and clips without triggering filters.

Custom Commands — add prefix commands that reply with a message and/or embed. Set up in Moderation → Custom Commands. Click + Add Embed when creating a command to attach a rich embed (title, description, colour, footer, image). Use {user} in any text field to mention the member who ran the command.

Mod Log — all moderation actions (bans, kicks, mutes, warns) are logged here.

🤖 Bot Identity

Customise how the bot appears in your server.

Nickname
Changes the bot's display name in your server only.
Webhook Avatar
Upload an image to use as the bot's avatar when posting ticket messages via webhook (so it doesn't show the real bot avatar).
Webhook URL
Paste a webhook URL from a channel to send ticket opening messages through it — makes the bot look like a custom name/avatar in that channel.
🔒 Page Permissions

Control which dashboard pages staff members can access. Admins (Manage Server permission) always see everything — this only affects staff.

Find it in General Settings → scroll to the Page Permissions card.

Each page has three access levels:

  • Everyone — all logged-in staff members can see it
  • Admin only — hidden from staff, only visible to admins (Manage Server)
  • Specific roles — only members with one of the selected roles can see it (admins always see it)

Changes save automatically when you change the dropdown or add/remove a role.

Settings, Bot Identity, and Audit Log are admin-only by default. Use "Specific roles" to give a senior staff role access to Moderation or Audit Log without opening it to all staff.
📄 Transcripts

When a ticket is closed, an HTML transcript of the full conversation is saved. You can view or download them from the Transcripts tab.

Transcripts are also sent to the Log Channel (if configured) as a file attachment when the ticket closes.

Transcripts are stored on the server. If you're running the bot yourself, they're in data/guilds/<guildId>/transcripts/.
🔗 Linked Servers

Link multiple Discord servers together so you can manage bans across all of them from a single dashboard.

  1. Make sure the bot is in both servers.
  2. Go to Linked Servers in the sidebar.
  3. Paste the Server ID of the server you want to link and click Link.
  4. The link is bidirectional — both servers will show each other as linked.
To get a Server ID: right-click the server icon in Discord → Copy Server ID. You need Developer Mode enabled (User Settings → Advanced → Developer Mode).

Once linked, the Combined Ban List shows every ban across all linked servers. You can:

  • Ban All — ban a user across every linked server at once
  • Unban All — remove a user's ban across every linked server at once
🤖 Bot Account Detection

Automatically detect and act on suspected bot or raid accounts the moment they join. Real verified Discord bots are always ignored.

Find it in ModerationBot Account Detection card.

Detection checks (each can be toggled):

  • New Account Age — flags accounts newer than your configured minimum (default: 7 days)
  • Default Avatar — flags accounts with no profile picture set
  • Suspicious Username — flags usernames matching bot-like patterns (random characters, trailing number strings, etc.)
  • Raid Detection — flags when a configurable number of accounts join within a short time window (e.g. 5 joins in 30 seconds)

Actions:

  • Log only — sends an alert to the log channel with the flags triggered
  • Kick — removes the account and DMs them a notice
  • Ban — bans the account and DMs them a notice
A single account only needs to trigger one check to be flagged. Use "Log only" first to tune your thresholds before switching to Kick or Ban.
🎥 Stream Team

Automatically assign a "live" role to members when they go live on Twitch or Kick — and remove it when they go offline. Optionally post an announcement embed when someone first goes live.

Find it under Stream Team in the sidebar.

Setup:

  1. Create a role in Discord for live members (e.g. 🔴 LIVE NOW) and position it wherever you want it to appear in the member list
  2. Go to Stream Team → select that role as the Live Role
  3. Optionally pick an Announce Channel — the bot posts an embed there the first time someone goes live each stream
  4. Toggle Enable Stream Team on
  5. Add members: enter their Discord User ID and their Twitch and/or Kick username

How it works:

  • The bot polls every 5 minutes automatically
  • All Twitch members are checked in a single API call — Kick is checked individually per member
  • The live role is added when they go live and removed when they go offline
  • Announcements only fire once when they first go live — not on every poll
  • Use ↻ Refresh Live Status in the dashboard to trigger an immediate check
Twitch requires TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRET in your .env file. Kick works without any credentials. Members can have both a Twitch and Kick username — Twitch is checked first.
🎭 Role Buttons

Attach clickable buttons to any embed you send via the Embed Builder. When a member clicks a button, the role is toggled — added if they don't have it, removed if they do.

Setup:

  1. Go to Embed Builder and build your embed as normal
  2. Scroll to the Role Buttons card and click + Add Button
  3. Set a label (the text on the button), pick the role, and choose a style (Primary = blue, Secondary = grey, Success = green, Danger = red)
  4. Add as many buttons as you need (up to 25 per message, 5 per row)
  5. Click Send Embed — the embed and buttons are sent together

Notes:

  • The bot responds ephemerally (only visible to the clicker) confirming the role was added or removed
  • The bot's role must be positioned above the target role in Server Settings → Roles for it to be able to assign it
  • Buttons persist indefinitely — they will keep working after a restart
Great for colour roles, pronouns, notification opt-ins, game roles, or any self-assignable role setup.
🛡️ Protected Roles

A global blocklist of roles that can never be self-assigned or removed via role buttons — even if a button exists for them. Protects sensitive roles like Admin, Moderator, or Staff from being claimed through the button system.

Find it in General Settings → scroll to the Protected Roles card (admin only).

  1. Select a role from the dropdown and click Add
  2. Repeat for any other roles you want to protect

If a member clicks a role button for a protected role, they receive: "❌ This role cannot be self-assigned."

Always protect your staff and admin roles. Role buttons are public — anyone in the server can click them.
🔑 Role Commands

Configure prefix commands that let a specific role give or remove another role from any member — without needing Manage Roles permission.

Find it in General SettingsRole Commands card.

  1. Click + Add Command and fill in the command names (e.g. give / revoke)
  2. Select the Role to Give/Remove — the role that will be toggled on the target member
  3. Select the Allowed Role — only members with this role can run the commands
  4. Save. Members with the allowed role can now run !give <@user> and !revoke <@user>
Usage
!<giveCmd> @user or !<giveCmd> userID
Logging
Every use is logged to the Log Channel with an embed showing the moderator, target, role, and channel.
Multiple Commands
You can add as many role command pairs as you need — one per configured role/allowed-role combination.
The bot's role must be positioned above the target role in Server Settings → Roles for it to be able to assign it.
💡 Suggestions

Let members submit suggestions via /suggest. Each suggestion is posted as an embed with upvote/downvote buttons and staff review controls.

Find the channel configuration in General SettingsSuggestions Channel.

/suggest <text>
Submits a suggestion to the configured suggestions channel.
👍 / 👎
Members vote. Each member can only vote once. The counts update live on the embed.
👥 Voters
Staff can click this to see exactly who upvoted and downvoted.
Approve / Deny
Staff buttons. Clicking either opens a modal for an optional note. The embed updates with the decision and who made it.
Only staff roles can approve or deny suggestions. The 👥 Voters button is also staff-only.
🔗 Invite Tracker

Automatically track which invite link each new member used to join the server. View stats and member lists per invite from the Invite Tracker page.

How it works:

  • The bot caches all invite codes on startup and keeps the cache in sync as invites are created or deleted
  • When a member joins, it compares use counts to detect which invite was used
  • The join is recorded against that invite code (creator, use count, list of members who joined via it)
Log Channel
Set inviteTrackerLogChannel in General Settings to log an embed on every join showing which invite was used.
View Members
Click the View button on any invite row to see all members who joined via that link, with join timestamps.
Delete Entry
Removes the tracked data for that invite code from the dashboard. Does not delete the invite from Discord.
The bot needs Manage Guild permission to fetch invite data. If it can't access invites for a server, tracking is silently skipped for that guild.
🎮 FiveM

Connect your FiveM server to display live player counts and status directly in a Discord channel.

Find it under FiveM in the sidebar.

  1. Enter your FiveM Server IP (e.g. cfx.re/join/abcdef or a direct IP:port)
  2. Select a Status Channel where the live embed will be posted
  3. Enable Auto-update to refresh the embed every 5 minutes
  4. Click Save
Status Embed
Shows server online/offline status, current player count, max players, and server name.
Auto-update
Edits the existing status message every 5 minutes — no channel spam.
🛒 Tebex Integration

Connect your Tebex store to automatically notify your Discord when purchases, refunds, chargebacks, and subscription events occur. Also includes a /generatevoucher command for staff to create discount codes.

Step 1 — Get your Tebex API Key

  1. Log in to your Tebex Creator Panel at creator.tebex.io
  2. Go to API Keys under your store settings
  3. Copy your Plugin API Key

Step 2 — Configure in Dashboard

  1. Open your server's dashboard and go to Tebex in the sidebar
  2. Paste your API key and click Save
  3. Set your Webhook Secret — any random string you choose (used to verify webhooks)
  4. Select notification channels for purchases, refunds, chargebacks, and declined payments
  5. Optionally set an Auto-Role to be given to customers on purchase
  6. Optionally configure Voucher Roles — only members with these roles can use /generatevoucher

Step 3 — Add Webhook in Tebex

  1. In your Tebex Creator Panel, go to Webhooks
  2. Add a new webhook with the URL:
    https://sonnygg.com/webhooks/tebex/YOUR_GUILD_ID
  3. Replace YOUR_GUILD_ID with your Discord server ID (right-click server icon → Copy Server ID, requires Developer Mode)
  4. Set the Secret field to match your Webhook Secret from Step 2
  5. Enable all event types you want
  6. Click Save
To enable Developer Mode: Discord → Settings → Advanced → Developer Mode. Then right-click your server icon and click Copy Server ID.

/generatevoucher

Authorised staff can run this in Discord to create a discount code on your Tebex store.

amount (required)
Discount value in £ — e.g. 20 for a £20 voucher
expires (optional)
Expiry date in YYYY-MM-DD format
max_uses (optional)
How many times the code can be used (default: 1)

The code is sent ephemerally (only visible to the user who ran it) and logged to your staff alert channel.

Notification Types

Purchase
Green embed — includes customer, package name, and amount paid.
Refund
Yellow embed — posted when a payment is refunded.
Chargeback
Red embed — posted when a customer disputes a charge.
Declined
Red embed — posted when a payment is declined.
Subscription Events
Alerts for renewals, cancellations, and payment failures on recurring subscriptions.
Auto-Role
Automatically assigns a Discord role to the buyer if their Discord is linked on Tebex.
🔗 Invite Tracker

Track which invite link each member used to join the server.

Invite CodeCreated ByUsesMembersAction
hG7xKq MegaAdmin 142
XzP9mN SeniorStaff 87
discord.gg/horizon MegaAdmin 1,204
kD4wRv Moderator 31
🎥 Stream Team

Automatically give members a role when they go live on Twitch. Requires members to connect their Twitch account in Discord settings.

Enable stream team
Automatically assign live role when members go live
Current Live Members
NightHawk_Streams
Playing FiveM RP · 42 viewers
BladeRunner_TV
Playing GTA V · 18 viewers
🎮 FiveM Server Status
Auto-update status embed
Refresh player count and status every 5 minutes
Live Server Info
Status
🟢 Online
Players
48 / 64
Peak Today
62
Uptime
99.2%
📜 Rules Panel

Post a rules embed to a channel. Members can accept the rules to receive a role.

🔑 Licence
Active Licence
Your licence is valid and all features are enabled.
Plan
Premium
Licence Key
HRZN-XXXX-XXXX-XXXX
Expires
Never
Guilds
1 / 1