Community Tools
Tickets
A ticket type is one button on a panel. Each type has its own name, emoji, button style, category, staff roles, opening message and channel-name format, all configured on the Tickets tab.
- Create your ticket types on the dashboard.
- Publish the panel to a channel. either from the dashboard or with
/setup_tickets. - A member clicks a button and gets a private channel visible only to them and the staff roles you named.
Tickets can be closed, reopened, transcribed and deleted. A transcript is saved automatically before deletion, and deletion has a short countdown so it can be stopped. A member cannot open two tickets of the same type at once.
Ticket state lives in the channel topic, so it survives a bot restart. Renaming or clearing that topic by hand will detach the ticket from Graffiti.
Auto-roles
Pick any number of roles under the Roles tab and every joining member receives all of them in a single assignment. Graffiti's own role must sit above the roles it is granting, or Discord will refuse.
Join-to-Create voice
Nominate a hub voice channel. Anyone who joins it is moved into a fresh room of their own, and the room disappears when the last person leaves.
The room's owner gets a control panel for:
- Renaming the room and setting a user limit
- Locking it, or hiding it entirely
- Setting a status, toggling NSFW, overriding the voice region
- Allowing or blocking specific members and roles
- Claiming ownership when the original owner has left
Preferences are remembered per member, so a regular's room comes back the way
they left it. Defaults for the room name and user limit are set on the
Voice tab, where {user} is replaced by the
member's name.
Use /j2c create to have Graffiti build and configure a hub channel
for you, or /j2c set to point at one you already have.
Welcome messages and DMs
Two separate greetings with separate switches: one posted in a channel, one sent as a direct message. Either can be plain text or an embed.
Both support these placeholders:
| Placeholder | Becomes |
|---|---|
{user} | A mention of the joining member. |
{username} | Their name, without the mention. |
{server} | The server name. |
{membercount} | The member count after they joined. |
The in-channel message can show an avatar, account age, member count, timestamp and a banner image, and can delete itself after a set number of seconds. The DM can log failures to a channel of your choosing, which is worth enabling, closed DMs are common and silent otherwise.
Preview both against your own account with /testwelcome.
Activity and the leaderboard
Activity tracking counts messages and voice seconds per member, including people who were already in a voice channel when the bot started. It is the one module enabled by default. You can exclude specific text and voice channels.
Each server gets a public web leaderboard showing the top 100 members by
messages, sortable by voice hours. /leaderboard posts the link.
The page is public to anyone with the address.
Hall of Fame
Members react to a message with a star. Once it reaches your threshold between 1 and 50, default 5 — the message is reposted to your Hall of Fame channel.
- Star counts update as reactions come and go.
- Edits to the original are reflected in the post.
- Deleted originals are greyed out rather than vanishing.
- Posts can optionally be removed if they drop back below the threshold.
- Self-stars and bot messages are allowed or blocked as you prefer.
Setting a channel for the first time runs a one-time sweep of history, so an
established server does not start with an empty wall. /hof leaderboard
ranks the most-starred messages; /hof stats summarises.
Counting
Nominate a channel and members count upward, one number per message. Graffiti
tracks your server's highest count. /count stats shows where you
are and what the record is.