Description
Streamer.bot Minigame: Bank Heist Multilingual
A fully automated, dynamic minigame for Streamer.bot (Twitch). Viewers can form a heist crew by betting channel points and attempt to rob a bank together. The system supports flexible survival chances based on user roles (Broadcaster, Mod, VIP, User), dynamic timer controls, and multiple outcome scenarios.
Default language is German in this bot. But you can change it in the setup.
These language (custom, de (German) , en (English), es (Spanish), fr (French), pt (Portuguese), tr (Turkish), nl (Dutch), pl (Polish) ) are available.
IMPORTANT
You need a Currency System like “[Currency] Core System ( Points System (Core) - #6 by TerrierDarts )” for the Streamer.bot usage or
for Streamelements you need some information (Account ID und JWT) StreamElements Support Page
System Architecture & Workflow
The minigame operates on a **3-phase logic**:
1. **Lobby Phase (Join):**
-
A user initiates the heist with “!heist”.
-
The script saves the start time as an ISO-8601 timestamp and enables the “Join Timer”.
-
Other users can join the heist crew within the entry window (heistJoinTime) using !heist < bet >.
2. **Execution Phase:**
-
When the “Join Timer” expires, Streamer.bot triggers the “ExecuteHeist()” entry point.
-
Each crew member rolls individually against their role-based survival chance.
-
Chat outcome messages are chosen based on success (Full Success, Partial Success, Total Failure).
3. **Cooldown Phase:**
-
After the heist, the bank enters a lockout period (heistCooldown).
-
The “Cooldown Timer” is started.
-
Once elapsed, “ResetCooldown()” clears the lockout **and sends a chat reminder (heistMsgReminder)** announcing that the bank can be raided again.
Video Tutorial
Import File
minigame_bankheist_multiligual_V2.0.sb (36.2 KB)
Resources
For Streamer.bot Currency you need [Currency] Core System
For Streamelements infos from here StreamElements Support Page ( heistStreamElementsChannelId= Account ID
heistStreamElementsJwt = JWT Token
)
Installation
First Step
In Streamer.bot click the Import button in the top menu. Drag the **.sb** file into the Import String field.
Second Step
Initial all Settigs and Timers (default is German).
Via Chat
Execute the following command in your Twitch chat as the Broadcaster or a Moderator:
!raub status setup
Via Trigger - Core > Test
Also a Trigger is in the Action [MINIGAME] [Bankheist] Code - Main with the argument Name: status Value: setup to run the setup.
Configuration
First Step
Copy the Timer IDs by right-clicking each timer (Copy ID) into the 2 variables (heistJoinTimerId, heistCooldownTimerId)
- [MINIGAME] Bankheist Multilingual - Timer - Join
[MINIGAME] Bankheist Multilingual - Timer - Cooldown
Second Step
Configure all Variables as you wish inside these actions.
-
[MINIGAME] Bankheist Multilingual - Settings - Config
You need to enable the System you want to use and disable the other systems. Default is the system “Streamer.bot”.
-
[MINIGAME] Bankheist Multilingual - Settings - Language
To change the LanguageheistLanguageand/or the Custom Language.
-
[MINIGAME] Bankheist Multilingual - Settings - Streamelements (if you want to use Streamelements)
-
[MINIGAME] Bankheist Multilingual - Settings - Streamer.bot (if you want to use Streamer.bot)
-
Commands → [MINIGAME] Bankheist Multilingual - !raub
Here you can change the command to!heistif you want.
Third Step
Reconfigure all Variables as mention in Installation → Second Step
Commands
| Command | Description |
|---|---|
| !raub status setup | To starting the setup initial (Only as Broadcaster/Mod) |
| !raub 2000 | To join a heist with 2000 Points (must be between heistMinBet and heistMaxBet) |
| !raub status | To get the actual status of the heist or Cooldown |
This is the only command !raub that you need to configure. All others are managed in the C# Code.
Variables & Arguments Overview
1. Global Configuration Variables (`Persisted Globals`)
Action: [MINIGAME] [Bankheist] Settings - Config
These values are stored permanently (Global Variables) in Streamer.bot to control the game rules:
| Variable | Default Value | Description |
|---|---|---|
| heistLanguage | “de” | The selected language (de, en, es, fr, pt-br, tr, nl, pl or custom). |
| heistPointsSystem | “streamerbot” | The active points system (streamerbot or streamelements). |
| heistPointsVariable | “userPoints” | The name of the variable storing the viewers’ points in Streamer.bot. |
| heistDefaultPoints | 1000 | Default balance for new users if they don’t have an entry in Streamer.bot yet. |
| heistMinBet | 50 | The minimum bet required to join the heist. |
| heistMaxBet | 10000 | The maximum allowed bet per player. |
| heistMinParticipants | 1 | The minimum number of players required for the heist to actually start. |
| heistWinMultiplier | 1.8 | The win multiplier in case of success (bet × multiplier). |
| heistJoinTime | 60 | Time in seconds during which players can join the heist lobby. |
| heistCooldown | 300 | The cooldown time in seconds after a heist before a new one can be started. |
| heistChanceBroadcaster | 95 | Survival chance in percent (%) for the streamer/broadcaster. |
| heistChanceMod | 80 | Survival chance in percent (%) for moderators. |
| heistChanceVip | 70 | Survival chance in percent (%) for VIPs. |
| heistChanceUser | 50 | Survival chance in percent (%) for regular viewers. |
| heistJoinTimerId | “” (Leer) | ID of a created Streamer.bot timer for the join phase. |
| heistCooldownTimerId | “” (Leer) | ID of a created Streamer.bot timer for the cooldown phase. |
| heistStreamElementsChannelId | “” (Leer) | Channel ID for the StreamElements API (only needed if heistPointsSystem = streamelements). |
| heistStreamElementsJwt | “” (Leer) | JWT Token for the StreamElements API (only needed if heistPointsSystem = streamelements). |
| heistPointsApiTimeoutMs | 7000 | Maximum timeout in milliseconds for StreamElements API requests. |
| heistDebugApiErrors | “false” | “Set to ““true”” to log points API errors in the Streamer.bot logs.” |
Also you can change and define it in the action
2. Chat & Language Templates (heistMsg…)
Action: [MINIGAME] [Bankheist] Settings - Language
Supports placeholders such as %user%, %command%, %remainingTime%, %amount%, %survivors%, %caught%, %payout%, %min%, %max%:
| Variable | Default Value | Description |
|---|---|---|
| heistMsgSetupStarted | “ |
System message when executing the setup command. |
| heistMsgSetupCompleted | “ |
Confirmation that the setup was successfully saved to globals. |
| heistMsgSetupDenied | “ |
Error message when a regular user tries to start the setup. |
| heistMsgStart | “ |
The start message (lobby opens). Supports %user%, %command%, %remainingTime%. |
| heistMsgJoined | “ |
Message when another player successfully joins (%user%, %amount%). |
| heistMsgReminder | “ |
Reminder when the cooldown has expired (%command%, %min%, %max%). |
| heistMsgNotEnoughPoints | “ |
Error message if the player does not have enough points. |
| heistMsgInvalidBet | “ |
Error message if the bet is outside the min/max limits. |
| heistMsgCooldown | “ |
Error message if someone tries to start a heist during an active cooldown (%cooldown%). |
| heistMsgAlreadyIn | “ |
Error message if a player tries to join multiple times. |
| heistMsgNotEnoughPlayers | “ |
Cancellation message if heistMinParticipants is not reached. |
| heistMsgProgress | “ |
Suspense message right before the result is calculated. |
| heistMsgSuccess | “ |
Result message: ALL robbers escaped. (%survivors%, %caught%, %payout%) |
| heistMsgPartial | “ |
Result message: SOME escaped, others were caught. |
| heistMsgFailed | “ |
Result message: ALL robbers were caught. |
| heistMsgStatusActive | “ |
Output of the !heist status command while the lobby is open. |
| heistMsgStatusCooldown | “ |
Output of the !heist status command during the cooldown. |
| heistMsgStatusIdle | “ |
Output of the !heist status command when everything is ready for a new start. |
| heistMsgNobodySurvivors | “Niemand” | Placeholder word for %survivors% if everyone was caught. |
| heistMsgNobodyCaught | “Niemand” | Placeholder word for %caught% if everyone escaped. |
| heistMsgPointsApiError | “ |
Fallback error message if the API or point assignment fails. |
| heistMsgStatusNotJoined | “Nicht dabei” | Status text if the requesting user is not participating in the active heist. |
| heistWordPoints | “Punkte” | The word for the currency (used in the status output). |
Also you can change and define it in the action for diffrent language (default is german)
3. Dynamic Runtime Variables (Internal)
Managed automatically by the script during execution:
| Variable | Function | Description |
|---|---|---|
| heist_active | false | bool - Indicates whether the join phase (lobby) is currently open. |
| heist_cooldown_active | false | bool - Indicates whether the heist is currently in the cooldown phase. |
| heist_start_time_iso | (dynamisch) | string - ISO 8601 timestamp of the lobby start (for status query). |
| heist_last_run_iso | (dynamisch) | string - ISO 8601 timestamp of the last heist (for self-healing cooldown). |
| heist_participants | (dynamisch) | Dictionary<string, string> - Stores all active participants and their bets. |
| heist_used_command | (dynamisch) | string - Stores the chat command used by the first user (e.g., !heist) to reproduce it in timer methods. |
Contributors
- ErictheVirus (Twitch): For helping and asking for the integration of StreamElements
Troubleshot
If its not startting you can check this. “Find Refs” and “Compile” in the Execude Code section fo the “[Bankheist] Main - Code”.
Please provide all this infos if you have some problems.
Streamer.bot Version:
Which point system do you use: [[Currency] Core System // StreamElements]
Command enabled: [YES/NO]
Is the ! in front of the command trigger:[YES/NO]
Changed the variable heistPointsVariable to your CurrencyField?
Screenshots from (via Imgur: The magic of the Internet or via the buildin function)
- Command
- Action: [MINIGAME] [Bankheist] Settings - Language
- Action: [MINIGAME] [Bankheist] Settings - Config
Testing Log
Testing Phase Log
Version 2
- Major Rework
- Multiple default languages
- StreamElements connection
Version 1
Running now multiple Days stable.







