StreamElements Commands: The Complete Setup Guide
How StreamElements commands work end to end — the default command set and its loyalty economy, building custom commands from the dashboard or chat, the ${variables} that make them dynamic, and the timers that keep them running.

What StreamElements Commands Are
StreamElements commands are chat triggers handled by the StreamElements cloud bot. A viewer types !uptime and the bot answers instantly, no software running on your PC. Where StreamElements differs from a pure command bot is scope: commands are one module inside a platform that also runs your alerts, overlays and loyalty points.
That matters because a lot of StreamElements' default commands only make sense once you understand the loyalty system sitting underneath them. Points accumulate while viewers watch, and half the built-in command list exists to spend, gamble or compare those points. If you never switch loyalty on, that half of the list stays inert.
Everything below is configured from the StreamElements dashboard under the chat bot section, with a chat-side syntax for the parts you'll want to change mid-stream. If you're comparing bots rather than committing to one, the sibling guide on Nightbot commands covers the other half of the market.
Default StreamElements Commands
These arrive switched on — or one toggle away — the moment the bot joins your channel. Every one can be renamed, restricted to a user level or disabled entirely, and the ones tied to loyalty do nothing until the points module is enabled.
| Command | What It Does | Module |
|---|---|---|
| !commands | Returns the public list of commands available on your channel. | Core |
| !uptime | Posts how long the current stream has been live, calculated by StreamElements itself. | Core |
| !followage | Tells a viewer how long they have followed the channel. | Core |
| !accountage | Reports how old the viewer's platform account is. | Core |
| !watchtime | Posts a viewer's accumulated watch time on your channel. | Loyalty |
| !points | Shows a viewer their current loyalty point balance. | Loyalty |
| !top | Posts a leaderboard of the highest point or watch-time totals. | Loyalty |
| !gamble | Bets a number of loyalty points on a coin-flip style roll. | Loyalty games |
| !slots | Spins a slot machine using loyalty points as the stake. | Loyalty games |
| !duel | Challenges another chatter to a points duel. | Loyalty games |
| !roll | Rolls dice for chat — no points required. | Fun |
| !8ball | Returns a random magic eight ball answer. | Fun |
| !songrequest | Adds a track to the song request queue, usually aliased to !sr. | Song requests |
| !songs | Controls the queue — skipping, clearing and reporting what's playing. | Song requests |
Module availability changes with StreamElements releases. The Chat Commands page of your dashboard is always the authoritative list for your channel.
Two of these are worth deliberate thought rather than leaving on defaults. The gambling commands are genuinely divisive — they drive engagement on some channels and turn chat into a slot machine on others — and the song request queue needs a moderation plan before you open it to everyone. Everything else is safe to leave as-is while you learn the dashboard.
How to Add a Custom StreamElements Command
Custom commands live alongside the defaults in the same section of the dashboard. This is the full path from empty list to a working command.
- 1Sign in to StreamElements with the platform account you stream from and make sure the bot has joined your channel.
- 2Give the StreamElements bot moderator status in your chat so its messages and links aren't filtered.
- 3Open the chat bot section of the dashboard and go to Chat Commands, then Custom Commands.
- 4Choose Add new command and set the Command field to your trigger, including the exclamation mark.
- 5Write the Response, using ${variables} for anything that should change per viewer or per stream.
- 6Set the Access Level — Everyone, Regular, Subscriber, VIP, Moderator or Broadcaster.
- 7Set both cooldowns: the user cooldown limits one viewer, the global cooldown limits the whole chat.
- 8Add any aliases and keywords, save the command, then run it once in your own chat to confirm the wording.
Test every new command in your own chat before you rely on it live. A command with a typo in the trigger looks identical to a command that isn't working.
Managing Commands From Chat
You don't have to open the dashboard to change a command. StreamElements exposes a management syntax in chat, which is what you want when a viewer points out a dead link mid-stream.
| Type In Chat | What Happens |
|---|---|
| !command add !trigger response | Creates a new custom command with that trigger and response. |
| !command edit !trigger new text | Replaces the response of an existing command. |
| !command edit !trigger -cd 30 | Sets the cooldown on an existing command to 30 seconds. |
| !command remove !trigger | Deletes the command. |
| !command disable !trigger | Keeps the command but stops it responding — handy for seasonal commands. |
| !commands | Posts the link to your public command list. |
A worked example: !command add !discord Come join the community: discord.gg/yourinvite creates the command, and !command edit !discord -cd 30 puts a cooldown on it afterwards. Our !discord command guide has response wording that works across every bot, and !socials covers the multi-link version.
StreamElements Variables List
StreamElements writes variables as ${name}. This is the biggest practical difference from Nightbot's $(name) syntax, and it's why command recipes copied from a Nightbot tutorial silently fail here — the bot prints the literal text instead of substituting a value.
| Variable | What It Returns | Typical Use |
|---|---|---|
| ${user} | The display name of whoever ran the command. | Naming the sender in the response. |
| ${touser} | The name typed after the trigger, falling back to the sender. | Interaction commands like !hug. |
| ${sender} | The sender's name, always — never the target. | Responses that must credit the person who typed. |
| ${channel} | Your channel name. | Signing off a response. |
| ${1} ${2} | Individual words typed after the trigger. | Commands taking two arguments. |
| ${1:} | The first word and everything after it. | Capturing a whole phrase, like a quote to save. |
| ${uptime} | How long the stream has been live, calculated natively. | A reliable !uptime with no external API. |
| ${followage} | The sender's follow age on your channel. | !followage without a third-party endpoint. |
| ${watchtime} | The sender's accumulated watch time. | Rewarding regulars with a visible number. |
| ${random.chatter} | A random name from the current chatters. | Giveaway draws and "who's next" commands. |
| ${count} | A counter that increments on every use. | Death counters and running jokes. |
| ${customapi.URL} | The plain-text body of a web request. | Anything the bot can't calculate itself. |
| ${math ...} | The result of a simple calculation. | Converting units for an international chat. |
| ${time} | The current time in your configured timezone. | "When does the stream end?" answered automatically. |
Arguments are positional: ${1} is the first word after the trigger. Use ${1:} to capture that word and everything after it.
The standout here is that StreamElements calculates ${uptime}, ${followage} and ${watchtime} natively rather than borrowing them from a third-party API. That's a real reliability advantage: there's no community endpoint to go down and no error text leaking into your chat. See our guides on !uptime, !followage and !watchtime for the response formats that read best on stream.
For anything the bot can't calculate, ${customapi.…} fetches a plain-text response from a URL and drops it into chat — the same escape hatch every command bot needs, with the same caveat that you're now depending on somebody else's uptime.
Cooldowns, Access Levels and Aliases
Three fields decide how a command behaves under pressure. StreamElements is more granular than most bots here, and it's worth using that.
User cooldown
How long one viewer must wait before running the command again. This is the setting that stops a single person spamming without punishing everyone else.
Global cooldown
How long the whole chat must wait. Keep it short on fun commands and longer on informational ones so the same link doesn't post three times in a row.
Access level
Everyone, Regular, Subscriber, VIP, Moderator or Broadcaster. Regular is a list you curate yourself — useful for trusted viewers who aren't mods.
The separate user and global cooldowns are the feature to exploit. Set a 60-second user cooldown and a 5-second global one on a fun command, and every viewer gets a turn while nobody can machine-gun it. Informational commands are the opposite: a longer global cooldown keeps !socials from repeating three times in a row when several people ask at once.
Timers and Keywords
Timers post on a schedule; keywords fire on a phrase rather than a trigger. Together they cover the two things a command can't do — talking without being asked, and responding to natural language.
- 1Open Timers in the chat bot section of the dashboard and create a new timer.
- 2Write the message, or reference an existing command so the wording is maintained in one place.
- 3Set the interval in minutes — 15 to 30 keeps timers useful without crowding chat.
- 4Set the minimum chat lines so the timer only fires when the room is active.
- 5For keywords, add the phrase that should trigger a response and keep the answer to one short line.
Keywords are powerful and easy to overuse. One or two that catch genuinely common questions is helpful; a dozen makes your bot feel like it's interrupting.
The chat-lines minimum works the same way it does elsewhere: the timer only posts if the room has been talking since the last one. Without it, a quiet stream ends up with a bot monologuing to nobody, which is a worse look than saying nothing at all.
How Commands Fit With Overlays and Alerts
StreamElements' real pitch has never been the bot on its own — it's that your commands, alerts, overlays and loyalty points share one account. A viewer earns points passively, spends them through a chat command, and the redemption fires a widget on your overlay. That's a genuinely tidy loop, and it's the main reason streamers stay.
The trade-off is that the loop only closes inside StreamElements' own overlay system. If your scene is built somewhere else — or you want overlays that pull from every platform you stream to rather than one — you're maintaining two systems that don't know about each other.
That's also where the platform gap shows. StreamElements is built around Twitch and YouTube Live; a Kick simulcast sits outside it. If Kick is part of your setup, our Kick commands guide explains which bots actually connect there.
StreamElements vs StreamUps Commands
Both run custom !commands from the cloud with variables, cooldowns and access levels, so the useful comparison is what surrounds them.
| Area | StreamElements | StreamUps |
|---|---|---|
| Custom !commands | Yes, with ${variables} and aliases | Yes, with variables and aliases |
| Platforms | Twitch and YouTube Live | Twitch, YouTube Live and Kick |
| One list across platforms | Configured per platform | One command answers everywhere you're live |
| Loyalty points economy | Built in, with games and redemptions | Not available |
| Alerts and widgets | Large built-in library | Chat, AI and multistream overlays |
| Song requests | Built-in queue | Now-playing via !song |
| Conversational AI | Not available | Included |
| Merged chat across platforms | Not available | Included |
| Multistreaming | Not available | Included |
| Cost | Free | Free tier plus Pro |
StreamElements wins on depth inside its own ecosystem: loyalty points, a mature alerts and widget library, and a bigger default command set out of the box. StreamUps wins on reach — one command list that answers on Twitch, YouTube Live and Kick simultaneously — and on bundling AI chat, merged chat and multistreaming into the same account.
The full side-by-side is on our StreamElements alternative page, and the custom chat commands page covers how StreamUps handles the same job.
Commands Worth Setting Up First
Whichever bot runs them, these five do the most work on a growing channel. Each links to a full guide with response wording you can copy.
!followageFollowage
Show viewers exactly how long they've been following your channel.
!watchtimeWatchtime
Show a viewer's total hours spent watching your streams.
!socialsSocials
Share all of your social media links in a single chat message.
!uptimeUptime
Tell chat how long the stream has been live at any moment.
!quoteQuote
Save memorable stream quotes and replay them in chat later.
StreamElements Commands FAQ
How do I add a custom command in StreamElements?
Why are my StreamElements variables showing as plain text?
What is the difference between a user cooldown and a global cooldown?
Does StreamElements work on Kick?
Do I have to use the loyalty points system?
Can I run StreamElements alongside another chat bot?
How do I make a StreamElements command that saves quotes?
Why isn't the StreamElements bot responding at all?
Related Guides & Tools
Set Up Chat Commands in Minutes
Add !lurk, !so, !discord, and more to your Twitch, YouTube, or Kick chat with StreamUps. No bot hosting, no code—just pick your commands and go live.