🎴 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.
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
naughtyBad 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.
{{lib.filter.profanity}}array{{lib.filter.slurs}}array{{lib.filter.spam_phrases}}array{{lib.filter.discord_invite}}regex{{lib.filter.external_links}}regex{{lib.filter.excessive_caps}}regexpatternsEmail, URL, phone, Discord ID, invite links, hex colors, IPs, and digits-only — validated with battle-tested regex patterns. No regex knowledge required.
{{lib.validate.email}}regex{{lib.validate.url}}regex{{lib.validate.phone}}regex{{lib.validate.discord_id}}regex{{lib.validate.discord_invite}}regex{{lib.validate.hex_color}}regex{{lib.validate.ip_address}}regex{{lib.validate.number_only}}regexparty8-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.
{{lib.fun.eight_ball}}array{{lib.fun.jokes}}array{{lib.fun.compliments}}array{{lib.fun.roasts}}array{{lib.fun.would_you_rather}}array{{lib.fun.truths}}array{{lib.fun.dares}}array{{lib.fun.fortunes}}array{{lib.fun.icebreakers}}array📐Arrays vs Regex sparks
Pack sparks come in two flavors — each used slightly differently in conditions.
A list of strings — check if a value is contained in the list, or let Random Pick choose one line.
A regex pattern — check if a value matches the pattern.
💻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.
{
"id": "node_check",
"piece": "base.condition",
"config": {
"left": "{{message.content}}",
"operator": "matches",
"right": "{{lib.filter.discord_invite}}"
}
}// 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.
{
"id": "node_answer",
"piece": "base.random",
"config": {
"items": "{{lib.fun.eight_ball}}",
"as": "answer"
}
}// 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}`);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.
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.