Documentation menu

Docs/Plugins/Games

Games

A per-server economy - earnable currency, casino games and bank heists, fishing, investing, a role shop, and rank-card flair.

Requires the GAMES feature.

A full economy for your server. Members earn a currency you name yourself, gamble it on button-driven casino games, pay each other, and spend it on roles and rank-card cosmetics you put up for sale. Every game runs in a single message that updates in place - no channel spam.

plugins:
  games:
    currency_name: Doubloons        # what your money is called
    currency_emoji: "<:gold:1234567890>"   # optional custom emote
    starting_balance: 100           # seeded on a member's first use
    games_channels: [674638268135047186]   # empty = games anywhere
    daily:
      amount: 200                   # base daily payout
      streak_bonus: 25              # extra per consecutive day
    slots: { min_bet: 10, max_bet: 5000 }
    blackjack: { enabled: true }
    rob: { enabled: false }         # off unless you turn it on
    shop:
      roles:
        674638268135047186: { price: 5000, description: Gold name color }
    public_leaderboard: true

The dashboard's Setup → Games page edits all of this with pickers and per-game cards, and saving it is what enables the plugin. Everything has a sane default - an empty games: {} block is a complete setup.

Setup checklist

  1. Confirm the server has GAMES, then open Setup > Games.
  2. Choose the currency name, symbol, starting balance, and allowed game channels before members create wallets. The starting balance applies on a member's first use, not every time the setting changes.
  3. Review each faucet and game. Disable anything your community does not want, especially rob, drops, market trading, and server bets, which are opt-in or have broader social effects.
  4. Set min and max wagers, cooldowns, wallet cap, transfer tax, and daily send cap. Keep early payouts small enough that a configuration mistake cannot flood the economy.
  5. If selling roles, put each role below HepBoat and test with a disposable role first. If selling flair, confirm image rank cards are enabled so purchases have something to display on.
  6. Save and run balance, daily, and one no-wager browsing command as a test member. Inspect the Games dashboard ledger and economy health figures.
  7. Test one tiny wager, one member payment, and one disposable shop purchase. Confirm debits, credits, refunds, and role delivery in the ledger.
  8. Publish the public leaderboard only after deciding whether member balances should be visible outside Discord.

Changes to odds, payouts, or prices do not rewrite old ledger entries or purchase history. Tune forward from the current economy instead of expecting a config edit to recalculate past play.

Currency and earning

Every member has a wallet, checked with balance and topped up by:

  • daily - once per day (UTC), with a streak bonus that grows every consecutive day and one-time milestone bonuses (days 7, 30, and 100 by default).
  • work - a safe payout on a cooldown (an hour by default).
  • crime - a bigger payout, but with a real chance of being fined instead.
  • rob - steal from another member, with a penalty for getting caught. Off by default; a server has to opt in. Members can buy a shield that blocks one rob attempt each, bought from the menu on shield, and servers can also price a permanent shield that blocks every attempt forever. Robbing up the wealth ladder is harder by default: the richer the target is compared to the robber, the lower the odds (every 10x gap cuts them further - turn this off with wealth_scaling: false). You can also list protected roles on the dashboard Games page - members holding one can never be robbed at all, which keeps staff and shop sellers out of the crossfire. For a bit of fun there is also grave robbing (grave_robbing: true, off by default): a heist against someone who has left the server or been banned always succeeds - they are not around to catch anyone. Their wallet still has to meet the minimum balance, and shields still block the attempt.
  • Level-up rewards - with level_up_reward enabled, members earn currency every time they level up (see the Autolevel plugin).
  • fish - a calm collection loop: cast on a cooldown, log every species you have ever caught, and sell the surplus with fish sell - selling keeps one of every species, so holding a fish IS having collected it. fish sell all sells your collection copies too if you really want the money. fish collection shows your log, and its footer prices both your sellable surplus and your collection in full. Every cast comes with Cast again and Sell surplus buttons on the same message, so one message hosts your whole session instead of filling the channel. The Sell button waits five minutes between uses, greys out when you have nothing spare, and only ever sells surplus; the fish sell command has no cooldown and is still the way to sell as often as you like, or to sell everything. fish sell all asks you to confirm first, since it sells the last of every species.
  • Every cast lists the buffs in play - each bait, each rod, your vessel, and the Deep - and what each one is worth once the stack is applied. Rarity boosts diminish as you add more, so the second and third sources count for less than the first; the board shows both the face value and what it actually counts for, followed by your total chance to hook a tier higher. Anything else affecting the cast is listed too: a faster cooldown with the real before and after, how many fish the cast lands, your sale bonus, and any deeper pond a rod has unlocked. Only what is actually in effect is shown, so a plain rod and no bait says exactly that. While the Deep is open it gets its own line, including the part people miss - it halves your cooldown and boosts rarity, but every cast lands a single fish.
  • Three ponds - pick yours with fishing.pool (also on the dashboard Games page): standard (the original 17 species), expanded (81 species with a mythic top end), or the abyss (200 species, adding the relic tier between legendary and mythic, and the ultra rare exotic tier - about one cast in fifty thousand - crowned by Lord Jawbus at 250,000 coins).
  • Sizes and shinies - every catch rolls a size from 0.5x to 3x. The top one percent are trophy catches that pay an instant bonus and go on the server's fish trophies board. Around one catch in five hundred is shiny - it sells for five times the price, and selling keeps your shiny copy whenever it can.
  • Bait and rods - fish shop sells whatever the server stocks. Bait raises the chance a catch comes up one rarity tier (holding several baits stacks with diminishing returns, so you cannot buy your way to guaranteed legendaries). Rods are permanent, and every rod is your server's own: a rod can speed up casts, add a tier-upgrade chance, pay more on sales, unlock a deeper pond, and land up to 3 fish per cast. Buy with the menu on fish shop.
  • Multi-catch rods - a rod that lands 2 or 3 fish gives you that many real catches on one cast and one cooldown, each with its own species, rarity, and shiny or trophy roll. Owning a 2x and a 3x rod lands 3, not 5. While The Deep is open a multi-catch rod lands one fish, because that window already halves cooldowns and boosts rarity.
  • Collection milestones - reaching a set number of distinct species pays a growing coin reward. The default ladder is 25 / 50 / 100 / 150 / 200, and servers can set their own. Completing all 200 built-in species earns the global Master Angler badge.
  • The Deep - when enabled, a cast can rarely rip the water open: for the next few minutes everyone's casts recover twice as fast and rare pulls are far likelier. Get your lines in.
  • Weekly tournament - when enabled, one recurring window a week where casts score points by rarity (servers can set the points each rarity is worth). Only the first catch of a cast scores, so multi-catch rods do not take over the board. When the window closes the top three are announced and paid automatically.
  • Badge fish - the HepTrout Prime (in every pond) and each of the four exotics grant their own global badge, shown on your rank card in every server. The first time an exotic species is landed in your server, the catch is announced as a server first.
  • Coin drops - when enabled (off by default), a pouch of currency occasionally drops in active chat with a single Grab button; first click keeps it. Configure the amounts, pace, and channels - each listed channel drops on its own timer with a little added jitter, so multiple channels never drop in lockstep, and delete_after_seconds can sweep resolved drop messages out of chat automatically.
  • crash - strap your bet to the rocket and watch the multiplier climb. Cash out before it explodes and you keep your stake times the multiplier; wait one tick too long and it is all gone. The crash point is decided the moment the round opens, so no amount of timing skill changes the odds - the configured house edge is all the house ever takes.
  • arrest and pardon let your staff bar a member from games and the economy. arrest {user} [duration] [reason] locks them out of every game, the faucets, the shops, fishing, transfers, and investing. Leave the duration off to make it permanent, and pardon {user} releases them early. They can still check their balance and the leaderboards, so they can see what they are missing, and it never blocks your staff economy commands. A failed bank heist applies the same lockout. Both actions are recorded in your mod log, and neither creates an infraction, so an economy timeout does not clutter the moderation history you read when judging a member. arrested {user} checks someone's status.
  • bank-heist - stake coins, open a lobby, and up to three others can join with a button before the window closes. Then one roll decides it for everyone. A bigger crew has better odds, but the vault is a fixed pot split by what each of you put in, so a smaller crew takes a bigger share of the same money. Going alone is the longest odds and the biggest payday, and it is meant to be a real choice rather than a mistake. Failing can cost your stake, a further share of your balance, and can get the whole crew "arrested" - locked out of every game for a while, not just heists.
  • icebreaker - a penguin hops a row of ice floes, and every floe is thinner than the one before it. The board tells you the odds on the next floe and what it pays before you press Jump, and you can cash out between any two jumps. Make it and the multiplier keeps climbing, faster each time; fall through and the bet goes under with the penguin. The early hops are close to safe and pay very little, and reaching the far shore pays enormously precisely because almost nobody does. Payouts are worked out from the real odds, so the server's house edge is the same wherever you choose to stop, and no stopping rule beats another. If you walk away mid-run, HepBoat cashes you out at whatever you had already cleared.
  • The tackle shop also sells vessel upgrades: timed improvements fitted to the SS HepBoat itself. A personal upgrade helps you; a crew upgrade helps everyone in the server for its duration, which is why it costs what it costs. Upgrades can raise what fish sell for, improve your odds of a rarer pull, and add extra fish per cast, and they stack with your bait and rods rather than replacing them. fish shop shows what is fitted right now and when it runs out, and buying one you already have extends it rather than wasting it.
  • invest - when the server enables its market, invest <amount> buys into a shared index that moves up or down on a schedule. invest portfolio shows your position and the latest move, invest sell cashes out at the live price. Server staff can tune how often it moves, how violently, and even give it a drift - watch the trend before you buy.

pay sends currency to another member. Transfers can carry an optional tax that is removed from the economy, and an optional per-day send cap - both useful if your server prints too much money or you worry about alt farming.

richest shows the wealthiest members on an interactive board: page through with arrows, or flip between all-time balances and who EARNED the most this week or month.

With happy_hour configured, daily/work/crime payouts multiply during recurring weekly windows you schedule (in your own timezone) - a reliable way to concentrate activity.

Games

Eight games, each with its own enable switch, bet limits, and cooldown. Bets accept plain numbers plus 2k, half, and all. A bet is taken the moment a game starts and paid back on the result - if the bot ever restarts mid-game, the stake is refunded automatically.

Cooldowns are short anti-spam gaps (a few seconds by default, tunable per game on the Games page), tracked per member, per game, per server. Playing too soon tells you exactly how long is left, and an early click never resets the timer - the window keeps running from the last real play.

  • Slots (slots <bet>) - a three-reel machine with a fixed, honest paytable that returns about 88% over time. Spin again from a button on the same message. A share of every losing bet feeds a progressive jackpot shown quietly on the machine - triple 💎 wins the whole pot on top of the 200x.
  • Blackjack (blackjack <bet>) - hit, stand, or double with buttons. Blackjack pays 3:2, and the dealer has to keep drawing while your hand beats theirs - they catch you or bust trying. Going idle stands automatically.
  • Coinflip (coinflip <bet> <heads|tails>) - solo flips pay 1.95x on a win. Name an opponent to challenge them instead: they accept or decline with a button, and the winner takes the whole pot - member duels are zero-sum, the house takes nothing.
  • Higher or Lower (highlow <bet>) - guess whether the next card is higher or lower (ties lose). Each correct guess climbs a multiplier ladder up to 4.8x; cash out any time after your first win, or bust and lose it all.
  • Roulette (roulette <bet>) - a European single-zero wheel on one board of buttons: red/black, even/odd, and dozens pay 2x and 3x, and the brave can ride the green zero for 36x. Every bet carries the same honest edge.
  • Dice (dice <bet> <over|under|seven>) - two six-sided dice against the house. Over (8-12) and under (2-6) pay 2.3x on a 15-in-36 chance; calling exactly seven pays 5.5x on 6-in-36. Roll again from the buttons on the same board - every payout is printed on the buttons themselves.
  • Horse Race (horserace <bet>) - back one of six horses and watch the race play out on the board. The favorite pays 3x, the longshot 15x, and every horse carries the same honest edge - longshots just swing harder. Staff can rename the six horses under Setup - Games on the dashboard; names are cosmetic, so each lane keeps its odds and payout no matter what you call it.
  • Rock Paper Scissors (rps <bet> <member>) - challenge another member for an equal stake. Your stake is held when you post the challenge, theirs when they accept; then both of you throw in secret, ties replay for the same pot, and the winner takes both stakes. Member-vs-member is zero-sum - the house takes nothing. Walking away without throwing forfeits.

games_channels fences the game commands into specific channels (threads under an allowed channel count as that channel); earning and wallet commands work everywhere. Game activity is public - other members see your daily claims, work shifts, crime runs, catches and fish sell hauls, the game boards, rob, pay, richest, and server bets, so the games feel alive in the channel. Personal browsing stays private: balance, fish collection, the shop and flair browsing and buying, and shields reply only to you - and so does every error, receipt, cooldown note, and the "games are only allowed in ..." nudge, so a mistyped command never clutters the channel.

Server bets

Authorized members (moderators, plus any roles you configure) can open a prediction pool with bet create Who wins tonight? | Red team | Blue team - up to 8 options. The bet posts as a live board: members click an option, type an amount, and the board updates with each side's pool, share, and what it currently pays. Wagers pool together like a prediction market: when the bet is resolved (bet resolve <id> <option>), everyone who backed the winner splits the WHOLE pot in proportion to their stake. You can add to your wager any time while the bet is open, but never switch sides.

bet lock <id> freezes wagering while the result plays out, and bet cancel <id> refunds every wager. If nobody backed the winning option, everyone is refunded too. Resolutions and cancellations land in the mod log with who did them.

Role shop

Price any of your roles in the config (or on the dashboard) and members buy them from shop itself. The shop is private to whoever ran it and carries a menu of everything they can actually buy right now, roles and flair together, each option showing its price. Picking one runs the same confirmed purchase as before. There is no separate buy command any more.

The menu only lists what that member can actually get: roles they already have, or that HepBoat cannot assign, are left out rather than offered and then refused. The bot checks it can hand the role out before any money moves, and refunds automatically if Discord refuses the role afterwards. It can only assign roles below its own highest role.

Rank-card flair

Members can buy decorative frames - gold, neon, ember, frost, royal - that draw on their rank card in your server. Flair is bought with your server's currency and only shows in your server. There is also a Pride frame - a rainbow gradient ring and card border - that stays hidden until you turn it on: flip its "For sale" switch on the dashboard's Games page and it joins your shop like any other frame. Browse with flair, buy from the menu on shop, and switch with flair set. Frames you already own are left off the shop menu. Run flair set without a name and the bot shows a picker of the frames you own plus a None option to go back to the classic look. Frames need image rank cards (the RANK_CARDS feature) to be visible.

You can also design your own frames. On the dashboard's Games page, add up to 10 custom gradient flairs: give one a name, pick its two colors, and set a price - it draws as a gradient ring and card border in exactly those colors. Members buy and equip them like any catalog frame (from the shop menu by name), and they list under "This server's own" in flair. Removing a custom flair from the config stops it drawing for members who bought it; add it back with the same id and it reappears.

Leaderboards

richest works in Discord with pages and weekly/monthly earned windows. With public_leaderboard: true, the server also gets a shareable web page of its richest members at /leaderboard/<server id>/games - the same opt-in model as the XP leaderboard. The dashboard's Games page links straight to it, and when both boards are public the XP and coin leaderboard pages link to each other.

Web API

With the Web API feature, GET /api/v1/guilds/<id>/economy reads the balance leaderboard and /economy/<user id> reads one member - handy for your own integrations.

Admin tools

The eco command group grants, takes, sets, and resets balances - all of it lands in the mod log. eco reset with no member wipes the whole server after a button confirmation.

eco item {member} {kind} {item} [amount] hands over an ITEM instead of currency, for giveaways and prizes: a fish, bait, a rod, a flair, or a rob shield. Nothing is minted, so your money supply and market stats stay honest. The slash form lists the matching items for the kind you pick, and the item has to exist on your server, so a typo is refused rather than stored. Fish, bait, and consumable shields take an amount (up to 100 per command); rods, flairs, and the permanent shield are one-time unlocks. Each grant lands in the mod log as its own Item granted entry. The dashboard's Games page shows wallet stats, the richest members, the full activity ledger, a balance adjuster, and an economy health panel: where currency was minted and burned over the last week, plus the top transfer recipients - your early-warning view for inflation and alt farming.

Limits worth setting

  • max_balance (default 1,000,000,000) - the ceiling a wallet can reach. Credits clamp here, and the excess is burned rather than banked.
  • betting.min_wager / betting.max_wager and betting.max_open (default
      • the stake range on server bets and how many can run at once.
  • fishing.cooldown_seconds (default 300) - the wait between casts.
  • fishing.pool (default standard) - standard, expanded, or abyss.
  • fishing.baits - the bait your shop stocks: each entry has a name, price, uses (null makes it a permanent artifact), and boost_percent (its solo chance to upgrade a catch one tier).
  • fishing.rods - the rods your server sells. Each entry has an id, an optional name, emoji, and blurb, a price (leave it empty to define a rod without selling it), and any mix of effects: catches (1 to 3 fish per cast), cooldown_mult, upgrade_boost_percent, sale_mult, and pool to unlock a deeper pond for the owner. Using a built-in id (swift_rod, lucky_rod, golden_hook, twin_rod, trident_rod) inherits that rod's effects unless you override them; any other id is a rod of your own. The older shape, a plain map of rod id to price, still works.
  • fishing.species and fishing.species_mode - your own fish, each with an id, name, emoji, rarity, and value. Mode add keeps the built-in pond and adds yours; replace uses only your list.
  • fishing.milestones - your own collection ladder: a list of species counts and their reward. Empty uses the built-in ladder.
  • fishing.deep_events - enabled, trigger_chance_percent, duration_minutes, and min_gap_minutes for The Deep.
  • fishing.tournament - enabled, the weekly window (day, start, duration_hours, timezone), an announce channel, the three prizes, and points to set what each rarity scores (unlisted tiers keep their built-in value).
  • crash.house_edge_percent (default 5) and crash.max_multiplier (default 30) - the crash game's odds and payout ceiling.
  • heist.max_payout (the vault, split by stake share), heist.security_level (1 easy to 5 brutal), heist.crew_bonus_percent (added per extra member, default 15), heist.max_crew, heist.lobby_seconds, heist.announce_channel, and heist.failure (stake_lost, extra_coins_percent, arrest_minutes). Setup - Games shows the odds, share, and expected value at every crew size from your own numbers, which is worth reading before you set the vault: at the defaults, going alone is the most profitable play on average.
  • fishing.baits - what the tackle shop sells to improve your odds. Setup - Games can add a ready-made bait ladder for you, one at a time or the whole pool at once, so you do not have to type six baits in by hand. Bait is off until you stock at least one, so adding one is what switches it on.
  • fishing.vessel - enabled, an announce_channel for crew-wide upgrades and events, a timezone, the boosts you sell, and windows for scheduled events. A boost sets a price, how many minutes it lasts, whether it is self or guild scope, and any mix of sale_mult, rarity_boost_percent, and extra_catches. A window is a weekly timetable applying the same effects to everyone for free, which is how you run a double fish weekend. Effects from several sources add up, capped at 10x sale, +50% rarity, and +3 fish per cast.
  • icebreaker.tiles (default 8, 4 to 12), icebreaker.house_edge_percent (default 5), icebreaker.start_safe_percent (default 78) and icebreaker.end_safe_percent (default 35) - how long the crossing is and how the ice thins along it. Safety falls in a straight line between those two numbers, and the payouts follow from them, so widening the gap makes the run riskier and the far shore richer at the same time. Set both percentages equal for a flat game. Setup - Games shows the exact payout ladder your numbers produce, including how often a full crossing happens.
  • market.tick_hours (default 24), market.max_move_percent (default 10), market.bias_percent (default 0), and market.max_invested - how the market moves and how deep one member can go.
  • flair.enabled_items - the opt-in list behind the "For sale" switches; rob.protected_roles is the key behind protected roles.

Troubleshooting

  • A member starts with the old balance: starting_balance is seeded only when their wallet is first created.
  • A game is refused in one channel: inspect games_channels and the command's access rules.
  • A role purchase charges but cannot deliver: the bot needs Manage Roles and the product role must sit below its highest role. Use the ledger when asking staff to reconcile it.
  • A bet appears stuck after a restart: sessions use escrow and should settle or refund. Report the game, message link, and ledger entry rather than replaying the wager repeatedly.
  • Flair is owned but invisible: the server needs image rank cards, and the member must equip the flair with flair set.
  • The public leaderboard is missing: turn on public_leaderboard and use the games leaderboard URL for the server.

Commands

Arguments in {curly braces} are required. Arguments in [square brackets] are optional.

Command What it does
/balance [user] Check a wallet balance.
/pay {user} {amount} Send some of your currency to another member.
/daily Claim your daily currency (streaks pay extra).
/work Do an honest shift for some currency.
/crime Risky business: bigger payout, real chance of a fine.
/rob {user} Attempt to rob another member. High risk, bad karma.
/richest [page] The richest members of this server.
/slots {bet} Spin the slot machine.
/blackjack {bet} A hand of blackjack against the house.
/coinflip {bet} {side} [opponent] Flip a coin for currency - solo, or duel another member.
/highlow {bet} Higher or lower: climb the multiplier ladder or bust.
/roulette {bet} European roulette - pick red, black, dozens, or brave the zero.
/horserace {bet} Back a horse and watch the race - longshots pay big.
/rps {bet} {opponent} Rock-paper-scissors duel against another member - winner takes both stakes.
/dice {bet} {call} Two dice against the house - over, under, or lucky seven.
/bet create {question_and_options} Open a server bet: question | option 1 | option 2 [| more]
/bet list Open server bets.
/bet lock {id} Lock a bet (no new wagers) while the result plays out.
/bet resolve {id} {option} Resolve a bet - winners split the whole pot.
/bet cancel {id} Cancel a bet and refund every wager.
/fish Cast a line - build your collection, sell the haul.
/fish collection [page] Your fishing collection log.
/fish sell [scope] Sell your whole haul for currency.
/fish shop Bait and rods for sale.
/fish trophies The biggest catches ever landed in this server.
/crash {bet} Ride the multiplier - cash out before it explodes.
/icebreaker {bet} Hop a penguin across thinning ice - cash out before it gives way.
/bank-heist {stake} Assemble a crew and rob the bank. Bigger crew, better odds, smaller share.
/arrest {user} [duration] [reason] Bar a member from games and the economy, temporarily or for good.
/pardon {user} [reason] Release a member from an economy arrest.
/arrested {user} Check whether a member is under an economy arrest.
/invest {amount} Put coins into the market at the live index.
/invest sell [amount] Sell your market position back to coins.
/invest portfolio Your market position and the live index.
/shield Check your rob shields.
/shop Browse what your currency can buy here.
/flair Browse and show off rank-card flair.
/flair set [name] Equip a flair frame you own (or none).
/eco give {user} {amount} Grant currency to a member.
/eco item {user} {kind} {item} [amount] Grant a game item (fish, bait, rod, flair, shield) without creating currency.
/eco take {user} {amount} Take currency from a member (floors at zero).
/eco set {user} {amount} Set a member's balance to an exact value.
/eco reset [user] Reset a member (or the whole server) to zero.