PepeFrog Bot

Your friendly neighborhood fight room AI

๐Ÿ”— Live Pages
๐Ÿ—บ๏ธ Turf Wars โ€” how to play The full guide to gangs, boroughs, the economy, invasions and upgrades.
๐Ÿ—บ๏ธ Turf control map Live London map โ€” who controls what, borough stats and gang standings.
๐Ÿ’ฐ Heist guide & leaderboard How the heist works, top hauls, and the "vault cracked byโ€ฆ" hall of fame.
๐Ÿด Gang leaderboard Every gang ranked by rep, with rosters, levels and treasuries.
๐Ÿ† PAT rankings Top PAT balances and the recent jackpot winners.
๐Ÿ’ฌ Commands (this page) The full command reference for everything the bot does.
๐Ÿ’ฌ Chat & AI
!ask [question] Ask the AI anything. Uses web search, room data, mic transcripts, and memory for context. Can also check balances, spin the wheel, and more via natural language. Cost: 1,000 PAT
!roast [user] Roast a user based on their chat history, mic transcripts, and what others say about them. Use !roast me for a self-roast. Cost: 5,000 PAT
!web [query] Search the web and get summarized results.
!epstein [search term] Search the DOJ/Epstein document archive. Use quotes for exact phrases.
!gang withdraw ยท !gang limits NEW The treasury is a shared pot you draw from, not a payroll. There's no daily wage any more โ€” income stays banked and each member takes what they need up to their rank's daily allowance: owner unlimited, officer 250,000, member 100,000, recruit 25,000. Allowances are per person, so one officer emptying theirs no longer locks out the rest of the crew, and they reset on the daily tick.
!gang limits shows the current allowances; the boss sets them with !gang limits <owner|officer|member|recruit> <amount> (0 = unlimited). Withdrawals pay a 5% laundering cut to Canary Wharf on the way out.
!gangs reset ADMIN The start-over button. Wipes every gang โ€” members, treasuries, rep, Turf Score โ€” and clears the whole map, banks and stakes included. Nothing is refunded and there's no undo, so it asks for !gangs reset confirm. Distinct from a season ending, which keeps rep and hands stakes back.
!turf season ยท !claim NEW Turf Score is the season standing, separate from gang rep. It builds every day you hold a borough โ€” outer 1, mid 2, centre 4 per day (ร—100) โ€” so a season is won by holding ground over time, not by sweeping the map on the last day. Holding at the final whistle adds up to +25%. !turf season shows the table, the day, and the prize pot.
It's also the invasion gate: 500 to move on a mid borough, 2,000 for Mayfair. Earned this season, so an old gang doesn't start with the map unlocked.
Claiming is a crew event. !claim <borough> musters for 45s โ€” crewmates !join for 5,000 PAT each โ€” then the whole crew rolls against whoever's already there. 8 rounds outer, 9 mid, 10 centre, 2 strikes each, and numbers genuinely tell (a crew bonus applies from 3 up). Geared success runs about 24% solo ยท 68% at three ยท 89% at five on an outer borough, 39% at five for a mid one and 17% for Mayfair โ€” so the crown needs a real gang. The stake is only paid if you take it: a failed run costs the buy-ins, never the deposit.
Season end (30 days, or !turf end): the top score takes the pot โ€” everything the streets banked, matched by the Reserve. Business banks go to the Federal Reserve to seed next season's heists, and every stake is refunded โ€” holding turf is never a losing move. Ownership, banks and Turf Score reset; gang rep is permanent and carries over.
!heist convoy ยท !defend ยท !turf cargo NEW Every business queues its takings as cargo instead of banking them on the spot. Every so often an armored convoy leaves carrying the lot โ€” announced in the room, naming the business and the haul โ€” and for 15 minutes it's on the road and takeable.
Rivals only: !heist convoy intercepts it. You can't rob your own gang's money. The prize is the whole cargo, split among survivors โ€” no vault, no crack roll โ€” and the owners never see a penny.
Owners: !defend to ride shotgun. Each guard raises every DC on that run, so a well-escorted convoy is a genuinely bad idea to hit.
If nobody takes it, the cargo banks as normal. !turf cargo shows what's on the road now, or what's building up if nothing has left yet. This is the valve that keeps PAT moving โ€” what the room spends becomes what the room can steal.
!reserve NEW The ๐Ÿ›๏ธ Federal Reserve โ€” the bank heist's vault, and the only pool Pepe can print into. Anyone can check the balance; admins get !reserve mint <amount> to print PAT into it on the spot (announced in every room โ€” silently minting money is exactly what shouldn't be invisible), plus !reserve auto on|off and !reserve floor <amount> to have the daily tick top it back up to a floor. Auto is off by default.
!seen ยท !lastseen [user] NEW When someone was last around in this room. If they're here now it says so (and whether they're on cam); otherwise it reports the most recent trace โ€” the last thing they typed, or their last mic-up, whichever came later โ€” with how long ago and what they said. Works on displaynames and aliases, not just logins. Per room: ask in the room you care about; each room has its own logs, so someone quiet here may have been talking non-stop next door.
PM Pepe NEW Message Pepe privately and he answers privately. He has the same context he'd have in the room โ€” who's there, what's been said and micced recently, what's playing, who's on cam โ€” so "what's X on about?" works in a DM.
He remembers your DMs, privately. Anything you tell him in a PM is tagged to you and only ever surfaces when he's talking to you in a PM. It never goes into public chat, never becomes room lore, never shows up in anyone else's context, and isn't searchable.
The gate is who told him, not who it's about. Tell him your opinion of someone in a DM and he'll remember it for you next time you two talk โ€” and he'll say none of it to them. He won't repeat what anyone else has told him privately either; ask and he'll tell you that straight.
It works one way: a PM includes everything he knows publicly โ€” the room, what's been said and micced, who's around โ€” plus what you've told him privately. Public chat gets only the public half.
!incognito ยท !forgetme on|off NEW Your own switch: with incognito on, nothing you say gets remembered at all โ€” in the room or in PMs โ€” and anything still waiting to be processed is binned. Off by default. It stops new memories โ€” it doesn't erase what he already knows (ask an admin if you want that wiped). Works from a PM or the room, and the reply always comes back privately.
๐Ÿ’ฐ PAT Economy
-p (privacy flag) Replies appear in public chat by default. Add -p (or -pm) to the end of any command to get the reply as a private message instead. Example: !balance -p
-mic (voice flag) Add -mic (or -voice) to the end of an !ask, !roast or !look and Pepe speaks the answer aloud on the mic instead of typing it. Example: !roast bob -mic. There's a voice surcharge on top of the command's normal price (Pepe has to take a mic slot to say it) โ€” set in the admin panel. Add -v <voice> alongside -mic to pick which voice speaks it โ€” some voices cost PAT per use, or can be bought outright with !buyvoice; see !voices (!roast bob -mic -v narrator; quote names with spaces; !mic tts voices lists them). Needs Pepe's voice/TTS switched on; if it ends up typed instead of spoken, for any reason, the surcharge is refunded automatically. Only works in the room Pepe's mic is in.
!help Posts the link to this page.
!alias [username] [displayname] ADMIN Manually tie a Camfrog login to the display name Pepe should call them. He normally learns these on his own from chat and PMs โ€” this is for correcting one he got wrong, or teaching him someone who has never spoken.
!balance Check your PAT (Public Access Token) balance.
!voices NEW The voice store. Lists every voice Pepe can speak in, which are free, which cost PAT per use, which you can buy outright, and which you already own. (Aliases: !voiceshop, !voicestore.)
!buyvoice [voice] NEW Buy unlimited use of a voice โ€” one payment, yours forever, in every room. After that !say <text> -v <voice> costs you nothing extra. Some voices pay a royalty to the person they were cloned from; the rest of what you pay goes into the nightclub's takings (or the jackpot vault if turf war is off). (Alias: !voicebuy.)
!voiceset [voice] [field] [value] ADMIN NEW Price a voice. price <n> = PAT per use, unlock <n> = one-off price for unlimited use (0 = not for sale), owner <user> = who earns royalties, royalty <0-90> = what share of both they get, clear = free again. Anyone who already bought a voice keeps it. Also editable in the admin panel under Voice Store. (Alias: !voiceprice.)
!vault ยท !jackpot ยท !pot NEW What's in the vaults right now. There are three, and they're independent: the ๐ŸŽก jackpot vault (wheel spins and losing bets โ€” paid out by !spin), the ๐ŸŽฐ casino vault (cracked by the casino heist) and the ๐Ÿ›๏ธ Federal Reserve (cracked by the bank heist). Splitting them means a gang holding the whole map can't starve the heist targets โ€” and robbing one doesn't touch the others. All three are fed by sink overflow, so the more the room spends, the bigger the scores get. Also !jackpot or !pot. Free, answered in the room. You can also just ask him โ€” "pepe what's the vault at" works.
!beg Broke? Beg for a handout โ€” a random 0โ€“10,000 PAT. Only works when your balance is under 5,000 (the spin cost), you're at least level 2, with a 3-hour cooldown.
!history Show your 5 most recent transactions (tips, wins, wagers, bonuses) with amounts and timestamps.
!spin Spin the Wheel of Misfortune. Costs 5,000 PAT per spin.
!tip [user] [amount] Transfer PAT to another user. Tip pepe (or jackpot) to donate straight into the heist jackpot vault.
!xp Check your current level and XP. Earn XP from chatting (1/msg) and mic time (1/sec).
!top Show the top 5 PAT balances.
!redeem Learn how to redeem your PAT for real prizes. Sign up at publicaccess.tv, link your Camfrog username, and your balance syncs automatically.
!verify [code] Verify ownership of a Camfrog username when linking from publicaccess.tv. Initiate the link on your profile page, get a code, then type it here to prove the account is yours and merge your bot PAT.
!duel [user] [amount] Challenge someone to a dice duel for PAT. Min 100, max 50,000.
!accept / !decline Accept or decline a pending duel or brawl challenge (60s to respond).
!dueltop Dice duel leaderboard.
!arena [buy-in] Open The Arena โ€” a sheet-based PvP battle royale. Everyone who !joins pays the buy-in into one pot. Each round announces a combat style (a random stat), fighters are paired off, and each clash is an opposed roll of d20 + that stat's modifier + gear (advantage on your class stat) โ€” the loser is eliminated. The field halves every round until one gladiator remains and takes the pot (a small cut feeds the jackpot). Uses your !sheet stats and heist gear.
!brawl [user] [amount] Challenge one player to a 1v1 sheet-based brawl for PAT โ€” a best-of-5 of opposed stat clashes (rotating combat style each round). Winner takes the pot minus a small jackpot cut. They !accept or !decline.
!arenatop / !brawltop Leaderboards for The Arena and Brawls, ranked by total wins. Your record also shows on your !sheet.
!gang [subcommand] Form and run a gang. !gang create [TAG] <name> founds one (50,000 PAT) โ€” the [TAG] is optional (auto-generated if you skip it) and can be changed anytime with !gang tag <TAG>. Recruit with !gang invite @user (they !gang accept). Also: leave, kick @user, promote/demote @user, boss @user, deposit <amt> (fund the treasury), disband, info [name]. Every member win earns the gang rep โ†’ levels โ†’ more member slots. Keep 5+ gangmates alive together in a heist for a synergy roll bonus (it fades if the gang gets whittled down).
!defect Leave your gang and go solo, forfeiting your share of its treasury and rep. Same as !gang leave, kept as a shortcut.
!gangtop Gang leaderboard by rep, with a link to the full /gangs page.
๐Ÿ‚  Texas Hold'em (in-chat)
A full No-Limit Texas Hold'em cash game played right here in chat โ€” no Discord needed. Chips are your PAT (1:1): buy in to sit, cash out any time. Your two hole cards are sent to you privately by PM so nobody sees them; the board, betting and pots all play out in the room. Anyone can open a table and deal.
!holdem start [sb]/[bb] Open a table at the given blinds, e.g. !holdem start 25/50 (up to 5000/10000). One table at a time; buy-ins range 20โ€“200 big blinds.
!sit [amount] Take a seat and buy in for that many chips (PAT is escrowed), e.g. !sit 5000. Sit during a hand to be dealt in on the next one. Up to 9 players.
!holdem deal Deal the next hand (needs 2+ seated players). Hands also auto-continue ~15s after the previous one ends.
!check / !call / !fold Your basic in-turn actions. !check when nothing's owed, !call to match the bet, !fold to muck. You have 60 seconds to act or you're auto-checked/folded.
!bet [n] / !raise [to] / !allin Put chips in: !bet 200 opens the betting; !raise 600 raises to a total of 600; !allin shoves your whole stack. Side pots are handled automatically when someone's all-in for less.
!cards Re-send your hole cards to yourself by PM (in case you missed them), along with the current board.
!stand Leave the table and cash your remaining chips back to PAT. In a live hand you're cashed out once it ends (or !fold to leave sooner).
!holdem status / end !holdem status shows seats, stacks, board and pot. !holdem end closes the table and cashes everyone out (starter or admin only).
๐Ÿ‚ก Blackjack (Pepe deals)
Vegas-style Blackjack with Pepe as the dealer, played in chat and shown on stream. 6-deck shoe (freshly shuffled and provably fair every round), a natural blackjack pays 3:2, and the dealer hits soft 17. You bet PAT each round (max 10,000); beat Pepe's hand without going over 21. Your cards are face up โ€” only Pepe's hole card stays hidden until he plays. Can't run at the same time as a poker table.
!blackjack start Open a blackjack table (aliases: !bj start). Anyone can start one; up to 6 players.
!bet [amount] Place your bet for the round while betting is open, e.g. !bet 500 (100โ€“10,000 PAT). The first window is ~30s; after that it's only ~10s between hands โ€” or a player can !bj deal to start immediately. If a hand is already in progress, !bet reserves you a seat and joins you into the next round (charged when betting reopens).
!autobet [amount] Auto-play so you don't retype each hand: !autobet re-bets your last amount every round, or !autobet 500 sets a fixed amount. A manual !bet overrides it for that hand; !autobet off stops. If you can't cover it, autobet switches off automatically.
!hit / !stand ยท !stay On your turn: !hit takes another card, !stand (or !stay) keeps your total. Go over 21 and you bust. You have ~30s to act or you auto-stand.
!double Double your bet on your first two cards and take exactly one more card. Allowed after a split too (DAS).
!split Split a matching pair into two hands (extra bet equal to your first), resplit up to 4 hands. Split aces get one card each.
!insurance When Pepe shows an Ace, take insurance (a side bet of half your bet) that pays 2:1 if he has blackjack. Aliases: !insure.
!bj status / leave / end !bj status shows the table; !bj leave (or !leave) leaves after the current round; !bj end closes the table (starter or admin only). Winners are paid by the house; half of every losing bet feeds the shared jackpot vault.
The table keeps itself tidy: if nobody bets for a couple of windows it closes; if you skip 3 rounds without betting you're dropped from your seat; and if you time out 3 times in a row (AFK), your autobet is turned off and you're removed. Just play a hand to reset.
๐ŸŽค Mic & Transcripts
!micstats [user] [period] Mic stats for a user. Periods: 1h, 3h, 12h, today, week, month, all.
!mictop [period] Top 10 mic users by time. Same period options as micstats.
!replay [user] [n] Show last n mic transcripts. Filter by user. Use !next to paginate.
!search [term] [n] Search mic transcripts. Supports "exact phrases" and multi-word AND. Use !next to paginate.
๐ŸŽ™๏ธ Pepe's Voice NEW
!say [text] Make Pepe speak your words aloud on the mic in his cloned voice โ€” 5,000 PAT (admins free). Add -v <voice> to pick a specific voice, e.g. !say welcome to the room -v woodie. See the available voices with !mic tts voices. (Requires voice/TTS to be switched on.)
!mic tts voices List the voices you can use with !say -v <voice>. Anyone can run this one.
!mic tts on|off ยท voice ยท model ยท engine ยท chatty ADMIN Configure Pepe's voice. on/off enables TTS; voice <name> sets the default voice (list them with !mic tts voices, which is public); model <1.7B|0.6B|1B|3B> and engine <name> switch the TTS model; chatty <0-100> sets how often Pepe mics up his chat lines instead of typing them; caption on/off also posts the text when he mics up (for accessibility); test [text] speaks a test line.
!mic grab ยท force ยท lock ยท drop ยท slots ADMIN Pepe's own mic control. grab/hold takes & holds a mic (re-grabs when a slot frees); force seizes a slot even when the mic's full; lock self,alice,โ€ฆ restricts the mic to named users (everyone else is blocked) and unlock lifts it; drop lets go; slots <n> sets the room's mic-slot limit.
Per room: every room has its own mic button, so holding, hold-mode and force-mode all belong to one room โ€” Pepe can be holding the mic for music in one room while free in another, and stepping into a room to speak one line no longer makes him keep its mic. !mic drop lets go of the room you're in (and says where else he's still holding); !mic drop all lets go everywhere. !mic status lists the other rooms he's holding in.
Scope of a settings command: !mic music off, !mic tts voice X, !mic alerts, !mic slots, !mic tts on|off|chatty|caption all change the room you typed them in (like !redlist). Add -global to change the default that rooms without their own setting follow โ€” rooms that do override it are unaffected, and Pepe says so. Add -all to change the default and clear every room's override, so every room really gets it.
Random voice: set any voice to random โ€” !mic tts voice random, !say โ€ฆ -v random, or the room/alert voice in the panel โ€” and Pepe picks a different one every line. It only ever picks voices that are free for whoever asked, so it can never bill you for a premium voice you didn't choose (admins, who use every voice free, get the full range).
Per-room settings: each room can also have its own default voice, chatty-voice frequency, caption/alert switches, jukebox-on-mic setting and mic-slot limit โ€” set them in the admin panel with that room selected. Chat commands like !mic tts voice set the global default that rooms without an override follow. The VoiceBox engine, model size and audio device stay global, since there's only one of each.
!mic reset ADMIN NEW Recovery tool. Makes Pepe forget what he thinks he's holding, in every room โ€” and deliberately clicks nothing, so it can't make the client worse. Use it when a room is stuck showing held that !mic drop won't clear: dropping a mic that isn't really on would turn it on, so once his belief and the client disagree there's otherwise no way back. Afterwards check the client and use !mic grab / !mic drop to line them up. (Aliases: !mic resync, !mic forget.)
!mic status ยท device ยท test ADMIN status shows everything at once โ€” hold mode, whether the audio pipeline is armed, whether Pepe holds a slot, who else is on the mic, any lock or force-block, and the output device. device <name> sets that output device by substring (e.g. !mic device CABLE Input); with no name it just tells you the current one. test plays a tone to it, grabbing the mic if needed โ€” the quickest way to check the audio path end to end.
!mic force audio on|off ADMIN Lets Pepe interrupt a full mic to play a clip โ€” a !say, an alert sting, or a chatty mic-up. When it's on and every slot is taken, he bumps whoever's on, plays the clip, then drops and unblocks them straight away. He does not keep the mic, which is what makes this different from plain !mic force (that seizes a slot and holds it). Off (the default) he just waits for a slot to free up, and a clip is only dropped if the mic stays full for the whole wait. Handy in a busy room where Pepe would otherwise never get a word in; rude if you leave it on during a serious conversation.
!mic click ยท pipeline ADMIN Resync tools for the rare case where Pepe's mic state drifts (he's really on the mic but thinks he's off, so drop does nothing). click (aliases resync/kick) fires a raw mic-button click without changing his tracked state โ€” it physically toggles the real mic so you can nudge hardware and belief back into agreement, then use grab/drop normally. pipeline also clicks but flips the tracked arm/disarm flag with it.
!mic alerts on|off ยท music on|off ADMIN alerts switches the alert sound channel on or off for this room โ€” the full alert controls are under !alerts. music makes Pepe hold the mic while the jukebox plays so the whole room hears it.
!alerts NEW ADMIN How big moments โ€” a heist forming, a turf invasion, the jackpot cracking, a big win โ€” reach each room. An alert is an event, not a sound: it can arrive by any combination of three channels, each switched separately.
Channels (per room): !alerts sound on|off a sting through the mic ยท !alerts tts on|off Pepe says it out loud ยท !alerts text on|off a line in chat. !alerts on|off is the master switch โ€” off and this room gets nothing at all. Like every settings command these change the room you typed them in; add -global or -all to widen.
Scope (per event, global): !alerts heist room keeps a heist alert in the room it started in. !alerts heist global also tells every other room where it's kicking off, by tab name โ€” "a heist is forming in Pepe's Pad". A room with alerts switched off stays quiet either way, so one room can opt out of the noise entirely.
Voice: !alerts voice <name> gives spoken alerts their own voice in this room, so an alert cuts through instead of sounding like everything else Pepe says. !alerts voice random re-rolls one each time, !alerts voice default goes back to the room's usual voice. Per room, like the channels.
Force the mic: !alerts jackpot force on lets that alert bump whoever is on the mic so the sting or spoken line actually gets heard, rather than queueing and being dropped if no slot frees up. It cuts someone off mid-sentence, so it's set per event and off by default โ€” worth it for the jackpot, rarely for anything else. Text alerts never need a mic slot and are unaffected.
Notes: spoken alerts need TTS on in that room โ€” if it's off they simply don't play there, whatever this is set to. The text channel doesn't repeat itself in the room the event happened in (that room already posts its own announcement); it writes the "it's happening over there" line into the other rooms. !alerts test <type> fires one to check your setup, and !alerts on its own shows where everything stands. All of it is in the admin panel too.
๐Ÿ‘๏ธ Pepe's Eyes (Cam Vision) NEW
!look [user] (also !see, !peek) Pepe opens the user's cam, waits for it to load, and describes what he sees in character โ€” 10,000 PAT (admins free; must be switched on). !look with no name lists the cams currently open. Add -mic to have him say it aloud (voice surcharge applies), -p for a PM. Multiple people: !look moxier plantbaked reacts to both cams in one line (up to 4; each costs the !look price).
!snap <user> [-e <hours>] NEW Grabs a still from someone's cam and posts a link that expires โ€” 25,000 PAT (admins free). The default life is 24 hours; once it's up the image is deleted and the link is dead. Shorten it for one shot with -e (!snap moxier -e 2 = two hours; 5 minutes minimum, 7 days maximum). A copy is also saved on the bot machine, which the expiry doesn't touch.
Unlike !look this leaves a picture on the web, so it ships switched off and each room opts in โ€” while it's off, only admins can use it. Needs the cam window (see !activeroom).
!clip <user> [-a] [-t <secs>] [-e <hours>] NEW Same as !snap but a short video โ€” 50,000 PAT (admins free). Records 15 seconds by default; -t sets the length up to 60s (!clip moxier -t 30). Pepe posts "recording X for 15sโ€ฆ" in the room before he starts. Same 24-hour expiry as a snap, same -e to shorten it, same local copy kept on the bot machine. Aliases !rec, !record.
Sound: add -a (or -audio) to record the room's audio into the clip. Two things have to be true or it records silently and tells you which one failed: the room must be the one Pepe is listening to (see !audioroom โ€” the loopback only carries one room at a time, so otherwise the clip would get a different room's conversation), and someone must be on the mic. Whoever holds the mic during the recording is what you get. The clip still records either way โ€” -a never cancels it.
Clips are downscaled and compressed to stay postable; if someone's cam is too busy to fit even at the smallest setting, Pepe says so and refunds rather than posting a broken link. Ships switched off per room like !snap.
!snap list ยท !snap delete <id|all> ADMIN Kill a snap or clip link before it expires. !snap list shows every live capture โ€” stills and video together, so there's one place to take anything down. It lists โ€” id, whose cam, who took it, which room, and how long it has left. !snap delete <id> takes that one down immediately; !snap delete all clears every live link at once. !unsnap <id> is the short form. Deleting removes the hosted image only โ€” the local copy on the bot machine stays. If the site can't be reached the bot says so explicitly rather than reporting a delete that didn't happen.
-cam [user] โ€” on !ask, !imagine and !roast NEW Add -cam <user> to make Pepe use that person's live webcam as part of the command.
!ask what's he drinking -cam tux โ€” answers from what he can actually see.
!imagine me as a knight -cam โ€” uses your cam as the reference image.
!roast tux -cam โ€” same as !camroast tux, kept as an alias.
Bare -cam means your own cam. Several people at once: repeat the flag or comma-list them โ€” !ask who looks happier -cam moxier,plantbaked โ€” and Pepe sees every cam as a separate labelled image in one answer (up to 4). Every -cam command costs the command's normal price plus one vision surcharge per cam (each is an extra AI call) โ€” the same rule on !ask, !roast and !imagine. Any cam that can't be opened is refunded, and if none work you get everything back. Only works in the room Pepe's cam is pointed at.
!roast [user] -cam (also !camroast, !roastcam) Pepe roasts the user using their cam as visual material (plus what he knows about them). Identical to !roast [user] -cam, and priced the same way: the !roast price plus the vision surcharge (admins free; must be switched on). Refunded in full if the cam won't open.
!cams List who's currently broadcasting a cam.
!cam [user] ADMIN Open a user's cam inside Camfrog so Pepe / the operator can see it.
!userlist ADMIN List the participant list's real usernames (recovered from Camfrog's owner-drawn list).
!lookpublic on|off ADMIN Allow or deny regular users to use !look / !camroast (admins can always use them). Alias !lookmode.
!chattycam on|off ยท switch on|off ADMIN Let chatty mode glance at a user's cam for context when seeing it would improve a reply โ€” no command needed, and used sparingly. In the room Pepe's window is on he's told exactly who is on cam; in other rooms the roster can't be read (it comes from the window), so he isn't given a list โ€” he can still look at someone actually being talked about, and the window switches to that room for the glance and straight back.
!chattycam switch on|off NEW controls whether a glance may move the window to this room at all (per room, on by default). Turn it off for a room that's happy for commands to pull the window over but not an idle glance nobody asked for โ€” Pepe then only looks there when it's already the active room. It also needs auto-switch on for that room, and never overrides a room pinned with !activeroom. Costs a vision call each time.
๐ŸŽฎ Games & Activities
!trivia [buy-in] [topic] Open a trivia lobby. Everyone pays the buy-in into a prize pot โ€” winner takes it all! Buy-in is optional (defaults to 1,000 PAT) and an optional topic can follow. Needs at least 2 players; the lobby stays open ~60s for others to !join.
!join Join whatever's forming โ€” the open trivia lobby or a heist crew โ€” by paying the buy-in.
!score Show the current trivia pot and the points leaderboard.
!trivia stop Cancel the session early (starter or admin only) โ€” all buy-ins are refunded.
!heist [job] Rob a target, D&D-style โ€” a multi-round survival gauntlet with your !sheet stats, gear, and gang. Each round everyone rolls 1d20 + a random stat's modifier vs a rising difficulty (plus crew/flawless/gang bonuses). Survive to accrue loot, !bail to cash out, get pinched and your loot is split among the survivors. Survivors crack the target: every one rolls a d20 and the top 5 sum to the % they blow open. Jobs (!heist <job>, or !heist list): ๐Ÿช store โ€” small, quick, always open (its own small till, no jackpot); ๐ŸŽฐ casino โ€” the classic vault job (needs a 100k+ vault); ๐Ÿšš convoy โ€” harder, bigger stakes (needs a casino job first, 250k+ vault); ๐Ÿ›๏ธ bank โ€” the legendary Federal Reserve (needs ๐Ÿ“ Blueprints found on casino/convoy jobs, 500k+ vault). Money jobs are paced by two gates: your own personal heat meter (each job you start heats you up and cools over time โ€” it's yours alone, so other people's heists never block you) plus a global cooldown per job type (store 30m, casino 1h, convoy 2h, bank 3h). Each job caps its vault take โ€” casino โ‰ค40%, convoy โ‰ค70%, bank 100% โ€” so a fat vault is worth far more to a bank crew than to casino grinders. Deep runs can drop rare scores: ๐Ÿ“ Blueprints (unlocks the bank), ๐ŸŽฒ Loaded Dice (!reroll a stat), ๐Ÿ’ Kingpin's Ring (!ring +1 a stat), ๐Ÿ“ˆ The Fence (+10% payouts), and ๐Ÿง  Mastermind (advantage on your two best stats). Gear up with !shop. See /heist for the guide.
!bail During a heist, cash out between rounds to lock in your accrued loot and quit while you're ahead โ€” only affects you. Press your luck or play it safe (if you get pinched, you lose your loot to the crew).
!heisttop Show the heist leaderboard โ€” top hauls and deepest runs โ€” plus a link to the full guide & "vault cracked byโ€ฆ" hall of fame.
!sheet View your heist character sheet โ€” your unique pixel avatar, 6 D&D stats and your class, which gives advantage on its stat. Use !sheet <user> to look someone up, or !sheet regen to re-roll your stats for 50,000 PAT (resets and hands back all your allocated points to spend again; your heist record and avatar are kept).
!avatar Show your one-of-a-kind pixel avatar. It appears on your !sheet, on the gang roster page, and on the live heist & arena stream overlays (your rolls, wins and losses play out on screen). !avatar regen mints a fresh random look for 20,000 PAT.
!allot [stat] Spend a stat point on str/dex/con/int/wis/cha. You earn 1 point every 10 levels.
!reroll [stat] Spend a ๐ŸŽฒ Loaded Dice (a rare heist drop) to re-roll one stat โ€” a gamble, it can go up or down (and may change your class).
!ring [stat] Spend a ๐Ÿ’ Kingpin's Ring (a rare heist relic) to permanently raise one stat by +1 (up to 20).
!shop Browse the heist gear shop โ€” permanent gear (Body Armor: +2 CON/โˆ’1 DEX, Sidearm: +2 STR/โˆ’1 CHA, Grip Gloves: +2 DEX/โˆ’1 STR), personal consumables (Lockpick re-rolls a failed check, Handcuff Keys ~50% to slip a pinch, A Good Lawyer 49% to keep your loot when pinched), and crew perks that help everyone (Getaway Driver pulls the first robber out of a pinch, Police Scanner gives the whole crew +2 on a tense round, Schematics โˆ’1 to every DC, Smoke Bomb gives the whole crew advantage on a brutal round). Plus arena/PvP gear (Brass Knuckles: +1 on physical / โˆ’1 on mental clashes; Adrenaline Shot: re-roll a losing clash; Second Wind: ~50% to survive an arena elimination). Big-ticket buys: ๐ŸŽญ Body Double (20k โ€” a decoy takes the fall, guaranteeing you survive one pinch), ๐Ÿงณ Burner Identity (40k โ€” knock 40 off your heat), ๐ŸŽฉ Alibi (50k โ€” your next money job gains no heat), and ๐Ÿ“œ Presidential Pardon (100k โ€” wipe your heat to 0 instantly). Half of each purchase feeds the jackpot vault. Full details on /heist.
!buy [item] [qty] Buy heist gear with PAT, e.g. !buy lockpick 3 or !buy armor. It's stored on your sheet and auto-triggers during your next heist โ€” no mid-heist commands needed.
!gear Show your owned gear and consumables (or !gear <user> to check someone else's loadout).
!showdown Start a Showdown โ€” a Price-is-Right guessing game. The bot picks a secret number from 1 to 10,000. Everyone who joins pays a 10,000 PAT buy-in into one pot, and the closest guess without going over wins the whole pot (ties split it). Nail the number exactly for a jackpot bonus. Guessing is open for 90 seconds. The pot is just the buy-ins โ€” no PAT is minted.
!guess [number] Join the running Showdown and lock your guess (1โ€“10,000), paying the 10,000 PAT buy-in. One guess each, and guesses are public as they come in.
!pictionary [rounds] [theme] Start a game of Pictionary โ€” the bot draws a picture (live on the stream) and the room guesses. Each round it picks a secret word and sketches it on screen; just type your guesses in chat (no command needed) and the first correct guess wins a PAT prize. Hints drop as the clock ticks, and a leaderboard shows at the end. Pick a theme when you start โ€” e.g. !pictionary movies, !pictionary 5 animals, !pictionary the 90s (round count optional, default 10). Free to play. Also !doodle / !draw.
!poll [question]? [opt1], [opt2], ... Start a poll. Users vote by typing the option number. Creates a live results page.
!results Show current poll results.
!endpoll End the current poll and announce the winner.
!votekick [user] Start a vote to kick a user from the room. Needs at least 5 voters with 80% voting yes to pass. Vote lasts 60 seconds. Can't votekick admins.
!vk yes / !vk no Cast your vote on an active votekick. Type !vk alone to see current tally.
!voteblock [user] Start a vote to mic-block a user (mutes their mic; they stay in the room). Needs at least 5 voters with 80% voting yes to pass (4 of 5). Vote lasts 60 seconds. Can't voteblock admins.
!vb yes / !vb no Cast your vote on an active voteblock. Type !vb alone to see the current tally.
!votemod [user] Start a vote to strip a user's moderator status. Needs at least 10 voters with 80% voting yes to pass. Vote lasts 60 seconds. Can't target bot admins.
!vm yes / !vm no Cast your vote on an active votemod. Type !vm alone to see the current tally.
!timeout [user] [hours] NEW Time a user out โ€” pulls them off the mic/red list, de-mods and mutes them, then auto-lifts when the timer's up (default 24h). Admins apply it instantly; anyone else starts a community vote (10 voters, 80% โ€” same bar as !votemod).
!strike appeal [user] NEW Appeal a user's most recent automod strike โ€” removes the strike, refunds its PAT fine, and lifts any timeout. Admins appeal instantly; anyone else starts a 5-person community vote (80%).
!vote yes / !vote no NEW Cast your vote on an active community timeout or appeal vote (aliases !votey / !voten). If no such vote is live, !vote <option> votes in the current poll instead.
Bottle service NEW Bought from !shop โ€” Pepe drops the anthem on the mic with a sparkler avatar, plus 10K XP. If a song's playing it waits for the gap after it rather than cutting it off. It comes out of Pepe's mic, so it only works in the room his mic is pointed at (see !activeroom); ordering it from another room is refused before you're charged. Admins can switch it off per room.
!sponsor [message] Sponsor the bot for 10,000 PAT: your message is posted in chat once an hour for 24 hours, in every room Pepe is in. Only 4 sponsor slots at a time (messages are spaced out across each hour). Add -mic and Pepe also reads it aloud. With auto-switching on he reads it in every room that allows it, one after another; rooms that don't still get the text, so nobody misses it. -v <voice> picks the voice (see !mic tts voices). !sponsor list shows active sponsors with their slot numbers; !sponsor stop cancels yours (no refund). Admins can pull a single advert with !sponsor remove <slot#|user>, clear them all with !sponsor clear, and are not held to one slot each.
๐Ÿ—บ๏ธ Turf Wars NEW
Gangs fight for control of 10 London boroughs, each running a business (autoshop, casino, nightclub, money launderingโ€ฆ) that feeds your gang treasury every day. The treasury pays daily wages and funds fortifications and upgrades. Claim empty turf, then raid rivals to expand โ€” but spreading too thin runs up heat, invites police raids, and puts a Most-Wanted bounty on the biggest gang. Full guide: /turfwars ยท live map: /turf.
!turf ยท !map Show the live control map โ€” who holds what. !turf <area> shows a single borough's business, owner, stake, income and defences. !turf help lists the sub-commands.
!claim [area] Claim an unowned borough for your gang, locking a stake from the treasury (outer 500k ยท midtown 2M ยท Mayfair 10M PAT). Higher tiers need rep earned since Turf Wars launched (midtown 5,000 ยท Mayfair 15,000) โ€” so no grabbing the casino on day one.
!invade [area] Raid a rival gang's borough that borders one of yours. Opens a muster window โ€” your gang !joins the crew while the defenders !defend. The crew rolls through the stash's defence DC ladder; crack it to seize the stake and flip the borough, or get repelled. Same tier-rep gates as claiming. (Pepe pulls on a balaclava for the raid. ๐Ÿด)
!join Join the raiding crew during an invasion's muster window (also joins a forming heist crew or trivia lobby).
!defend Rally to your gang's stash while it's under attack โ€” every online defender raises the defence DC the raiders must beat.
!fortify [area] [amount] Spend treasury PAT to permanently raise a borough's defence DC against future invasions.
!turf upgrade [area] [name] Buy a permanent stash upgrade for a borough you hold: guards (always-on defenders), panicroom (shields part of the stake when cracked), laundromat (boosts the business's income).
!turf name [area] [name] Rename your borough's business for flavour โ€” your name shows on the control map.
!turf sinks Show how much real player spending each business captured on the last daily tick (a calibration view of where the economy's PAT is flowing).
!gang deposit / withdraw [amt] Fund or draw from the gang treasury. Withdrawals are capped at 100,000 PAT/day (daily wages don't count) so nobody drains the war chest in one go. See also !gang upgrade and !gang defect (leave your gang).
๐ŸŽจ AI Generation
!imagine [prompt] Generate an AI image. Mention a user's name to include context about them. Add a URL to use as reference, or -cam [user] to use a live webcam. The result is posted as a link and framed on Pepe's cam for about 25 seconds, so the whole room sees it without opening anything (a game already on the overlay keeps the screen). Cost: 25,000 PAT
!music [description or lyrics] Generate an original AI song from a description or your own lyrics (Suno). Takes a couple of minutes; Pepe posts a link when it's done. Not the jukebox โ€” for playing existing tracks use !play. Cost: 25,000 PAT
!video [prompt] Generate a short AI video. Add an image URL for image-to-video. Cost: 50,000 PAT
!chart [topic] Generate a data visualization. Can use room data (mic stats, spin history, etc.) or any topic. Cost: 10,000 PAT
๐ŸŽต Spotify
!np Show the currently playing track, artist, progress, and who requested it (aliases: !nowplaying, !song). Pepe also knows what's playing โ€” just ask him.
!upnext See what's playing and the upcoming queue (with who requested each track). Aliases: !nextup, !queued, !qlist โ€” or just !queue with no song.
!queue [song] Add a song to the queue for 1,000 PAT (search by song, artist, or both); if nothing's playing it starts immediately. When there's one clear match it's added right away; if the match is ambiguous (or several versions exist) you'll get a numbered list to !pick from. To keep it fair, you can have at most 2 tracks waiting at a time, and you can't add a track that's already in the queue โ€” so nobody floods it.
!find [song] ยท !pick [#] !find (alias !songsearch) always lists the top matches so you can choose the exact track, then !pick 2 queues that one. Use this when !queue keeps grabbing the wrong version. (Note: !search is the transcript search, not music.)
!remove Remove the last track you added to the queue (alias !unqueue). Spotify can't pull a song out of the queue directly, so it's automatically skipped the moment it comes up.
!skip Vote to skip the current track. Needs 2 votes to pass โ€” stopping music is deliberately easier than starting it. Admins skip instantly.
!djban [user] ADMIN Suspend a user's DJ privileges โ€” they can't queue, skip, pause or control the music (they can still see !np). !djunban [user] restores it; !djbans lists who's banned. Persists across restarts.
!pause / !resume Vote to pause (or resume) the music โ€” 2 votes to pass, same as !skip. Admins pause/resume instantly.
!dj on|off NEW ADMIN Put Pepe on the decks โ€” he auto-DJs, generating an eclectic set on the fly: crowd-pleasers, deep cuts, every era and genre, no repeats. He reads the room โ€” the songs you !queue become cues for what he lines up next. He'll even drop a spoken DJ line over the intro of some tracks (ducking the music under his voice) โ€” toggle with !dj talk on/off (per room โ€” add -all or -global to widen it; !dj talk chance <0-100> sets how often). The DJ only speaks up in rooms actually hearing the set โ€” the ones with !mic music on โ€” and holds the drop entirely if any of them has DJ talk switched off, since the mic carries one stream to all of them. !dj next cues one now, !dj genre <g> nudges the vibe, !dj min <1-5> sets how many picks stay queued ahead, !dj status shows what's going on.
!play [song] Search and play a song, playlist (!play playlist name), or album (!play album name); without a query it starts/resumes playback. Admins play instantly; everyone else votes โ€” 4 people typing the same !play [song] makes it play. Starting music takes more agreement than stopping it (!skip/!pause need only 2), so one person can't put the room on their soundtrack. If something's already playing, non-admins must !queue instead of cutting it off. Pepe auto-wakes the speaker device first, so playback starts even if Spotify was idle.
!vol [0-100] ADMIN Set Spotify volume.
!repeat [track/off] ADMIN Toggle or set repeat mode. Modes: track, context (playlist/album), off.
!shuffle [on/off] ADMIN Toggle or set shuffle mode.
๐Ÿง  Memory & Logs
!memory recall [user] See what the bot has learned about a user.
!log [search] Search the chat logs. Supports "exact phrases" and multi-word AND. Use !next to paginate.
!modlog [type] [user] [n] View mod actions. Types: kick, block, ban, unban, punish, unpunish, topic, friend, moderator, admin, removed. Filter by user (matches both actor and target). Use by:user to filter by who performed the action, or to:user to filter by who received it. Example: !modlog kicks by:plantbaked 10 or !modlog bans to:madbooth.
!next Show the next page of results (for replay, search, log, modlog).
๐Ÿ”ง Admin Only ADMIN
!chatty on/off/status Toggle chatty mode โ€” bot chimes in on conversations unprompted.
!autotopic on/off/now/status Toggle auto-topic โ€” bot sets a witty room topic via /topic as the conversation evolves (every ~20 min + 30 msgs). Use now to force an immediate topic change.
!transcript on/off/status Toggle mic transcription.
How multiple rooms work NEW Pepe can sit in several Camfrog rooms at once, and each one is its own place.
People carry over, rooms don't. What he knows about you follows you between rooms (and he'll say where he heard it โ€” "you mentioned that in the other room"); a room's own lore, chat log and transcripts stay in that room.
Chat & transcripts are per room. Anything that quotes history โ€” !ask, !roast, !chart, chatty replies, DJ patter โ€” only draws on the room you're in. So do !log, !replay, !search, !mictop, !micstats and !modlog. Add -all to any of those to search or total across every room instead.
Settings are per room. Games, chatty, cams and the rest can be switched on in one room and off in another from the admin panel's room selector โ€” only the AI model/API settings are shared.
Telegram has its own scope: /room <name> focuses a chat on one room, /room all widens it. Keyword alerts always cover every room and say which one they came from.
Voice and cams live in one room at a time โ€” whichever !audioroom / !activeroom point at. Mic and cam commands are refused elsewhere with a note saying which room owns them.
!audioroom [room] ยท all NEW When Pepe is in more than one room, set which room's audio is live. Loopback captures a single audio stream, so only the chosen room's mic-ups get recorded/transcribed โ€” the others are skipped to avoid misattributing what was said. !audioroom alone shows the current room and the rooms seen; !audioroom all (or off) records every room. (Alias: !microom.)
Automatic switching: once the speaker control is recorded with !audiobtn, this actually moves the audio in the client โ€” mutes the room that currently has it, switches to the target's tab, then unmutes that one, all in the background with no focus stolen. If any step fails the previous room is unmuted again and the setting is left alone, so you never end up with two rooms feeding one stream, or none. Add -noswitch to record the setting without touching the client โ€” for when the audio is already where you want it and only the bot's idea of it was wrong. (Also -nomove / -setonly.)
!activeroom [room] ยท auto NEW When Pepe is in more than one room, set which room's window is targeted by window-driven actions โ€” his own mic button, the participant-list read, and cam opening. Matched as a substring of the room window's title bar. !activeroom alone shows the setting; !activeroom auto reverts to first-match (the single-room default). !activeroom <tab label>=<room> tells Pepe which tab belongs to which room when the two are named differently. (Alias: !winroom.)
Auto-switch: with Auto-switch room tab on in the admin panel, Pepe changes tabs himself instead of refusing โ€” a window-driven command just runs in the room it was typed in. Spoken audio (!say, -mic replies, sponsor reads) queues: the tab is switched immediately before each clip takes the mic, so several people speaking from different rooms play one after another in the right rooms rather than fighting over the tab. Pinning a room with !activeroom disables auto-switching.
!audiostatus ADMIN NEW Reads every room's speaker button and reports which rooms are live, muted, or unknown โ€” and refreshes the mute column in the admin panel's status card. On demand only: reading a room's state means switching to its tab, so it is never polled. Rooms show as unknown until Pepe has had reason to look at them; any !audioroom move visits them all and fills the picture in. (Alias: !mutestatus.)
!mute ยท !unmute [room] ADMIN NEW Mutes or unmutes one room's audio in the client without changing the !audioroom setting โ€” the repair tool for when the two drift apart. Switches to the room first (a speaker button only exists while its room is on screen), then clicks. If the button reports its state on your build these are idempotent (a second !mute does nothing); if it doesn't, they act as a plain toggle and say so rather than claiming a state they can't see. (Alias: !roomaudio.)
!roombuttons ADMIN NEW Lists the room window's buttons (control id, position, size) to the bot log โ€” how the speaker/mute control gets identified, the same way the mic button was. (Alias: !roombtns.)
!clickbtn [id] [room] ADMIN NEW Test-clicks one control by id, in the background. Use it to work out which button mutes a room, then record it with !audiobtn. (Alias: !clickbutton.)
!audiobtn [id] ADMIN NEW Records which control mutes/unmutes a room's audio. Once set, !audioroom <room> moves the audio itself โ€” mutes the old room, switches tab, unmutes the new one โ€” with no clicking and without Camfrog taking focus. Without an argument it shows the current setting. Stored per install, since the id can differ between Camfrog builds. With no argument it reports the id and whether state detection is calibrated. Pepe works out which button reading means "muted" by comparing every open room โ€” the odd one out is the live one โ€” which is what makes !mute/!unmute idempotent rather than blind toggles. !audiobtn recal re-learns it if it ever gets it wrong; it needs at least two rooms open with exactly one unmuted.
!roomtabs ADMIN NEW Lists the room tabs Pepe can see in the Camfrog window, and which one is currently open. Rooms aren't separate windows โ€” one window swaps contents โ€” so this is what auto-switching actually clicks. (Alias: !tabs.)
!roomswitch [room] ADMIN NEW Switch the Camfrog window to a room's tab, without stealing focus or bringing Camfrog to the front. Reports whether the switch was verified (the window title actually changed) โ€” the safe way to test auto-switching before enabling it. A room's tab label and its room id are unrelated strings ("Pepe's Pad" vs "PepeFrog.Room"); if the label was never learned, map it with !activeroom <tab label>=<room>. (Alias: !switchroom.)
!roomshell ADMIN NEW Dumps the room window's child controls (class, id, visibility) to the bot log โ€” the diagnostic used to find the tab buttons in the first place. Only needed when tab switching stops working after a Camfrog update.
!botadmin list ยท add ยท remove ADMIN NEW Manage who can run admin commands and bypass the public toggles. Replies privately. You cannot remove the last admin โ€” that would lock everyone out. Also editable in the admin panel under Bot Admins. Use the Camfrog login username, not a display name. (Alias: !botadmins.)
!activeroom <tab label>=<room> ADMIN NEW Maps a Camfrog tab to a room. The room id from the network ("PepeFrog.Room") and the label Camfrog prints on the tab ("Pepe's Pad") are unrelated strings, so Pepe has to be told which is which โ€” e.g. !activeroom Pepe's Pad=PepeFrog.Room. He learns most of these on his own once he's seen a room's window, but a room he's never had open won't be switchable until it's mapped. If !roomswitch reports it only had the room id to try, this is the fix. !roomtabs shows the exact labels to use.
!roomwindows NEW Diagnostic: list Camfrog's open window titles so you can see what to match !activeroom against (the room name can differ from the title bar). Run this first when setting an active room. (Alias: !winlist.)
!memory correct [user] [old] -> [new] Correct a fact in the bot's memory.
!memory prune [user] [text] Remove a specific fact from memory.
!memory alias add [user] [alias] Manually add an alias for a user.
!memory alias remove [user] [alias] Remove an alias from a user.
!memory link [primary] [alt] Link two usernames as the same person. Facts from both accounts are combined in lookups. Primary is the main account.
!memory unlink [primary] [alt] Remove a linked alt account from a primary.
!memory links [user] Show all accounts linked to a user.
!memory ignore [user] Ignore a user in the memory system.
!ignore [user] Toggle command ignore for a user โ€” their commands will be silently dropped. Run again to unignore. Run without a user to see the ignore list.
!globalunblock on/off Automatically unblock ANY user when they get mic-blocked. Overrides all block actions room-wide. Persists between restarts.
!strike [user] ยท appeal [user] NEW Automod polices mic-hogging and mod-power abuse with an escalating strike ladder. Each strike levies a growing PAT fine (50k โ†’ 150k โ†’ 450kโ€ฆ); a user who can't afford it takes a double strike instead, and they're told their count, the fine, and why. !strike user shows their strikes/role/timeout status; !strike appeal user removes the last strike, refunds its fine and lifts any timeout. (Non-admins can appeal via a community vote โ€” see !strike appeal in Games & Activities.)
!casinoban [user] NEW Ban a user from every casino game across all sources โ€” the web gold wheel, the in-chat wheel, Hold'em, Blackjack and the Discord bot. Matches their Camfrog name or their linked publicaccess.tv account. !casinounban [user] lifts it. Persists between restarts. (Aliases: !banfromcasino / !unbanfromcasino.)
!automod [action] [user] Set automatic moderator counter-actions. When a mod event is detected, the bot automatically sends the counter-command. Actions:
!automod unblock user โ€” auto-unblock when blocked
!automod block user โ€” auto-block when unblocked
!automod unpunish user โ€” auto-unpunish when punished
!automod punish user โ€” auto-punish when unpunished
!automod unban user โ€” auto-unban when banned
!automod ban user โ€” auto-ban when unbanned
!automod friend user โ€” auto-give friend when role removed
!automod moderator user โ€” auto-give moderator when role removed
!automod remove user โ€” auto-remove role when given
!automod defend user โ€” demote kicker to friend when this user is kicked
!automod protect user โ€” auto-kick whoever kicks this user
!automod โ€” list current rules
!automod remove [action] [user] โ€” remove a specific rule
!automod clear โ€” clear all rules
Rules persist between restarts.
!model Tiered AI model control with per-function overrides.

Tiers: primary (ask/roast/chatty) | secondary (charts/polls/prompts) | background (memory/trivia/summaries)
Functions: ask, roast, chatty, chart, imagine, poll, trivia, memory, summary

Presets:
!model preset quality โ€” Opus / Sonnet / Haiku
!model preset max โ€” Opus / Opus / Opus
!model preset balanced โ€” Sonnet / Haiku / Haiku
!model preset budget โ€” Sonnet / Haiku / Local
!model preset local โ€” everything local Ollama
!model preset off โ€” disable all AI (tools still work)

Tier control:
!model all [model] โ€” set all tiers
!model primary opus โ€” set a specific tier

Per-function override:
!model ask opus โ€” override just !ask to use Opus
!model chatty local โ€” override chatty to use local
!model roast sonnet โ€” override roasts to use Sonnet
!model ask reset โ€” remove override, fall back to tier
!model reset overrides โ€” clear all overrides

Info:
!model status โ€” show tiers + active overrides
!model list โ€” list models, presets, and functions

Intelligent Router:
!model preset intelligent โ€” dynamic model selection based on complexity, budget, and user feedback
!model mode smart โ€” LLM-classified routing (uses local gemma3:4b to classify complexity, ~2s). Routes: simpleโ†’Haiku, moderateโ†’Sonnet, complexโ†’Opus
!model mode fast โ€” rule-based routing (instant, no LLM). Routes: simpleโ†’Haiku, moderateโ†’Haiku, complexโ†’Sonnet
The router adapts over time โ€” if users react negatively to a cheaper model's responses, it auto-upgrades. If a model consistently gets positive feedback, it may downgrade to save cost.

Budget Control:
!model budget [amount] โ€” set daily budget (e.g. !model budget 5 for $5/day)
!model budget โ€” show current spend + remaining
!model costs โ€” detailed cost breakdown by model and function
!model feedback โ€” show quality scores per model based on user reactions

Models: opus, sonnet, haiku, local, intelligent, off. Auto-falls back to local when API credits run out. Persists between restarts.
๐Ÿ”ฌ Diagnostics (RE tools) ADMIN
Low-level reverse-engineering tools used to build the cam & mic features. Most install Frida hooks โ€” turn them off when done (several are heavy and can destabilize Camfrog if left on).
!sniff on|off (also !pktsniff) Dump any Camfrog packet whose type isn't decoded yet (hex + field breakdown). Turn on, do the action in Camfrog, read the console. !sniff alone shows the tally of unknown types seen.
!wintrace on|off Log window creation (class/title + backtrace) โ€” used to find the video render window. High-frequency; open one cam then turn off.
!camwatch on|off Stream the participant list's click / select / right-click notifications โ€” how a real click is structured.
!menuwatch on|off Capture WM_COMMAND / WM_CONTEXTMENU across Camfrog's windows โ€” used to find the "View Webcam" menu command id. Hooks ~90 window procs; detaches them on off.
!unames Recover the owner-drawn participant list's names by intercepting its paint calls; prints per-row strings + capture stats.
!listdiag Report the participant-list control's window style / mechanism (owner-data vs owner-draw), parent, and text reads.
!dumprows [n] Dump each list row's underlying data struct โ€” for probing per-row data.
โ„น๏ธ Info
Earning PAT Earn PAT by chatting in the room (enters you in automatic raffles), spinning the wheel, and winning trivia. Link your Camfrog username on publicaccess.tv to redeem for prizes like Discord Nitro and Camfrog Pro.
Earning XP 1 XP per chat message, 1 XP per second on mic. Level up to unlock future perks.
Telegram The bot is also available on Telegram! Ask questions, search transcripts/logs, set keyword alerts, and monitor the room remotely.
🔑 Admin & Operator
!turf end ADMIN Ends the turf war season immediately โ€” normally it runs 30 days and settles itself. Crowns the highest Turf Score, pays the prize (everything the streets banked into the season pot, matched with minted funds), sends all business banks to the Federal Reserve, and refunds every stake to whoever held the borough. Ownership, banks, forts, upgrades and Turf Score all reset; gang rep is permanent and carries over. Announced in every room. !turf season (anyone) shows the standings, the day and the pot without ending anything.
!turf tick ADMIN Force an immediate daily settlement instead of waiting for the scheduled one: income distribution, the tip tap, upkeep, Turf Score accrual, bank-overflow spill to the vaults, and the Reserve auto-top-up if it's on. Useful for testing a rate change without waiting a day. Runs on its own thread, so the bot stays responsive.
!turf reset ADMIN Wipes turf ownership back to a blank map and refunds each held borough's stake to its owner's treasury. Gangs, members and treasuries survive. Lighter than !gangs reset โ€” this clears the board, not the players.
!gangs reset ADMIN The start-over button. Dissolves every gang โ€” members, treasuries, rep, Turf Score โ€” and clears the whole map including banks and stakes. Nothing is refunded and there is no undo, so it asks first: !gangs reset confirm to go through with it. Distinct from a season ending, which keeps rep and hands stakes back.
!vault mint [vault] [amount] ยท !reserve mint [amount] ADMIN Prints PAT straight into any of the three vaults. !vault mint jackpot|casino|reserve <amount> โ€” the wheel jackpot goes through the backend (it's the same pot the site and Discord see), the casino vault and Reserve are the bot's own. Aliases work: wheel/spin for the jackpot, fed/bank for the Reserve. Amounts take k and m suffixes, so !vault mint casino 500k is fine.
This is the only lever in the game that creates PAT rather than moving it, so it's admin-only and announced in every room whichever pool it lands in. Use it to seed a vault early in a season, before sink inflow has built it into a target worth robbing. !reserve mint <amount> still works as the Reserve shortcut.
!reserve auto on|off has the daily tick top the Reserve back up to a floor automatically (off by default), and !reserve floor <amount> sets that floor. Plain !reserve is public and just shows the balance.
!turf sinks ยท !turf cargo The economy's dashboard. !turf sinks shows last tick's captured volume per business and โ€” importantly โ€” how much went over the sink cap and spilled to the heist vaults. If one business is swallowing everything, that's where you'll see it. !turf cargo shows what's on the road right now or what's queueing for the next convoy.
!gang limits [rank] [amount] Daily treasury withdrawal allowance per rank โ€” owner / officer / member / recruit, set by the gang boss (or an admin). 0 = unlimited. Anyone can run !gang limits to see the current values. This replaced the old flat daily wage: income now stays in the treasury and members draw what they need, so the active get paid and the inactive don't.
!alerts ADMIN Which big moments reach which rooms, and how. Channels are per room โ€” !alerts sound|tts|text on|off, plus !alerts on|off as this room's master switch. Scope is per event and global: !alerts heist room|global. !alerts <type> force on|off lets an alert bump someone off the mic to be heard, and !alerts voice <name> gives spoken alerts their own voice. !alerts test <type> fires one to check the setup.
Economy tuning — admin panel Every rake, tap and split in the game is editable in the Sink Rates card without touching code: the arena/fight rake, casino and blackjack rakes, the !say rake, the tip tap, the treasury-withdrawal laundering cut, the heist-shop vault share, the sink cap (the single biggest lever on how much PAT reaches the heist vaults), bank payout and cap multipliers, the mint rate, the season-pot share, and how incoming vault PAT splits between the casino vault and the Reserve. Shop Items prices everything buyable plus the bonuses items carry (Bottle Service XP, burner heat reduction), and Voice Store handles per-voice pricing and royalties.