Stop relying on bloated, over-engineered bots. NTICKETS is a clean, self-hosted Python bot built from scratch — fully customizable, zero dependencies beyond discord.py.
NTICKETS is a professional, self-hosted Discord ticket bot written entirely in Python with discord.py. Designed to be the last ticket bot you'll ever need, it ships with a fully paginated HTML transcript system, staff claim/unclaim, priority levels, a post-close rating system, and a beautifully engineered GUI experience — all driven by persistent slash commands and buttons that survive bot restarts.
No databases, no bloat. A single JSON file handles all persistence. Drop it into your server and be running in under 5 minutes.
Category Dropdown Panel — Users pick a category from a styled dropdown (General Support, Billing, Bug Report, Appeal, Partnership, Other). Fully configurable — add or remove categories with one line in
.Code:config.py
Subject & Description Modal — After selecting a category, a Discord modal collects a subject and a detailed description before the channel is created. No more empty, context-free tickets.
Claim / Unclaim System — Staff members can claim a ticket (shown in the opening embed), signaling ownership. Other staff can unclaim and reassign it at any time.
Priority Levels — Four tiers:
Low ·
Normal ·
High ·
Critical. Set from a dropdown inside the ticket. Saved to the transcript.
Support-Only Closure — Only members with a configured staff role (or Manage Channels permission) can close tickets. A confirmation prompt prevents accidental closes.
Join Broadcast — When a new ticket is created, all configured staff roles are pinged automatically inside the ticket channel.
Discord-Accurate HTML Transcripts — Every closed ticket generates a pixel-perfect, self-contained HTML file that renders like Discord: grouped messages, avatars, bot badges, embeds with side-bar colors, image/video/file attachments, timestamps, and a sticky topbar. Works offline, no external dependencies.
DM Transcript to Owner — The transcript is automatically sent to the ticket owner via DM when the ticket closes, along with a full close summary embed.
Post-Close Rating System — After receiving their transcript, the ticket owner is prompted to rate their experience from 1 to 5 stars via DM buttons. Ratings are stored and visible in
.Code:/ticket stats
Persistent Views — All panel and control buttons survive bot restarts. Users can always interact with them without re-posting the panel.
/ticket stats — Live dashboard showing total tickets, open/closed counts, number of ratings, average rating score, and a per-category breakdown.
/ticket list — A real-time overview of all open tickets: owner, channel, claimed-by, and priority — all in one ephemeral embed.
-
— Post the support panel in the current channel (requires Manage Server)Code:
/ticket panel -
— Close the current ticket (staff only)Code:
/ticket close -
— Add a user to the current ticketCode:
/ticket add <user> -
— Remove a user from the current ticketCode:
/ticket remove <user> -
— Rename the current ticket channelCode:
/ticket rename <name> -
— View all open tickets (staff only)Code:
/ticket list -
— View server-wide ticket statistics (staff only)Code:
/ticket stats
Every setting lives in a single
Code:
config.py
Code:
class Config:
LOG_CHANNEL_ID = 0 # Paste your log channel ID here
SUPPORT_ROLES = ["Support", "Staff"] # Add as many roles as you need
MAX_OPEN = 1 # Max open tickets per user
DM_TRANSCRIPT = True # DM transcript to owner on close
CLOSE_DELAY = 5 # Seconds before channel deletion
RATINGS_ENABLED = True # Post-close star rating in DMs
TICKET_CATEGORIES = [
("General Support", "🛠️", "...", "support"),
("Billing", "💳", "...", "billing"),
# Add your own here
]
Python 3.10+
discord.py 2.4+
python-dotenv (for loading the bot token from
)Code:.env
A bot application with Server Members and Message Content intents enabled
Having trouble setting up the bot? Found a bug? Got a question?
Don't post in the reviews — join our Discord and open a ticket.
We'll get back to you as fast as possible.
