Discord Ticket Panel & Help Center Template
A ticket panel is the message members use to reach your staff privately: they pick a topic, and a private channel opens with them and the team. This template places one under a self-serve FAQ menu, turning one message into your server's entire support desk. The first menu answers the questions you get every day on the spot — privately, instantly, no staff needed. The second opens a private ticket on the member's chosen topic for everything the FAQ can't solve. Members self-serve first and escalate second, so your team only sees the tickets that actually need a human.
🛟 Help Center
Everything in one place — grab an instant answer, or open a private ticket with the team.
⚡ Instant answers — the questions we get every day, answered on the spot.
🎫 Talk to the team — pick a topic and a private ticket opens just for you.
Answers arrive privately — only you see them. Tickets open a private channel with staff.
Copy and paste the Discord Ticket Panel & Help Center text
This is the template's text as Discord markdown. Paste it into any channel and the headings, bold text, lists and subtext format exactly as they do in the preview; the card, buttons and menus come with the full template when you open it in DWEEB. The Discord text formatting guide explains every piece of syntax it uses.
# 🛟 Help Center
Everything in one place — grab an instant answer, or open a private ticket with the team.
**⚡ Instant answers** — the questions we get every day, answered on the spot.
**🎫 Talk to the team** — pick a topic and a private ticket opens just for you.
-# Answers arrive privately — only you see them. Tickets open a private channel with staff.
When to use it
- Building a full support hub for a busy server
- Deflecting repeat questions before they become tickets
- Combining self-serve FAQ answers with private staff tickets
What's inside
Built with Discord's Components V2 layout system — the accent-striped card the Discord embed builder produces in place of a legacy embed:
- Container with accent stripe
- Formatted text
- Separator
- Dropdown menu
Tips
- Every piece of text, colour, emoji and link is editable — open it in DWEEB and make it yours.
- This template contains interactive components. Discord rejects it on a person-created webhook; use an application-owned webhook and configure the Quick Replies + Tickets plugin in DWEEB before sending.
- Use the measured, high-fidelity preview to check the layout before you send.
How to use this template
- Open it in DWEEB. Click “Use this template free” to load the template into the visual editor — no sign-up, no install.
- Make it yours. Edit the text, colours, emoji, links and images to match your server. The live preview updates as you type.
- Connect an app-owned destination. Follow DWEEB's guided setup for Quick Replies + Tickets, then choose a connected server and channel. Discord rejects interactive components on person-created webhooks.
- Send it. Review the live preview, then hit Send. You can also save it, share it as a link, schedule it, or export the message JSON.
Template JSON and compatibility
This example contains 2 top-level blocks and 11 components including nested blocks. Its text fields use 771 characters of the editor's message budget. The JSON below is exported from the same template that opens in DWEEB.
Import it through DWEEB's JSON panel, or adapt it for your own application. This is a Components V2 payload with flags: 32768, not a legacy embeds array. When executing a webhook yourself, include with_components=true in the request URL. See the Components V2 JSON reference for delivery requirements.
The custom IDs in this example are setup placeholders. Downloading JSON does not configure a running interaction handler: use the template's guided plugin setup in DWEEB, or connect your own handler to the application that owns the webhook.
Replace example text, images, links and any server placeholders before posting. Discord does not expand DWEEB placeholders when you send raw JSON from your own code. Review allowed mentions before sending text that names users or roles.
Download Discord Ticket Panel & Help Center JSON
View the complete template JSON
{
"username": "Help Center",
"components": [
{
"type": 17,
"accent_color": 3447003,
"components": [
{
"type": 10,
"content": "# 🛟 Help Center\nEverything in one place — grab an instant answer, or open a private ticket with the team."
},
{
"type": 14,
"divider": true,
"spacing": 2
},
{
"type": 10,
"content": "**⚡ Instant answers** — the questions we get every day, answered on the spot."
},
{
"type": 1,
"components": [
{
"type": 3,
"custom_id": "help_faq",
"placeholder": "Browse common questions…",
"min_values": 1,
"max_values": 1,
"options": [
{
"label": "How do I get roles?",
"value": "faq_roles",
"description": "Pick them up yourself in seconds",
"emoji": {
"name": "🙋"
}
},
{
"label": "How do I report someone?",
"value": "faq_report",
"description": "The right way to flag rule-breaking",
"emoji": {
"name": "🚨"
}
},
{
"label": "Where are the invite & socials?",
"value": "faq_links",
"description": "Share the server or follow us",
"emoji": {
"name": "🔗"
}
},
{
"label": "Something's broken",
"value": "faq_bug",
"description": "Where to send bug reports",
"emoji": {
"name": "🐛"
}
}
]
}
]
},
{
"type": 14,
"divider": true,
"spacing": 1
},
{
"type": 10,
"content": "**🎫 Talk to the team** — pick a topic and a private ticket opens just for you."
},
{
"type": 1,
"components": [
{
"type": 3,
"custom_id": "help_topics",
"placeholder": "Open a ticket…",
"min_values": 1,
"max_values": 1,
"options": [
{
"label": "General help",
"value": "topic_general",
"description": "Questions and general support",
"emoji": {
"name": "❓"
}
},
{
"label": "Report a player",
"value": "topic_report",
"description": "Report rule-breaking privately",
"emoji": {
"name": "🚨"
}
},
{
"label": "Billing / store",
"value": "topic_billing",
"description": "Purchases and payments",
"emoji": {
"name": "🛒"
}
},
{
"label": "Something else",
"value": "topic_other",
"description": "Anything not listed",
"emoji": {
"name": "💬"
}
}
]
}
]
}
]
},
{
"type": 10,
"content": "-# Answers arrive privately — only you see them. Tickets open a private channel with staff."
}
],
"flags": 32768
}Use this template in a bot
The same message as a discord.js or discord.py bot sends it. Both are generated from the template above by DWEEB's code generator; for a cURL, JavaScript or Python webhook request, open the template with the Code tab.
discord.js code
// Components V2 message — discord.js v14.19 or newer.
// Designed in DWEEB (https://dweeb.faizo.net). Edit the text, then send.
const {
ActionRowBuilder,
ContainerBuilder,
MessageFlags,
SeparatorBuilder,
SeparatorSpacingSize,
StringSelectMenuBuilder,
StringSelectMenuOptionBuilder,
TextDisplayBuilder,
} = require("discord.js");
const container = new ContainerBuilder()
.setAccentColor(0x3498db)
.addTextDisplayComponents(
new TextDisplayBuilder().setContent(
[
"# 🛟 Help Center",
"Everything in one place — grab an instant answer, or open a private ticket with the team.",
].join("\n"),
),
)
.addSeparatorComponents(
new SeparatorBuilder().setDivider(true).setSpacing(SeparatorSpacingSize.Large),
)
.addTextDisplayComponents(
new TextDisplayBuilder().setContent(
"**⚡ Instant answers** — the questions we get every day, answered on the spot.",
),
)
.addActionRowComponents(
new ActionRowBuilder().addComponents(
new StringSelectMenuBuilder()
.setCustomId("help_faq")
.setPlaceholder("Browse common questions…")
.setMinValues(1)
.setMaxValues(1)
.addOptions(
new StringSelectMenuOptionBuilder()
.setLabel("How do I get roles?")
.setValue("faq_roles")
.setDescription("Pick them up yourself in seconds")
.setEmoji("🙋"),
new StringSelectMenuOptionBuilder()
.setLabel("How do I report someone?")
.setValue("faq_report")
.setDescription("The right way to flag rule-breaking")
.setEmoji("🚨"),
new StringSelectMenuOptionBuilder()
.setLabel("Where are the invite & socials?")
.setValue("faq_links")
.setDescription("Share the server or follow us")
.setEmoji("🔗"),
new StringSelectMenuOptionBuilder()
.setLabel("Something's broken")
.setValue("faq_bug")
.setDescription("Where to send bug reports")
.setEmoji("🐛"),
),
),
)
.addSeparatorComponents(
new SeparatorBuilder().setDivider(true).setSpacing(SeparatorSpacingSize.Small),
)
.addTextDisplayComponents(
new TextDisplayBuilder().setContent(
"**🎫 Talk to the team** — pick a topic and a private ticket opens just for you.",
),
)
.addActionRowComponents(
new ActionRowBuilder().addComponents(
new StringSelectMenuBuilder()
.setCustomId("help_topics")
.setPlaceholder("Open a ticket…")
.setMinValues(1)
.setMaxValues(1)
.addOptions(
new StringSelectMenuOptionBuilder()
.setLabel("General help")
.setValue("topic_general")
.setDescription("Questions and general support")
.setEmoji("❓"),
new StringSelectMenuOptionBuilder()
.setLabel("Report a player")
.setValue("topic_report")
.setDescription("Report rule-breaking privately")
.setEmoji("🚨"),
new StringSelectMenuOptionBuilder()
.setLabel("Billing / store")
.setValue("topic_billing")
.setDescription("Purchases and payments")
.setEmoji("🛒"),
new StringSelectMenuOptionBuilder()
.setLabel("Something else")
.setValue("topic_other")
.setDescription("Anything not listed")
.setEmoji("💬"),
),
),
);
const text = new TextDisplayBuilder().setContent(
"-# Answers arrive privately — only you see them. Tickets open a private channel with staff.",
);
// Buttons and menus with a custom ID do nothing until your bot handles the
// interaction: client.on("interactionCreate", …) and match on customId.
// The design also sets username "Help Center" — webhook-only options that
// channel.send() has no equivalent for. WebhookClient#send accepts them.
// Send it from any async context: a command handler, an event, a script.
await channel.send({
components: [container, text],
flags: MessageFlags.IsComponentsV2,
});discord.py code
# Components V2 message — discord.py 2.6 or newer.
# Designed in DWEEB (https://dweeb.faizo.net). Edit the text, then send.
import discord
from discord import ui
def build_view() -> ui.LayoutView:
view = ui.LayoutView(timeout=None)
view.add_item(
ui.Container(
ui.TextDisplay(
"# 🛟 Help Center\n"
"Everything in one place — grab an instant answer, or open a private ticket with the team.",
),
ui.Separator(visible=True, spacing=discord.SeparatorSpacing.large),
ui.TextDisplay(
"**⚡ Instant answers** — the questions we get every day, answered on the spot.",
),
ui.ActionRow(
ui.Select(
custom_id="help_faq",
placeholder="Browse common questions…",
min_values=1,
max_values=1,
options=[
discord.SelectOption(
label="How do I get roles?",
value="faq_roles",
description="Pick them up yourself in seconds",
emoji="🙋",
),
discord.SelectOption(
label="How do I report someone?",
value="faq_report",
description="The right way to flag rule-breaking",
emoji="🚨",
),
discord.SelectOption(
label="Where are the invite & socials?",
value="faq_links",
description="Share the server or follow us",
emoji="🔗",
),
discord.SelectOption(
label="Something's broken",
value="faq_bug",
description="Where to send bug reports",
emoji="🐛",
),
],
),
),
ui.Separator(visible=True, spacing=discord.SeparatorSpacing.small),
ui.TextDisplay(
"**🎫 Talk to the team** — pick a topic and a private ticket opens just for you.",
),
ui.ActionRow(
ui.Select(
custom_id="help_topics",
placeholder="Open a ticket…",
min_values=1,
max_values=1,
options=[
discord.SelectOption(
label="General help",
value="topic_general",
description="Questions and general support",
emoji="❓",
),
discord.SelectOption(
label="Report a player",
value="topic_report",
description="Report rule-breaking privately",
emoji="🚨",
),
discord.SelectOption(
label="Billing / store",
value="topic_billing",
description="Purchases and payments",
emoji="🛒",
),
discord.SelectOption(
label="Something else",
value="topic_other",
description="Anything not listed",
emoji="💬",
),
],
),
),
accent_colour=0x3498db,
),
)
view.add_item(
ui.TextDisplay(
"-# Answers arrive privately — only you see them. Tickets open a private channel with staff.",
),
)
return view
# Buttons and menus with a custom_id do nothing until your bot handles them:
# subclass ui.LayoutView with callbacks, or listen for on_interaction.
# The design also sets username "Help Center" — webhook-only options that
# channel.send() has no equivalent for. discord.Webhook.send accepts them.
# Send it from any coroutine: a command, an event listener, a task.
await channel.send(view=build_view())Ready to use this template?
Open it in the visual Discord message builder, customize it for your server, and review the result before sending.
Use “Discord Ticket Panel & Help Center” →Frequently asked questions
What is a Discord ticket template?
A message members use to open a private support channel with your staff. This one pairs it with a self-serve FAQ menu: the first menu answers common questions privately and instantly, and the second opens a ticket on the topic the member picks for anything the answers don't cover.
How do I set up tickets on Discord with this template?
Open the template in DWEEB and pair its menus with the Quick Replies and Tickets plugins. In Tickets you choose the topics, the staff roles that handle tickets and the category new ticket channels go into; in Quick Replies you write the answers. Then send it to your support channel.
Who can see a ticket?
The member who opened it, the staff roles you chose, and anyone staff add to the ticket. The rest of the server never sees the ticket channel.
Do I need a bot to use this template?
It needs an application-owned webhook because it contains interactive components; Discord rejects those components on a person-created webhook. DWEEB detects the requirement and guides you through configuring Quick Replies + Tickets. Some handlers also need the DWEEB bot installed for server permissions.
How do I use this Help center template?
Click “Use this template free” to load it into the visual editor, change the text, colours and links to fit your server, then pick a channel or paste your Discord webhook URL and hit Send. You can also share it as a single link or export the message JSON.
Is DWEEB free?
Yes. DWEEB's full visual builder is free and needs no account. Working drafts and browser saves are local by default; optional connected features such as schedules, server libraries, AI, and plugins use the data required to work.
Set up the interaction
This template is already paired with the matching DWEEB workflow: