Summary
Design and implement a server economy system (separate from battle) that lets members earn/spend currency on custom roles/colors/emojis/stickers, single-issue vanity roles, and playful minigames (jail/hunt/break) with consent gating. Must enforce Discord resource limits (roles/emojis/stickers) and allow gifting.
Goals
- Persistent per-user balance with transaction log; gifting/transfers allowed
- Catalog of purchasable items (roles/colors/emoji/sticker/vanity/single-issue)
- Enforce capacity: roles (target ~75 free), emojis (150 still/100 gif), stickers (60)
- Consent model for minigames (jail/hunt/break): open/partners-only/off
- Single-issue roles with unique ownership and reassign/revoke logic
- Gifting supported for all redemptions
- Admin tools to manage catalog, pricing, stock, and grants
Pricing (initial catalog)
- Custom role + color (special) + emoji: 55k
- Custom role + color + emoji: 50k
- Custom role + emoji: 50k
- Custom role: 40k
- Holo: 35k
- Custom color (gradient): 30k
- Custom color (single): 20k
- Custom sticker: 40k
- Custom emoji (gif or still): 30k
- Magical Girl + emoji: 30k
- Vanity roles set: 10–20k (e.g., Princess, Indulgent Master/Mistress, Devoted Daddy, Magnanimous Mommy, Maneater, Well Behaved, Good Girl/Good Boy, Angelic, Devilish, Chaos Cutie, Bad Influence, Hellraiser, Disciplinarian, Pain Slut, Broken Bitch, Professor Daddy, Stoned Princess, Magical Girl, Vixen, Prime Prey, Huntmaster, Jester, Hellion, Silly Goose)
- Vanity emoji set: 5–10k each
- Single-issue roles (one holder): Unbreakable 50k, Seraphim 50k, Server Slut 50k, I’m Baby 50k, Breaker of Spirits 60k
- Staff perk: 1 custom color + 1 emoji free
Minigames (consent-gated)
- Jail: Wanted 1k, Jail 5k (tag someone), Jailbreak 2k (clear tag)
- Break: Break 10k (adds Broken Bitch), Redeem 8k (removes)
- Hunt: Hunted 1k, Capture (roll +1k on success to crown), Release clears role
Earning
- “Yap” accrual per message with rate limits/caps
- Bounty board tasks (tech/help/art/ads/writing) with set rewards
- Events: running (couple hundred), participation (10–50)
- Admin grants; transfers between users (optional fee)
Data Model (proposed)
economy_account (guildId, userId, balance, lifetimeEarned, lastEarnedAt)
economy_transaction (fromUserId, toUserId, type, amount, meta, createdAt)
economy_reward_catalog (per guild: code, type, price, stockType, stockRemaining, refs to role/emoji/sticker template)
economy_consent (guildId, userId, system, mode)
economy_bounty (optional) for bounty board
economy_limits cache for role/emoji/sticker capacity
Commands (slash, sketch)
/econ balance [user]
/econ transfer <user> <amount> [note]
/econ earn grant <user> <amount> [reason] (admin)
/econ catalog list|add|update|remove (admin)
/econ redeem <catalog-code> [target] (supports gifting)
/econ redeem custom-role|color|emoji|sticker … (guided inputs)
/econ consent set <system> <open|partners|off>
/econ status limits (role/emoji/sticker capacity)
- Minigames:
/econ jail wanted|jail|jailbreak, /econ break break|redeem, /econ hunt hunted|capture|release
Enforcement
- Check capacity before creation/assignment; respect single-issue stock=1
- Consent required for jail/hunt/break targets
- Rate limits on earning; daily caps for message accrual
- Append-only transactions; balance derived from sum
- Idempotent role/emoji/sticker assignment; handle gifting safely
Open Questions
- Exact pricing for epic colors/gradients per item?
- Partners-only consent: do we need partner lists or keep simple open/closed?
- Should single-issue roles auto-revoke from previous holder when reassigned? (recommended: yes)
- Daily cap for “yap” earnings; transfer fee yes/no?
Phased Rollout
- Schema + base services (accounts, txns, catalog, limits)
- Balance/transfer/redeem with capacity + single-issue enforcement
- Consent + minigame commands
- Earning hooks (messages, bounties, events)
- Admin catalog mgmt + reporting
- Optional web admin UI tab
Battle System Integration (low coupling)
- Keep battle logic unchanged; publish
BattleCompletedEvent with {guildId, winnerIds[], loserIds[], duration, turns, mode, battleResultId, timestamp}.
- Economy listens and awards currency per guild rules (win/participation amounts, daily caps); append-only
economy_transaction keyed by battleResultId for idempotency.
- Anti-abuse: ignore awards for battles under N turns or T seconds; cap rewards per day/user; optional streak bonus.
- Optional: separate battle token pool with conversion rate to main currency if inflation is a concern.
- No pay-to-win: currency cannot buy combat power; only cosmetic/profile flair if enabled later.
- Future optional hooks: tournaments with currency buy-in and pooled rewards; cosmetic titles/badges purchasable via economy.
Battle award config (schema sketch)
battle_award_rule (guildId PK, winAmount, participationAmount, streakBonusAmount, minTurns, minDurationSeconds, dailyCapPerUser, enabled, updatedAt)
battle_award_dedupe (battleResultId PK, guildId, awardedAt) to ensure idempotency for retries.
BattleCompletedEvent payload (example)
{
"battleResultId": "uuid-123",
"guildId": "1234567890",
"winnerIds": ["111", "222"],
"loserIds": ["333"],
"durationSeconds": 180,
"turns": 14,
"mode": "duel", // e.g., duel/party/pve
"timestamp": "2025-11-15T10:15:30Z"
}
Listener uses battleResultId for dedupe, applies per-guild award rule, and writes economy_transaction with a reference to battleResultId.
Summary
Design and implement a server economy system (separate from battle) that lets members earn/spend currency on custom roles/colors/emojis/stickers, single-issue vanity roles, and playful minigames (jail/hunt/break) with consent gating. Must enforce Discord resource limits (roles/emojis/stickers) and allow gifting.
Goals
Pricing (initial catalog)
Minigames (consent-gated)
Earning
Data Model (proposed)
economy_account(guildId, userId, balance, lifetimeEarned, lastEarnedAt)economy_transaction(fromUserId, toUserId, type, amount, meta, createdAt)economy_reward_catalog(per guild: code, type, price, stockType, stockRemaining, refs to role/emoji/sticker template)economy_consent(guildId, userId, system, mode)economy_bounty(optional) for bounty boardeconomy_limitscache for role/emoji/sticker capacityCommands (slash, sketch)
/econ balance [user]/econ transfer <user> <amount> [note]/econ earn grant <user> <amount> [reason](admin)/econ catalog list|add|update|remove(admin)/econ redeem <catalog-code> [target](supports gifting)/econ redeem custom-role|color|emoji|sticker …(guided inputs)/econ consent set <system> <open|partners|off>/econ status limits(role/emoji/sticker capacity)/econ jail wanted|jail|jailbreak,/econ break break|redeem,/econ hunt hunted|capture|releaseEnforcement
Open Questions
Phased Rollout
Battle System Integration (low coupling)
BattleCompletedEventwith{guildId, winnerIds[], loserIds[], duration, turns, mode, battleResultId, timestamp}.economy_transactionkeyed bybattleResultIdfor idempotency.Battle award config (schema sketch)
battle_award_rule(guildId PK, winAmount, participationAmount, streakBonusAmount, minTurns, minDurationSeconds, dailyCapPerUser, enabled, updatedAt)battle_award_dedupe(battleResultId PK, guildId, awardedAt) to ensure idempotency for retries.BattleCompletedEvent payload (example)
{ "battleResultId": "uuid-123", "guildId": "1234567890", "winnerIds": ["111", "222"], "loserIds": ["333"], "durationSeconds": 180, "turns": 14, "mode": "duel", // e.g., duel/party/pve "timestamp": "2025-11-15T10:15:30Z" }Listener uses
battleResultIdfor dedupe, applies per-guild award rule, and writeseconomy_transactionwith a reference tobattleResultId.