Home / Command Reference

Challenger Bot Command Reference

Every chat command Challenger Bot supports today, with real thresholds, durations and cooldowns pulled straight from the bot's own configuration — not marketing copy.

How commands work

Challenger Bot doesn't fire on every single chat message. Viewers collectively unlock a challenge by hitting a message threshold — 10 messages by default, configurable per streamer in config.toml. Once unlocked, the challenge runs for its duration (30 seconds by default), then the bot enforces a cooldown (60 seconds by default) before that same challenge can trigger again. Individual commands can override any of these three numbers — !AltTab, for example, needs 30 messages instead of the usual 10 before it fires, since it's disruptive enough to warrant a higher bar.

The threshold counter is shared across the whole chat, not per viewer, so a busy stream with dozens of active chatters unlocks challenges much faster than a quiet one — which is by design, since the bot is meant to reward and reflect how lively the chat actually is at any given moment. Once a challenge is unlocked and running, it occupies the "active challenge" slot for its full duration; no second challenge can start until the first one finishes and its own cooldown has cleared, which keeps the streamer's screen and input from being hit by two effects layered on top of each other.

Keyboard and mouse commands

These are the core of the bot and the reason it needs AutoHotkey installed — several of them are literally AutoHotkey scripts the bot triggers on your machine (WtoS.ahk, AtoD.ahk, and similar), not raw key-press injection from Python.

Challenger Bot is Windows-only for exactly this reason: it leans on AutoHotkey to remap keys at the OS level, on win32api to talk to the display driver, and on pynput for the pure key-spam commands like !Jump and !DropIt that don't need a script file at all. When a challenge with an AHK component ends, the bot's process manager kills the running AutoHotkey.exe instance to make sure the remap doesn't outlive its configured duration — so a chaotic !WtoS run can't accidentally strand a streamer with permanently swapped movement keys if something goes wrong mid-stream.

CommandWhat it doesDuration
!AtoDSwaps the A and D keys45s
!WtoSSwaps the W and S keys45s
!MouseFlipSwaps the left and right mouse buttons45s
!MouseToWSSwaps the mouse buttons with W and S: left-click presses W, right-click presses S, and W/S click30s
!RandomShuffles which keys do what, with a sound cue30s (default)
!SlipperyWASD keys stick for an extra moment, like walking on ice30s (default)
!NoJumpDisables the Spacebar ("Heavy Boots")30s (default)
!JumpSpams the jump key30s (default)
!DropItSpams the 'G' key (drop-item in most games)30s (default)
!AltTabSpams Alt-Tab to yank focus off the game30s (default), 30-message threshold
!DrunkRandomly jerks the mouse cursor around30s (default)
!TurtleDrops the Windows pointer speed to its minimum, then restores it30s (default)

Display commands

Display commands change a Windows display setting instead of remapping input: !Rotate and !Tunel call into win32api to change the screen's orientation or resolution, and !Zoom starts the built-in Windows Magnifier. Each one restores the original setting when its duration ends. They're disorienting in a way key-remapping isn't: the game keeps running normally while the streamer's whole view of it changes, which is why they work best as one-off "gotcha" moments rather than something chat spams back-to-back.

CommandWhat it doesDuration
!RotateRotates the streamer's screen 180°, then back30s (default)
!TunelDrops the real screen resolution to the smallest supported mode at or above 640×480, then restores it40s
!ZoomZooms the screen in to 200% with the Windows Magnifier30s (default)
!InvertInverts the screen colours by pressing the Windows colour-filter shortcut (Win+Ctrl+C), which must be enabled in Windows settings30s (default)

!Invert is the one display command that presses keys for you: it sends the Win+Ctrl+C shortcut through pynput, so treat it like an input command in anti-cheat-protected games.

Overlay commands

Overlay commands work differently from the keyboard and display commands above: instead of remapping input or changing display settings, they draw a borderless window on top of whatever the streamer is running, using wxPython to build the overlay itself. That means overlays don't touch the game process or its input handling at all — they sit purely on the visual layer, which is part of why they tend to be the safer, more configurable option for streamers who are nervous about anything that resembles input injection.

CommandWhat it doesDuration
!GrayCovers the whole screen with a semi-transparent gray overlay30s (default)
!DVDA logo bounces around the screen like the old DVD screensaver. Uses an image you upload on the Config page, or a black square if none is set30s (default)
!FlashFlashes the whole screen white at random moments, each flash fading out. Flashes are at least a second apart, so it's never a hard strobe30s (default)

Voice commands

!Word is the odd one out — it doesn't run for a fixed duration like the others. A viewer supplies a word in chat, the bot speaks it out loud via text-to-speech, then changes VoiceMacro's active trigger word to that same word for the rest of the stream (until the next !Word). This is the only command that touches voice output; everything else here is visual or input-based.

Under the hood, the text-to-speech step runs through gTTS to render a short announcement — "New word is! <word>", not just the bare word by itself — to an MP3 file, plays it back through the streamer's audio output via playsound3, then deletes the temporary file once playback finishes, so nothing lingers on disk between calls. The VoiceMacro handoff runs as a separate four-step sequence right after: the bot kills any running VoiceMacro.exe process, copies a Copy.xml template to a temporary file and swaps its FirstWord placeholder for the new word (keeping a .bak backup of that intermediate file), copies the result over VoiceMacro's live VoiceMacroData.xml, then relaunches VoiceMacro.exe from the configured path. Both the VoiceMacro executable path and its config directory come from VOICE_MACRO_PATH and VOICE_MACRO_CONFIG_DIR — optional .env settings a streamer can add by hand, not fields the setup wizard's UI currently prompts for. Leave either one unset and !Word still speaks the word aloud; it just skips the VoiceMacro handoff and logs that the path isn't configured, rather than failing the command outright.

Command cooldowns and rate limits

Every command shares the same 60-second cooldown floor by default — once a challenge fires, that specific command can't fire again for 60 seconds even if chat immediately re-hits the message threshold. This stops one command from dominating a stream. Streamers can raise or lower any of the three numbers (threshold, duration, cooldown) per command in config.toml; the values above are what ships by default.

Cooldowns are tracked independently per command, not globally, so !Jump being on cooldown doesn't block !Gray or !Rotate from triggering in the meantime — chat just needs to build up the message threshold for whichever command it wants next. In practice this means a lively chat can cycle through several different effects back-to-back over the course of a few minutes, while any single command settles into a rhythm dictated by its own cooldown.

Streamer dashboard controls

Command thresholds, durations and cooldowns aren't edited by chat commands — they're configured through Challenger Bot's own setup wizard and dashboard, which opens in your browser when you run the app. See the setup guide for how to reach it.

The dashboard itself is a small local web app the bot spins up alongside the chat connection — a first run walks the streamer through a short wizard before the bot ever starts listening to chat. Step one, Activate, starts a free 7-day trial or accepts a paid license key. Next, the streamer picks which platforms to read chat from: Twitch, YouTube, or both. Connect Twitch then hands off to Twitch's own device-code flow: the wizard shows a short code and a verification link, the streamer opens that link and enters the code on Twitch's own site in another tab, and the dashboard quietly polls in the background until Twitch reports the authorization as complete — there's no form asking the streamer to paste in a Twitch application's client ID or secret by hand. Your Channel asks which channel login the bot should join, an optional YouTube step takes the current live stream's URL or video ID, and Ready to Launch is a single button that starts the bot. Once that's done, the same dashboard is where each command in this reference can be switched on or off and have its threshold, duration and cooldown tuned per-streamer, live stats about top chatters and recently triggered challenges are shown, and the bot can be restarted without touching a config file by hand. None of that configuration surface is exposed to chat itself — viewers can trigger commands, but only the streamer, from their own dashboard, decides how easy or hard each one is to unlock.