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. Fishing has a full Setup → Fishing page of its own. 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. If you want a job ladder, open the Jobs and Capers sections, rename the default job and caper to fit your server, and add one ready-made job and one ready-made caper. Run work and crime as a test member: you should see a Change job button and one button per caper. Both sections are empty until you do this, and an empty roster behaves exactly as work and crime always did.
  9. If fishing has made your economy too rich, open the Fishing page's Hazards section and turn on one hazard at a time. Rogue waves are the safest to start with because they cost no coins. If you protect species, cast until you land one yourself and confirm the fine on the board matches what you set, and that fish sell pays a single coin for it.
  10. 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 - opens your work panel: the job you hold, what it pays, when your next shift lands, and a Work button that runs the shift right there. See Jobs below.

  • crime - opens the caper panel: every caper your server runs, each with its real odds on its own button. See Capers below.

  • rob - steal from another member, with a penalty for getting caught. Every outcome, and every refusal, tells you when you can try again. 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, and it also keeps every copy you have on display in your aquarium. 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, with your rod and vessel sale bonuses already applied - the number you see is the number a sale pays. A sale that would pay 0 (your only surplus is species the server has since retired) is refused outright, and nothing leaves your collection. 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. Selling takes two presses: the first turns the button into a red Confirm sell, so a mis-tap aimed at Cast again (the embed can shift under your finger, especially on mobile) never sells anything. 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.

  • Size pays - a fish's rolled size multiplies its sale price, so a 2.5x sturgeon sells for 2.5x a sturgeon. Your tank tracks the combined size per species, and a surplus sale keeps your BIGGEST copy and sells the small ones, so the trophy in your tank is never the one that goes. If your aquarium is showing three of a species, a surplus sale keeps all three. Trophy catches still pay their instant bonus on top, and boss-sized copies sell at their full size.

  • Founder fish - donation-funded fish that swim in every pond. Anyone can donate to keep HepBoat running from the Founder Fishery on the dashboard; donations at certain amounts add a fish they named to the global ponds, and everyone can catch, collect, prestige, and sell them like any other species. Servers with the founder fish control feature can turn them off on the Fishing page; every other server carries the global school. Every founder fish carries its lifetime catch total across every server, shown in the Founder Fishery gallery and on the public All species view, so a donated fish can be watched making the rounds. Anyone can see it.

  • fish profile - look up any member's fishing standing: their mastery title, lifetime catches, species seen, tank totals, and the gear they run (rods, bait, fitted vessel upgrades, shields, flair). The collection log itself stays private - only its owner can browse which species they have.

  • profile - the whole member at a glance, as a panel you can page through. It opens on General: their name, level and rank, wallet, a fishing headline, and their HepBoat badges. Buttons switch to Leveling, Wallet, and Fishing for the detail. Pages only exist where their system is enabled, everything is read once so paging is instant, and there is no moderation history here - profiles are for play.

  • Multibuy - every shop picker (the item shop, the tackle shop, shields, the flair picker) stays open after a purchase and refreshes its list, so you can buy several things in a row. It closes itself when nothing is left to buy or after two quiet minutes.

  • fish aquarium - your display tank: a handful of slots you point at species you hold, shown off on the cast board profile line, in profile, and swimming for real on your web angler profile. Everyone starts with three slots; mastery prestige stars open three more. Tap your own slots to pick what swims there - the picker lists everything you hold, rarest first, and pages past 25 species so nothing is out of reach. Shinies glow, stars show, and the tank keeps the day's weather. Your own tank posts to the channel; fish aquarium {user} shows someone else's to you alone. Pure showcase: nothing in the tank changes odds, prices, or protection.

  • Hazards - three optional downsides, all off unless you turn them on from the Fishing page. Rogue waves cost a share of casts outright: the cooldown is spent, nothing is caught, and no coins are lost, so it is the gentle one. Deck raiders board after a catch and give the member a few seconds to cut the right line on the cast board; repel them and nothing happens, miss or walk away and they take a capped share of the wallet. It can never push anyone below zero or past the cap you set. Protected species are the third, and the only one that is not a matter of luck: you pick which fish are protected, and landing one always costs the same. They exist because fishing is otherwise pure income, which inflates an economy and makes the other games look pointless - if that is not a problem on your server, leave them off.

  • Protected species (opt-in) - fish that are never worth catching. Turn the hazard on from the Fishing page, pick the species from the list, and set the fine as a percentage of what that fish normally sells for (25 percent by default, rounded to the nearest coin). Landing one charges the fine, and the fish sells for a single coin no matter how big, shiny, or prestiged it is. There is no trophy bonus, no boss bounty, and no prestige bounty on a protected fish either.

    It still counts as a catch everywhere that is not money: it goes in the aquarium, it scores tournament points, and it climbs its prestige stars. You collected it, you just cannot profit from it.

    Two things worth knowing. Junk fish can never be protected - a fine on worthless fish is noise, so they are not offered. And your own custom species can carry their own fine instead of the percentage: protect one, then set its Fine box on the same page. Leave that box empty and it uses the percentage.

  • The pity chase (opt-in) - bounded bad luck for the collection hunt. Turn it on from the Fishing page and the cast board grows a 🎯 button: a member picks one specific fish to chase - a rarity tier first, then the exact fish, by name - and every cast without landing it builds pity. At the threshold, the next cast lands that very fish, guaranteed. One chase at a time, switching fish starts the count over, and catching it naturally ends the chase too, so pity can never be banked. The picker shows each option's exact cast count (and how many of that fish the member has caught) before they commit, the cast board itself shows how many casts remain, and the thresholds scale with the rarity of the chosen fish - yours to tune per tier, from 75 casts for a rare up to 3,000 for an exotic by default. Two things worth knowing before you enable it: the fish picker lists every species of your pond by name, including ones a member has not caught yet, and a patient member can schedule their way to any specific fish - it ships off because a guaranteed catch is a real economy lever.

  • Public angler profiles - an opt-in switch on the Fishing page publishes each member's fishing profile (standing, tank totals, biggest catches) on the web next to your public leaderboard. When it is on, the cast board and the collection log link every member to their own page.

  • 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. Sources worth less than one percent once the stack has decayed them are not listed one by one - they are added up and shown together as a single entry, and dropped entirely when even the total rounds to nothing. The sea state is the exception and is always named, so you can tell it is in play whatever it is currently worth. 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: cooldown halved, rarity surging, and hauls capped at 4 fish per cast.

  • The deck check - if casting starts looking automated (relentlessly perfect button timing, over and over), the board stops and asks for one of the ship's objects: the prose names it, the buttons carry the symbols, and one tap on the right one sends your cast straight out. Heavy fishers also meet a routine check once in a while, so seeing one is not an accusation - and passing PAYS: the cast a passed check releases carries a luck bonus toward a rarer catch plus one extra fish, both tunable on the Fishing page. The check's pace scales with your server's cast cooldown, so a five-second-roll server is measured in hours of play just like a five-minute one, not in button presses. Pressing the wrong object is a failed check and applies the standard games arrest for a few minutes (your server picks how many), and the check is still waiting afterwards. Passing clears your record entirely. Honest fishing at a human pace never notices any of this.

  • Your first successful cast of each fishing day pays a bonus, growing with a streak for consecutive days. The fishing day rolls over at the hour and timezone your server sets (8pm Eastern by default), so it fits your community's evening rather than midnight UTC.

  • The community cast goal (opt-in): everyone's casts count toward one shared target per day or week, with progress shown on every cast board. Hit it and The Deep opens for the whole server - once per period, announced where your server chooses.

  • Three ponds - pick yours with fishing.pool (also on the dashboard Fishing page): standard (the original 18 species), expanded (82 species with a mythic top end), or the abyss (201 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).

  • Sea states - the water has weather of its own, rolled per fishing half-day on your server's fishing-day clock. Glassy calm speeds recasts, a storm trades slower lines for rarer pulls, sea fog doubles shiny odds, moonlit water runs heavy, and a rare feeding frenzy lands an extra fish per cast. Whatever the state is doing shows up named on the cast board's buff panel, exactly like a bait or a rod, so the maths is never a mystery, and that now includes its effect on your cast speed in both directions. This is worth knowing if you run a fast cooldown: the sea state is applied before The Deep halves the wait, so a server on a five second cooldown with fully upgraded rods sits at two seconds during The Deep in fair weather and three in rough, and it changes on its own twice a day. Nothing is wrong when that number moves. Turn sea states off on the Fishing page if you want a steady pond.

  • Boss variants - any species, including your server's own, can surface as a colossal boss of itself. The cast becomes a short fight on the same board: a few good presses of REEL! and it is yours; lose your nerve or your luck and it sounds. A landed boss records a size far past the normal 3x cap (that oversized entry on the trophy board IS the boss record), pays an instant bounty of the species value times your server's multiplier (30x by default), and can even be shiny on top. Bosses bite more often than shinies, and storms and moonlit water stir them further.

  • Pond mastery - a title next to your name on the cast board, earned from lifetime fish caught: Deckhand at your first cast up to Master Angler at 8,000 by default, and servers can rewrite the whole ladder with their own names on the Fishing page. A custom ladder can start wherever the server likes - until you reach its first title you carry no title, just the progress bar toward it. Past the final title, every so many catches adds a prestige star - the ladder never ends - and each star pays a coin reward (10,000 by default, your server's to tune). Star pay settles up on your next cast too, so stars earned before the reward existed still pay. The cast board's status line carries a progress bar for the chase: how far you are into the next title, or into the next star once you hold the top one.

  • Species prestige - every species has its own star ladder too, custom fish included. Catch enough of one species over your lifetime and it prestiges: the star appears next to that fish on your catch lines and in your collection log, the species permanently sells for more from your tank (10% per star by default), and each star pays a one-time bounty of the species value times the server's multiplier times the star number. Thresholds grow steeply (50 catches for the first star, about 2.5x more for each after, by default), so the first star rewards a season of fishing and the deep stars are the true endgame grind. Selling never touches prestige - it counts everything you have ever caught. Bounties settle up on your next cast: stars you earned before the feature (or before your server set a bounty) pay the moment you fish again, with the total shown right on the board.

  • 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. Vessel upgrades, the weather, and a passed deck check can add extra fish on top, to a hard ceiling of 10 per cast. While The Deep is open the whole haul caps at 4 fish per cast - on the halved cooldown that still lands you at least your normal rate, whatever your loadout.

  • 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 every species in the abyss pond, founder fish included, earns the global Master Angler badge - the badge's own description always quotes the current total.

  • 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 - your tier-upgrade chance doubles and is allowed past the normal cap while the window runs. Get your lines in. The cast that opens it gets the faster recovery straight away; its rarity roll had already happened, so only the wait is shortened.

  • 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 results embed lists the top ten so everyone can see how far they got, with the top three on the podium paid their prizes automatically. Turn on show_points (also a switch on the dashboard's Fishing page) and each member sees their own running score on the cast board while the window is open - their placement stays a surprise until the results.

  • Badge fish - the HepTrout Prime (in every pond) grants its 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 before the window closes. Joining opens a form where each member picks their OWN stake, with the setup fee spelled out before any money moves - the fee is the house's cut and is spent win or lose. The lobby board shows the growing vault and each member's exact payout if the job goes clean, so the split is never a surprise. Then one roll decides it for everyone. The member who opened the job can press Go in now to send the crew in early, skipping the rest of the wait - daring, or just greedy - at the cost of whatever odds more hands would have brought. A bigger crew has better odds, and the money on the table matters three ways: the vault GROWS with the crew's combined stakes, big stakes nudge the odds up (capped - never a sure thing), and a clean getaway returns every stake plus a bonus on it, with the vault split on top by stake share. Winning always pays more than you put in. Going alone is the longest odds and the biggest payday, and it is meant to be a real choice rather than a mistake. Failing costs your stake and the fee, can cost 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 what the next floe pays before you press Jump - but not the odds of it holding, that part you find out mid-air - 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, when it runs out, and your coin balance, and buying one you already have extends it rather than wasting it. However the bonuses stack, a sale never pays more than 50x the haul's raw value - the receipt says so if the ceiling ever trims it.

  • invest - when the server enables its market, this opens the market panel: the live index, a trend sparkline, the last few moves with their percent swing, your position and its profit or loss, and your wallet. Buy and Sell ask for an amount, Sell all cashes out in one click, and Refresh re-ticks the index. Sell controls only appear once you hold something. invest {amount} still buys straight away and then opens the panel. invest portfolio and invest sell open the panel too - they were their own commands until this changed, so typing them still works and lands where they went. Server staff can tune how often the index moves, how violently, and even give it a drift, and they can set the index outright for an event - a set shows up in the history as its own move, like any other. Read the history 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.

Jobs

work is a panel, not a one-shot command. It shows the job you hold, what that job pays, and exactly when your next shift lands, with a Work button that runs the shift in place. Nothing about this needs configuring - a server that never touches it has one job and one button, paying what work always paid.

Give members a ladder to climb by building a roster on the dashboard Games page:

  • The default job. Everyone starts on it and it can never be removed. Its name, emoji, lore, pay range, and cooldown are all set on its own card at the top of the Jobs section, and every ready-made job is priced off those numbers. It is called Fisherman until you change it.
  • Ready-made jobs. Ten of them, from Dishwasher to Surgeon. Each one is priced off your own work numbers at the moment you add it, so the card shows exactly what it will pay before you press Add and the ladder stays balanced whatever size your economy runs at. Adding one writes a normal job you can then rename, reprice, or delete, and removing it and adding it again re-prices it against whatever your numbers are then.
  • Your own jobs. Up to 24, each with an id, name, emoji, lore, pay range, and its own cooldown. A better-paying job usually wants a longer cooldown - that trade is the whole ladder.
  • Role-gated jobs. Give a job a role list and only members holding one of those roles can take it. Perfect for jobs earned through leveling or handed out as a reward. Leave it empty and anyone can take the job.

There is no separate list of ours and yours. Everything on the roster is your config, so a ready-made job is edited exactly like one you wrote.

Members switch jobs inside the panel. Change job opens a private menu listing every job open to them with its pay and cooldown, and picking one takes effect immediately - no typing, and nobody else sees it. Switching is free but it does not reset your shift cooldown, so it is not a way to work twice. If you delete a job, or a member loses the role a job needed, they quietly return to the default job on their next panel.

Capers

crime works the same way, tuned for risk instead of routine. The panel lists each caper compactly - odds, payout, fine, and lie-low time - with its own button beside it. With a single caper there is one plain Commit crime button and nothing to choose.

  • The default caper. Always available and never removable, with its own card at the top of the Capers section: name, emoji, lore, payout, success odds, fine range, and cooldown. It is called Petty Nonsense until you change it.
  • A ready-made risk ladder. Six capers from Five-Finger Discount (80% clean, small money) up to The Vault Job (18% clean, huge money). Payouts, fines, and cooldowns are priced off your own crime numbers as you add each one, and the card shows them first; the odds belong to the caper.
  • Your own capers. Up to 24, each with its own payout band, fine range, success odds, and cooldown - so a big score can cost real time and a bigger fine when it goes wrong.

The panel gives each caper two lines: its odds and payout on the first, then its fine, how long it makes you lie low, and its lore. A caper that loses money over the long run says so on that second line, so a bad bet is never disguised as a good one. The cooldown that gets burned is the one belonging to the caper you ran.

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 web page carries the same All time / This week / This month views as the command (the period views rank coins earned, not held) and opens with a row of server totals: members holding, coins in circulation, the top balance, and the median. The dashboard's Games page links straight to it.

Fishing has its own public board. Turn it on from the dashboard's Fishing page (fishing.public_leaderboard: true) and /leaderboard/<server id>/fish ranks your anglers four ways - lifetime fish caught, fish in the tank right now, shiny copies held, and species collected - with the server's totals and most-caught species up top, the biggest-catches trophy book below, and the latest tournament standings, including live standings while a window is running (in Discord the bot only announces the final top 3). This board is web only; there is no matching command.

Every public leaderboard page refreshes its numbers at most every five minutes. Each board is its own opt-in, and whichever boards you publish 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. A reset puts the member back to the starting balance (their next game re-seeds it, exactly like a brand-new member). eco reset with no member resets 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.

Setting the market index

The same page has a Market index card for servers that want to run the market as part of an event rather than leaving it to drift. It shows the live index, its last move, when the next move lands, and how many units your members are holding. Type a value, press Set index, and the market opens there.

Two things to know before you use it:

  • The walk carries on from whatever you set. Setting the index does not freeze or reset the market. The next tick moves your value by the same bounded percent as always, and the clock restarts, so a set value stands for a full tick rather than being immediately overwritten.
  • It revalues everything your members are holding, immediately. Units bought at the old index are worth the new one the moment you press the button, and they can be sold at it. The card tells you the percent move and what member holdings go from and to in currency before you commit, so check that line rather than the index alone. Taking the index from 100 to 10,000 hands every holder a hundredfold payout out of thin air.

A set lands in the mod log as its own Market index set entry, naming who did it and the percent move, and members see it in the invest panel's recent moves like any other move. If nobody has ever opened the market on your server there is no index yet; setting one starts it. You can set it while the market is switched off, so you can stage a number before members can trade on it.

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. Each pond carries a set number of your own species - 10 in the standard pond, 20 expanded, 30 abyss. Fish meant for every server swim in through the Founder Fishery instead.
  • 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. The gap is quiet time measured from when an event closes, so events can never chain back to back.
  • fishing.tournament - enabled, the weekly window (day, start, duration_hours, timezone), an announce channel, the three prizes, points to set what each rarity scores (unlisted tiers keep their built-in value), and show_points to show members their own running score while they fish (off by default; placement is never shown early).
  • fishing.bot_check - the deck check: enabled (on by default), arrest_minutes (default 5), the games lockout a failed check applies, and the pass reward - reward_luck_percent (default 15, extra tier-upgrade chance on the passed cast; 0 turns it off) and reward_extra_catch (on by default, one extra fish on the passed cast except while The Deep is open).
  • fishing.weather - sea states: enabled (on by default). The states themselves are built in, so every server's weather speaks the same language.
  • fishing.bosses - boss variants: enabled (on by default) and bounty_mult (default 30), what a landed boss pays as a multiple of the species value.
  • fishing.mastery - the title ladder: enabled (on by default), titles (a list of at catch counts with a title and optional emoji; empty uses the built-in ladder), star_every (default 5000; 0 turns prestige stars off), and star_reward (default 10000, coins paid per star earned; 0 keeps stars cosmetic).
  • fishing.prestige - species prestige: enabled (on by default), first_at (default 50, lifetime catches of one species for its first star), growth (default 2.5, each star costs that many times the last), sale_bonus_percent (default 10, added to that species' sale value per star), and reward_mult (default 20, the one-time bounty is species value x this x the star number). The Fishing page previews the exact ladder your numbers produce. Bounties are settled up, not crossing-only: each star pays exactly once, on the first cast after it is earned - or after your server defines the bounty, whichever comes later.
  • fishing.daily - the first-cast-of-the-day bonus: enabled (on by default), bonus, streak_bonus and streak_bonus_cap for consecutive days, and the fishing-day clock itself: reset_hour (24h, default 20) and timezone (default America/Toronto). The fishing day rolls over at that hour, not at UTC midnight, and the community goal follows the same clock.
  • fishing.community - the server-wide cast goal, off by default: target_casts, period (day or week), reward_deep_minutes (The Deep opens for everyone this long when the goal is hit, once per period), and announce_channel (empty announces where the goal-crossing cast happened). Every cast board shows the running progress.
  • crash.house_edge_percent (default 5) and crash.max_multiplier (default 30) - the crash game's odds and payout ceiling.
  • heist.max_payout (the base vault - it grows from there with the crew's stakes), 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, heist.setup_fee_percent (default 10 - charged on top of every stake, spent win or lose), heist.pot_scale_percent (default 25 - how much of the crew's combined stakes the vault grows by), heist.stake_bonus_percent (default 5 - paid on each returned stake when the job goes clean), heist.stake_odds_max_percent (default 10 - stakes nudge the odds up to this, reaching the cap once the crew stakes twice the base vault), 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.
  • 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 8), icebreaker.start_safe_percent (default 72) and icebreaker.end_safe_percent (default 30) - 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. The index itself is not a config key, because it changes on its own every tick. Set it from the Market index card on the Games dashboard page instead.
  • 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.
  • work shows no Change job button: the server has no other job the member can take. Add a ready-made job or one of your own, and check any role gate you set on it.
  • A member says their job reset itself: the job was deleted from the roster, or they lost the role it needed. Both quietly return them to the default job rather than leaving them on something that no longer exists.
  • A caper button does nothing: the caper was removed from the roster while the panel was open. Run crime again for the current list.
  • The next-cast timer looks wrong on a very fast cooldown: check the buff panel, which prints the real interval as casts 60% faster (5s to 2s). Trust that number. Discord's countdowns carry whole seconds and the app rounds them, so at a two second cooldown a single second of rounding is half the wait.
  • Cast speed changed on its own: the sea state is applied before The Deep halves the wait and it rerolls twice a day, so the same server moves between two and three seconds during The Deep. The buff panel names the state and what it is doing to recovery.
  • The index you set is not what members see: the market ticked after you set it, which is the point - your value was the starting line, not a lock. Check the last move on the Market index card, and widen market.tick_hours if you want a staged number to hold longer.
  • Members got suddenly rich after a market event: check the mod log for a Market index set entry. An index set revalues every open position, so a big jump pays out to everyone holding units when they sell.

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.
/fish profile [user] A member's fishing profile: standing, tank, and gear.
/fish aquarium [user] A display tank of your finest catches - or a look at someone else's.
/profile [user] A member's profile: badges, level, balance, and fishing standing.
/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] Open the market panel - buy, sell, and watch the 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.