K
Docs
Building Bots

🎴 Packs

Packsare booster add-ons that inject pre-built library sparks into your bot's Canvas. Filter word lists, validation regexes, 8-ball answers, jokes, and more — curated, tested, and ready to use with zero configuration.

⚙️How Packs Work

Unlike Expansions (which unlock new Piece types), Packs add library sparks — pre-built values accessible as {{lib.*}} in any Piece config. Think of them as named constants your bot can reference.

1
Add pack to bot
Open Packs in the sidebar, click "Add pack"
2
Sparks appear
Canvas autocomplete shows lib.* entries from the pack
3
Use in flows
Reference with {{lib.filter.profanity}} anywhere in config
📐Under the hood — Pack types in TypeScript
TypeScript
interface PackDef {
  id: string;       // e.g. "naughty"
  name: string;     // "The Naughty List"
  tagline: string;
  emoji: string;
  sparks: PackSpark[];
}

interface PackSpark {
  id: string;           // e.g. "filter.profanity"
  label: string;        // Canvas label
  hint: string;         // Description
  sparkType: SparkType; // "string" | "array"
  emoji: string;
  value: string | string[]; // The actual data the Engine injects
}

// In the Kit:
// { "packs": ["naughty", "patterns", "party"] }
// Sparks then available as {{lib.filter.profanity}}, {{lib.validate.email}}, {{lib.fun.jokes}}, etc.

📋Pack Catalog

🚫
The Naughty List
Content filtering, preloaded
naughty

Bad words, slurs, spam phrases, Discord invite links, external URLs, and caps detection — all pre-written and ready to drop into your Conditions. Santa's got nothing on this list.

Sparks (6)
🤬
{{lib.filter.profanity}}array
Array of common profanity and strong language
⛔
{{lib.filter.slurs}}array
Array of racial, ethnic, and identity-based slurs
📨
{{lib.filter.spam_phrases}}array
Array of common spam and scam phrases
🔗
{{lib.filter.discord_invite}}regex
Regex — detects Discord invite links (discord.gg/...)
🌐
{{lib.filter.external_links}}regex
Regex — detects any http or https URL
📣
{{lib.filter.excessive_caps}}regex
Regex — detects 4+ consecutive uppercase characters (SHOUTING)
🔬
The Pattern Lab
Regex for the rest of us
patterns

Email, URL, phone, Discord ID, invite links, hex colors, IPs, and digits-only — validated with battle-tested regex patterns. No regex knowledge required.

Sparks (8)
📧
{{lib.validate.email}}regex
Regex — validates email address format (user@domain.tld)
🌐
{{lib.validate.url}}regex
Regex — validates http/https URLs
📞
{{lib.validate.phone}}regex
Regex — validates international phone numbers (E.164 style, optional +)
🆔
{{lib.validate.discord_id}}regex
Regex — validates Discord snowflake IDs (17–20 digit numbers)
💌
{{lib.validate.discord_invite}}regex
Regex — validates a Discord invite link or code
🎨
{{lib.validate.hex_color}}regex
Regex — validates hex color codes (#RGB or #RRGGBB)
📡
{{lib.validate.ip_address}}regex
Regex — validates IPv4 addresses (0.0.0.0 – 255.255.255.255)
🔢
{{lib.validate.number_only}}regex
Regex — validates that a string contains only digits (0–9)
🎉
The Party Pack
Instant fun, zero typing
party

8-ball answers, jokes, compliments, gentle roasts, would-you-rathers, truth-or-dare prompts, fortunes, and icebreakers — hundreds of lines ready for any Random Pick. Your bot is now the life of the party.

Sparks (9)
🎱
{{lib.fun.eight_ball}}array
The 20 classic Magic 8-Ball answers
😂
{{lib.fun.jokes}}array
30 clean one-liners and dad jokes
💖
{{lib.fun.compliments}}array
25 wholesome compliments
🔥
{{lib.fun.roasts}}array
20 gentle, friendly roasts
🤔
{{lib.fun.would_you_rather}}array
25 "Would you rather…" questions
🫢
{{lib.fun.truths}}array
20 truth questions for truth or dare
😈
{{lib.fun.dares}}array
20 dares you can actually do in Discord
🥠
{{lib.fun.fortunes}}array
20 fortune-cookie fortunes
🧊
{{lib.fun.icebreakers}}array
25 conversation starters — great for a question of the day

📐Arrays vs Regex sparks

Pack sparks come in two flavors — each used slightly differently in conditions.

📋 Array sparks

A list of strings — check if a value is contained in the list, or let Random Pick choose one line.

{{message.content}}in{{lib.filter.profanity}}
🔤 Regex sparks

A regex pattern — check if a value matches the pattern.

{{message.content}}matches{{lib.filter.discord_invite}}

💻Using pack sparks in a flow

In a Condition piece, reference library sparks the same way as any other spark. Below: Kit JSON on the Canvas, then the equivalent moderation check in TypeScript.

condition node configJSON
{
  "id": "node_check",
  "piece": "base.condition",
  "config": {
    "left": "{{message.content}}",
    "operator": "matches",
    "right": "{{lib.filter.discord_invite}}"
  }
}
📐Under the hood — Equivalent checks in TypeScript
TypeScript
// Array spark — profanity list from The Naughty List pack
const badWords: string[] = lib.filter.profanity;
const words = message.content.toLowerCase().split(/\s+/);
const hasProfanity = words.some((w) => badWords.includes(w));

// Regex spark — invite link pattern from Patterns pack
const invitePattern = new RegExp(lib.filter.discord_invite, "i");
const hasInvite = invitePattern.test(message.content);

if (hasProfanity || hasInvite) {
  await message.delete();
}

List sparks also plug straight into a Random Pick. Put one in its items and the bot picks a fresh line every time — a whole /8ball spell in two pieces.

random pick node configJSON
{
  "id": "node_answer",
  "piece": "base.random",
  "config": {
    "items": "{{lib.fun.eight_ball}}",
    "as": "answer"
  }
}
📐Under the hood — Equivalent pick in TypeScript
TypeScript
// List spark — 20 classic answers from The Party Pack
const answers: string[] = lib.fun.eight_ball;
const answer = answers[Math.floor(Math.random() * answers.length)];

await interaction.reply(`🎱 ${answer}`);
✨Kit knows the packs

Ask Kit for an 8-ball, jokes, or truth or dare and it uses these sparks instead of writing the lists out — and opens the pack for you when you bind.

📄Packs in the Kit

Active packs are stored as pack IDs on your bot (set in the Packs tab). When you publish or export, their contents are baked into the Kit as settings.lib, which is where {{lib.*}} sparks resolve from.

💡Good to know

Packs are free. You can add as many as you want to any bot. They don't count against any limits and are included in export bundles — the Mini Engine resolves them identically.