Guide
Everything you can set up with Packet, plus the message variables you can use in welcomes, announcements, and more. New here? Start with About for the big picture, then come back for the how-to.
Everything you can set up with Packet, plus the message variables you can use in welcomes, announcements, and more. New here? Start with About for the big picture, then come back for the how-to.
Your server is described by a blueprint— one document covering roles, channels, permissions, and Packet’s own features. Edit it on Configure, preview on Diff, then Apply. Nothing changes until you hit Apply, and Packet takes an automatic backup first.
Four steps, and the same four every time: start from a blueprint, configure it visually or with AI, review the diff, then apply.
Build these in the Configure editor, then apply — or author any of them in the blueprint directly, or with the AI generator. A glyph per group so the list reads at a glance.
Usable in any Packet-posted message (welcomes, scheduled messages, forum pings, first posts). Case-insensitive; anything unrecognized is left exactly as you typed it.
{user}Clickable mention (pings them){user.name}Display name (nick / global){user.tag}Their @handle{user.avatar}Avatar image URL — use in an embed image{server}Your server’s name{server.icon}Your server’s icon URL{memberCount}Total members (e.g. 1,234){memberCount.ordinal}As a rank (e.g. 1,234th){forum}The forum’s name{winner}The winning post{votes}Its vote count{link}Link to the post{reason}The ban reasoncase-insensitiveAnything Packet doesn’t recognize is left exactly as you typed it. In an embed’s title, author, or footer, mentions don’t render — use {user.name} there instead of {user}.
Everything you can set up with Packet, plus the message variables you can use in welcomes, announcements, and more. New here? Start with About for the big picture, then come back for the how-to.
Your server is described by a blueprint — one document covering your roles, channels, permissions, and Packet's own features. You edit it visually on the Configure page, preview exactly what will change on the Diff page, then Apply it to your live server. Nothing changes until you hit Apply, and Packet takes an automatic backup first.
Set every one of these up in the Configure editor — the section to open is noted with each — then preview the change and apply it. (You can also author any of them in the blueprint directly, or with the AI generator.)
Define your role hierarchy, colors, and per-role permissions. Role bands group roles by purpose (staff, color, activity, members) and keep them ordered correctly. Packet writes channel permission overwrites for you, so private and read-only channels are correct by construction. (Configure → Roles and Role bands.)
Name a set of permissions once and reuse it everywhere. Build a preset — a "Moderator" set, a "Read-only" set, a "Voice only" set — from the same grouped, searchable permission picker you use on a role, give it a short description, then drop it into any role's permissions or any channel's allow/deny list instead of ticking the same twelve boxes again. Edit the preset later and every place that uses it follows, so a permission you meant your whole staff to have never ends up half-applied. (Configure → Permission presets.)
Text, voice, forum, announcement, and stage channels, organized into categories — created, renamed, moved, and kept in sync. Rename anything and Packet re-points every reference automatically. (Configure → Channels.)
Discord's Community features rely on three designated channels: the Rules channel, the Community updates channel Discord posts admin notices to, and the Safety alerts channel where raid warnings land. Point each one at a channel by name and Packet keeps the designation attached to it, so renaming, moving, or replacing that channel doesn't quietly break the pointer. All three have to be text channels, and the editor warns you if one isn't. Discord wants Community set up before announcement channels, stage channels, and the onboarding wizard below are available at all. (Configure → Community.)
A message members click to add or remove their own roles (buttons or a dropdown). Use several pickers to split menus by topic or across channels, and auto-assign roles on join. Looking for reaction roles? Same idea, without the emoji. Members click a button or pick from a dropdown instead of reacting, and one menu can offer up to 25 roles. (Configure → Role Caller.)
Let members pick their own name color. Offer a preset palette (organized into a single-select menu, auto-split across menus if it's large), or enable custom colors so members choose any hex color via a button. (Configure → Color roles for the palette; Custom colors for the pick-your-own option.)
Auto-assign a hoisted role while a member is playing a game or using an app (for example, a "Playing ARK" role, or a "Listening to Spotify" role) — removed shortly after they stop, so the member list groups people by what they're doing. (Configure → Activity roles.)
Sticky roles restore a member's roles when they rejoin. Temporary roles let
staff grant a role that auto-expires, via /temprole. (Configure → Role Caller.)
Post a message when a member joins, leaves, or is banned — plain text, a
rich embed card, or both. Add an optional pinned welcome panel (a kept-in-sync
rules/welcome board) and an optional welcome DM. Uses variables like {user} and
{memberCount}, plus {rolepicker} for a line pointing at your Role Caller menu and
{reason} on a ban announcement (see Message variables below).
(Configure → Greeter.)
Post a message to a channel on a schedule — every few hours, or on set days and times in your timezone (e.g. every Friday at 6pm, daylight-saving aware). Plain text or a rich embed. A Send now button posts on demand. (Configure → Scheduled messages.)
Run a community-engagement loop on a forum: Packet periodically opens a poll of the
top posts, announces the winner, and can run a follow-up "should we implement it?"
vote. It can also post and pin a first post (rules / how-it-works), archive stale
threads, and ping a role when a poll opens. Configure tags, the default reaction, and
guidelines per forum. Posts here can use {forum}, and a winner announcement also gets
{winner}, {votes} and {link}. (Configure → Forums.)
Build Discord's "Customize Your Server" wizard — the questions a member answers on the way in. Write prompts as buttons or a dropdown ("What do you play?", "What should we ping you for?"), each with options that grant roles and unlock channels when they're picked; mark a prompt required, single-select, or available later on rather than during the wizard itself. Set the default channels every new member lands in, and choose whether Discord also suggests channels of its own or shows only what you wrote. It's the fastest way to get someone into the right rooms with the right roles before they ever open a role picker. Needs Community set up first. (Configure → Onboarding.)
Discord's invite-time welcome screen (a description plus up to five channel shortcuts) and the embeddable server widget — both kept in sync, with a copy-ready embed builder for the widget. (Configure → Welcome & widget.)
Periodically capture a backup of your whole server on a schedule, keeping the most recent N. Automated snapshots are tamper-resistant — they can't be deleted manually, so your safety net stays intact. (Configure → Auto snapshots.)
Discord's native AutoMod, in your blueprint: keyword filters, username (member-profile) filters, the built-in profanity / sexual-content / slur presets, spam blocking, and mention-spam limits — each with exempt roles/channels and actions (block the message, send a staff alert, time the member out, or quarantine them). (Configure → AutoMod.)
Announce when a creator goes live or posts — your own channels or your favorite creators, Packet just watches public feeds. It posts a rich card to the channel you pick, exactly once per stream or post (no spam, no duplicates). (Configure → Social alerts.)
Platforms you can watch (what to put in the Creator box):
| Platform | What it announces | Creator field |
|---|---|---|
| Twitch | Goes live | Twitch username — shroud |
| Kick | Goes live | Kick username — xqc |
| YouTube | New upload | Channel ID — UC… (not the @handle) |
| New post | r/subreddit or u/username | |
| GitHub | New release | owner/repo — facebook/react (or owner/repo/commits) |
| Steam | Game update | App ID — the number in the store URL, e.g. 346110 |
| Bluesky | New post | Handle — name.bsky.social |
| Mastodon | New post | @[email protected] |
| RSS / Atom | New item | Any feed URL — covers blogs, podcasts, Substack, Medium, and more |
Setup: open Configure → Social alerts, + Add alert, pick a platform, paste
the creator, and choose the channel to post in. Twitch and Kick need a one-time setup
by the bot's operator (a free developer app — see .env.example); every other platform
works out of the box. Hit Send test alert to preview the card — it uses the
creator's most recent post (or current stream), so you can see a real alert without
waiting, even for someone who rarely posts.
Post style — each alert is one of two styles (pick it per alert; new alerts start on the recommended one for that platform, and you can switch any time):
Make it yours — each alert can also have:
Alert variables (for the message + embed): {creator}, {title}, {url},
{game}, {viewers}, {platform}, {thumbnail} (the post's own image), and
{mention} (the ping role). Plus {server} and {memberCount}. For example:
{mention} **{creator}** is live playing {game}! {url}
Not supported (yet): TikTok, X/Twitter, Instagram, Facebook, and Threads don't offer a free way to watch arbitrary creators, so they're not available. Many of those creators cross-post to a platform above — watch them there.
Moderate your server from /mod in Discord: warn, mute (timeout), kick, and
ban members — each recorded as a numbered case with its reason, and /mod history
shows a member's whole record. Set up an escalation ladder so Packet auto-mutes, kicks,
or bans once a member accumulates enough strikes. Discord's own actions (a manual ban, an
AutoMod timeout) can feed the same record, so repeat offenders escalate even when no staff
are online. In Configure, choose the mod-log channel, which staff roles are exempt, whether
the member gets a DM, and the escalation thresholds. (Configure → Moderation; the actions
themselves are /mod commands in Discord.)
Keep a record of your server's activity. Packet mirrors joins and leaves, nickname and role changes, bans and kicks, channel and server edits, and members using Packet's own features — to a log channel in Discord AND a dashboard activity feed on the server's Status page. Route different kinds to different channels, exempt certain roles or channels, choose who each log entry posts as, and set how long the dashboard feed keeps history. (Configure → Logging.)
Let members open private, staff-only help rooms. Post a panel with a button members click
to open a ticket, and Packet creates a private channel and writes the permissions itself, so
a ticket can't leak. Staff claim, reply, close, and triage tickets right in
Discord (/ticket) or from a full dashboard with search, filters, priorities, tags, and canned
replies — and a cross-server Tickets hub manages every server you run in one place. Set the
staff roles, an auto-close timer for idle tickets, a satisfaction survey on close, and optional
questions asked before a ticket opens. A panel's opening message can use {ticket} and
{opener}. (Configure → Tickets.)
Stop running out of voice channels. Point Packet at a hub channel and it makes rooms
on demand, in one of two shapes. A clone hub leaves the hub itself perfectly usable
and keeps one spare numbered channel trailing the set (Lounge 1, Lounge 2, and so on),
so there's a free room the moment the last one fills — and empties clean themselves up.
A personal hub is join-to-create: joining moves the member into a room of their own
with a control panel to rename it, lock it, set a user limit, permit or kick
someone, or hand it over. Personal rooms can start open to everyone, open to one role,
or locked until the owner lets people in. Give a hub a role and those members can also
call up a room with /voice create. Name new rooms with a template, using {user.name}
and {game} for whatever the owner is playing. (Configure → Voice.)
Put a live status card for your game server in Discord. Give Packet the address and port, pick the game, and name the channels to post it in — Packet re-checks on a timer and edits the same message in place, so the channel shows current status instead of filling up with repeat posts. When a check finds nothing has changed, the card is left alone rather than rewritten with the same words, so the Last updated time on it tells you how long the server has been steady. A card can show players online, the map, the version, a copy-ready connect address, response time, how much of the time Packet has been able to reach the server, and the busiest it has seen — and it can go green when the server is up and red when it isn't. When Packet can't reach it, the card says so plainly: the player count disappears rather than showing a made-up zero, while the connect details stay put so people know where to try. Enshrouded and 7 Days to Die are named directly, plus a Source query option for other games that answer the same standard query. Start from a ready-made card and edit it, laying it out with the board variables listed under Message variables below. (Configure → Game servers.)
Reward the members who actually show up. Packet counts messages and time spent in
voice and turns them into XP, with a cooldown between earns and an optional daily
ceiling so nobody can farm it — voice earning can require other people in the channel,
skip the AFK channel, and pause while someone is muted. Say where it counts, too: name
channels, categories, or roles that never earn, and a bot-command or spam channel
stops feeding the leaderboard. A category covers every channel inside it, including ones
you add later, and threads follow the channel they live in. Or turn it around and name
the only places where chatting and talking count. Set level rewards to hand out
a role at a level: they're free, unlimited, and stackable, so one level can grant
several roles, and a role can come back off if a member later falls below it. Choose how
a level-up is announced — in a channel, by DM, as a reply where it happened, or not at
all — and write that announcement yourself with {level}, {xp} and {rank}. Shape
the level curve so ranks arrive as quickly or as slowly as you want.
Post a self-updating leaderboard in any channel, all-time or by day, week, or month.
Members check themselves with /level rank, which draws a card showing their level, where they
stand, how far they are into the next level, their coins and their daily streak. The style option
picks the look.
(Configure → Leveling & economy.)
Add a second, spendable currency alongside XP and you have an economy. Coins come
from the same chatting and talking that earns XP, plus a daily claim that grows the
longer a member keeps their streak, an hourly top-up, and a small random handout on a
short cooldown — each with its own limits. Coins can also land automatically every time
someone levels up. Members spend them in the shop: up to twenty-five items, each a
role at a price you set, listed on a managed message in its own channel or opened
privately with /economy shop. Nobody can buy a role they already hold. Members can check
their balance, read a full history of where their coins went, and rank each other
on a richest-members board — and you set whether those replies post publicly, clear
themselves after a few seconds, or stay private, which each member can change for
themselves. (Configure → Leveling & economy.)
A full arcade, and every game is off until you switch it on. Coinflip, Dice,
Rock Paper Scissors, Slots, Roulette, Blackjack, Baccarat, Keno,
Video Poker, Higher or Lower, Crash, Mines, Tower, the Spinner,
Scratch Cards and a plain Bet all share one set of settings — switch it on, set
the smallest and largest wager, add a cooldown, and give it a channel. The house
takes no cut: a wager pays what the game itself pays. Trivia earns instead of
wagering — up to ten independent setups, one per channel, each with its own format, theme,
and difficulty. Duels stake two members against each other, and a private room
lets a member play somewhere quieter. Add boards and Packet keeps a how-to and a
launch button at the bottom of every game channel, and /game guide explains whatever
you turned on. (Configure → Leveling & economy.)
Every game played against the house feeds one growing House Prize Fund, so members watch a single number climb instead of three unrelated ones. It's won outright by 💎💎💎 on the slots, a 🚀 on the spinner, or 👑👑👑 on a scratch card — and you set a guaranteed minimum the pot builds toward, a ceiling on how large it can grow, and whether a winner takes the lot or leaves some to roll over. The same fund pays a tournament: a daily, weekly, monthly, or calendar-scheduled contest where the top players split a prize, ranked by most wins, biggest single win, net profit, or total wagered. And it pays a lottery — a scheduled draw where members buy tickets with coins, every coin of which goes into the fund. You can also cap the largest payout any single play may make. (Configure → Leveling & economy.)
If you run more than one Discord server, you can link them into a group so members build one level
and rank across the whole set, not just a single server. It layers on top of what they already earn
locally: their own server's level keeps working exactly as before, and the group adds a combined
ladder alongside it. See it with /level rank, scope set to Server group, and post a
self-updating group leaderboard the same way you'd post a server or global one. Level rewards, the
automatic roles members get at a level, can key off the group's level too.
Linking servers is mutual by design. Every server in the group lists the same servers, including itself, by server ID. The group only turns on once every server on that list has listed every other one back, so no server can attach itself to a group without the rest agreeing. One server takes the lead and sets the group's overall pace, and a live check in Configure shows exactly which servers still haven't reciprocated. If a group ever stops being mutual, its leaderboard quietly disappears until it's active again. A group can hold up to 50 servers.
Off by default. (Configure → Leveling & economy.)
Opt in to Packet's own announcements. Pick a channel and Packet posts new features, fixes, and news there as a clean, managed message — so you find out what's new without leaving your server. Add a ping role if you want members notified. (Configure → Packet updates.)
Almost everything Packet posts can carry variables: welcomes, scheduled messages, forum posts and announcements, level-up messages, a ticket panel's opening message, social alerts, and game server boards. You type them into the field, and they're filled in when the message is sent. They're case-insensitive, and anything Packet doesn't recognize is left exactly as you typed it, so a typo shows up rather than quietly vanishing.
| Variable | Becomes |
|---|---|
{user} / {user.mention} | A clickable mention of the member (and it pings) |
{user.name} | Their display name (nickname / global name) |
{user.username} | Their Discord username, with no @ in front |
{user.tag} | Their @handle |
{user.id} | Their numeric Discord ID, handy in a staff or log channel |
{user.avatar} | Their avatar image URL (use in an embed image field) |
{server} / {server.name} | Your server's name |
{server.icon} | Your server's icon URL |
{memberCount} / {server.memberCount} | Total members (e.g. 1,234) |
{memberCount.ordinal} / {server.memberCount.ordinal} | Member count as a rank (e.g. 1,234th) |
Where each one works. The {user.*} group needs somebody to point at, so it only
fills in where a message is about one member: the Greeter's welcome, goodbye and ban
messages, and the welcome DM. Everything else can use {server} and {memberCount}.
The pinned welcome panel is a single post that Packet edits rather than a message per
member, so put {server} there and save {user} for the join message.
And each feature adds its own on top.
| Where | What it adds |
|---|---|
| The Greeter | {rolepicker}, a line pointing at whichever channel your Role Caller menu sits in. It fills in as nothing at all if you haven't set one up, so the sentence around it still reads fine. A ban announcement also gets {reason} |
| Forums | {forum}, the forum's name. A winner or veto announcement also gets {winner}, {votes} and {link} |
| Leveling | {level}, {xp} and {rank} in the level-up message |
| Support tickets | {ticket}, the ticket's number, and {opener}, a mention of whoever opened it, in a panel's opening message |
| Dynamic voice channels | {game}, what the room's owner is playing, for naming the room after it |
| Social alerts | {creator}, {title}, {url}, {game}, {viewers}, {platform}, {thumbnail} (the post's own image), and {mention} (the ping role, or nothing when there isn't one) |
| Game server boards | A whole vocabulary of its own, below |
A board's card is yours to lay out, and these are the pieces you build it from. The first group stays on the card whatever happens, because it's either something you typed or something Packet knows from its own record of checking. The second group comes from the server itself, so when Packet can't reach it those pieces drop out rather than showing a stale or made-up number.
| Always on the card | Becomes |
|---|---|
{boardname} | The name you gave this board |
{statusemoji} | 🟢 when the server is up, 🔴 when it isn't |
{status} | Online, or a short line saying Packet couldn't reach it |
{lastchecked} | When Packet last got an answer, as a live "5 minutes ago" |
{uptime} | How much of the time Packet has been able to reach the server |
{uptimesince} | When Packet started keeping that count |
{uptimebar} | The same figure drawn as a bar |
{peakplayers} | The busiest Packet has seen the server since then |
{game} | The game this board is for |
{address} | The address you configured |
{port} | The port you configured |
{connect} | Address and port together, ready to copy |
| Only when the check succeeds | Becomes |
|---|---|
{players} | How many people are on right now |
{maxplayers} | How many slots the server has |
{playerbar} | Players against slots, drawn as a bar |
{map} | The map the server is running |
{servername} | The name the server calls itself |
{version} | The version the server reports |
{passwordprotected} | Whether joining needs a password |
{longestsession} | How long the longest-running session has lasted |
{latency} | How quickly the server answered |
A board you've only just set up hasn't been checked yet, so the uptime and last-checked pieces have nothing to show until the first check goes out. Anything left unfilled shows as the variable you typed, which is your cue that it isn't available on that card.
@RoleName (the exact role name) to ping a role. @everyone and @here work
too.#channel-name (the exact channel name) to turn it into a clickable channel
link.One catch: Discord only renders mentions in a message's body and inside an embed's
description or field values — not in an embed title, author, or footer.
In those spots, use {user.name} (a plain name) instead of {user} (a mention), or
they'll show as raw code. (Packet handles this for you in titles — {user} there shows
the name automatically.)
Greeter messages, scheduled messages, forum posts, game-server boards, and social alerts
can include a rich embed: a title, description, accent color, author line, thumbnail and
banner images, fields, footer, and a timestamp. Set {user.avatar} as the thumbnail for a
welcome card, use {memberCount} in the footer, and so on. Leave the embed blank for a
plain-text message.
The thumbnail and banner take a link to an image, not an upload — so the image needs to live somewhere online first. Two easy options:
.png or .jpg (e.g. i.imgur.com/abc123.png), not the page the image is
displayed on. This is the single most common mistake: a page link shows nothing.Any public link straight to an image file (.png, .jpg, .gif, .webp) works. Keep it
reachable — the card links to your image rather than keeping a copy, so if you delete
it or make it private, the picture stops showing on the card.
Your server's icon, banner, emoji and stickers work differently: add those in Discord directly. Packet doesn't upload images for them.