Tutorial

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.

12 min read

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.

Default StreamElements chat commands grouped by what they do
CommandWhat It DoesModule
!commandsReturns the public list of commands available on your channel.Core
!uptimePosts how long the current stream has been live, calculated by StreamElements itself.Core
!followageTells a viewer how long they have followed the channel.Core
!accountageReports how old the viewer's platform account is.Core
!watchtimePosts a viewer's accumulated watch time on your channel.Loyalty
!pointsShows a viewer their current loyalty point balance.Loyalty
!topPosts a leaderboard of the highest point or watch-time totals.Loyalty
!gambleBets a number of loyalty points on a coin-flip style roll.Loyalty games
!slotsSpins a slot machine using loyalty points as the stake.Loyalty games
!duelChallenges another chatter to a points duel.Loyalty games
!rollRolls dice for chat — no points required.Fun
!8ballReturns a random magic eight ball answer.Fun
!songrequestAdds a track to the song request queue, usually aliased to !sr.Song requests
!songsControls 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.

  1. 1Sign in to StreamElements with the platform account you stream from and make sure the bot has joined your channel.
  2. 2Give the StreamElements bot moderator status in your chat so its messages and links aren't filtered.
  3. 3Open the chat bot section of the dashboard and go to Chat Commands, then Custom Commands.
  4. 4Choose Add new command and set the Command field to your trigger, including the exclamation mark.
  5. 5Write the Response, using ${variables} for anything that should change per viewer or per stream.
  6. 6Set the Access Level — Everyone, Regular, Subscriber, VIP, Moderator or Broadcaster.
  7. 7Set both cooldowns: the user cooldown limits one viewer, the global cooldown limits the whole chat.
  8. 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.

StreamElements chat syntax for managing custom commands
Type In ChatWhat Happens
!command add !trigger responseCreates a new custom command with that trigger and response.
!command edit !trigger new textReplaces the response of an existing command.
!command edit !trigger -cd 30Sets the cooldown on an existing command to 30 seconds.
!command remove !triggerDeletes the command.
!command disable !triggerKeeps the command but stops it responding — handy for seasonal commands.
!commandsPosts 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.

StreamElements command variables and what they return
VariableWhat It ReturnsTypical 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.

  1. 1Open Timers in the chat bot section of the dashboard and create a new timer.
  2. 2Write the message, or reference an existing command so the wording is maintained in one place.
  3. 3Set the interval in minutes — 15 to 30 keeps timers useful without crowding chat.
  4. 4Set the minimum chat lines so the timer only fires when the room is active.
  5. 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.

StreamElements compared with StreamUps across commands, platforms and extras
AreaStreamElementsStreamUps
Custom !commandsYes, with ${variables} and aliasesYes, with variables and aliases
PlatformsTwitch and YouTube LiveTwitch, YouTube Live and Kick
One list across platformsConfigured per platformOne command answers everywhere you're live
Loyalty points economyBuilt in, with games and redemptionsNot available
Alerts and widgetsLarge built-in libraryChat, AI and multistream overlays
Song requestsBuilt-in queueNow-playing via !song
Conversational AINot availableIncluded
Merged chat across platformsNot availableIncluded
MultistreamingNot availableIncluded
CostFreeFree 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.

StreamElements Commands FAQ

How do I add a custom command in StreamElements?
Open the chat bot section of your dashboard, go to Chat Commands → Custom Commands and choose Add new command. Set the trigger, write the response, pick an access level and set your cooldowns. You can also do it from chat with !command add !trigger followed by the response text.
Why are my StreamElements variables showing as plain text?
Almost always a syntax mismatch. StreamElements uses ${variable} with curly braces; Nightbot uses $(variable) with parentheses. A response copied from a Nightbot tutorial will print the literal text instead of substituting a value. Rewrite the braces and it works.
What is the difference between a user cooldown and a global cooldown?
The user cooldown limits how often one person can run the command. The global cooldown limits how often the command runs at all, no matter who types it. Pairing a long user cooldown with a short global one lets everybody get a turn while stopping any single viewer from spamming.
Does StreamElements work on Kick?
StreamElements is built around Twitch and YouTube Live. If Kick is part of your simulcast you'll need a bot that connects to Kick directly — StreamUps runs one command list across Twitch, YouTube Live and Kick so all three chats answer the same way.
Do I have to use the loyalty points system?
No. Points are a module you can leave switched off, and the core commands — uptime, followage, custom commands, timers — work without it. Bear in mind that leaving it off makes roughly half the default command list inert, so disable those commands too rather than letting viewers hit dead triggers.
Can I run StreamElements alongside another chat bot?
Yes, as long as no two bots share a trigger. If both answer !uptime your chat sees a duplicate every time, which looks broken. Split responsibilities deliberately — one bot for commands, another for AI chat or overlays — and the setup is stable.
How do I make a StreamElements command that saves quotes?
Use ${1:} to capture everything the viewer typed after the trigger and store it with the quote module, then read entries back by number. Our !quote guide covers numbering, mod-only permissions and the response formats that read best on stream.
Why isn't the StreamElements bot responding at all?
Check that the bot has actually joined your channel and has moderator status, then check the command's access level and whether it's been disabled rather than deleted. If the bot answers you but not your viewers, the access level is the culprit.

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.

Keep up to date

Sign up to our NewsLetter

Contact Us