Tutorial

How to Make Custom Commands on Twitch

A complete walkthrough of creating custom Twitch chat commands — in StreamUps, Nightbot, StreamElements and Moobot — plus the variables that make them dynamic and how the same commands work on Kick and YouTube Live.

14 min read

What a Custom Command Is

To make custom commands on Twitch you need a chat bot — Twitch itself only provides native slash commands for moderation, not the !commands your viewers type. A custom command is a trigger you invent and a response your bot posts when someone types it, and every bot on this page builds them from the same four ingredients.

The trigger

The text viewers type, almost always starting with an exclamation mark. Keep it short, obvious and spelled the way people guess — !socials beats !mylinks every time.

The response

What the bot posts back. One line is the target. Anything longer gets truncated by the platform, buried by fast chat, or dominates your on-stream overlay.

The permission level

Who can run it. Everyone for viewer-facing information, moderator or above for anything that changes channel state or could be abused.

The cooldown

How long before it can run again. Without one, the first person to find a fun command will post it fifteen times to see what happens.

Understanding those four means you can move between bots without relearning anything. The dashboards look different; the model underneath is identical. What genuinely differs is variable syntax, cooldown granularity and — the big one in 2026 — which platforms each bot can actually reach.

Before You Start: Pick Your Bot

All four bots below are free and cloud-hosted, so nothing runs on your PC and commands keep working if your machine crashes mid-stream. Choose on platform coverage first, because that's the one thing you can't work around later.

Chat bots that support custom Twitch commands, compared
BotPlatformsBest ForCost
StreamUpsTwitch, YouTube Live, KickOne command list answering on every platform you simulcast to, plus AI chat and overlaysFree tier plus Pro
NightbotTwitch, YouTube LiveFast chat-based command creation and mature spam filteringFree
StreamElementsTwitch, YouTube LiveLoyalty points, alerts and widgets sharing one account with your commandsFree
MoobotTwitchAutomated moderation rules and a clean single-platform dashboardFree

Third-party feature sets change. Check each bot's own documentation before committing your command list to it.

One rule regardless of which you pick: mod your bot. An unmodded bot gets its links stripped and its longer messages filtered by Twitch itself, and the symptom looks exactly like a broken command. Type /mod botname in your chat before you troubleshoot anything else.

Method 1: Custom Commands in StreamUps

StreamUps runs one command list across Twitch, YouTube Live and Kick at the same time, so this is the route to take if you simulcast. The command you create here answers in every chat you're live in.

  1. 1Create a free StreamUps account and connect the channels you stream to — Twitch, YouTube Live and Kick can all sit on the same account.
  2. 2Give the StreamUps bot moderator status in each connected chat so its responses and links aren't filtered by the platform.
  3. 3Open the Commands section of the dashboard and choose to add a new command.
  4. 4Set the trigger, including the exclamation mark — for example !discord.
  5. 5Write the response and drop in a viewer-name placeholder if the reply should name whoever typed it.
  6. 6Set the user level to everyone for informational commands, or restrict it to moderators for anything that changes channel state.
  7. 7Set a cooldown — 30 seconds suits informational commands, 60 or more suits fun ones.
  8. 8Enable the command on each connected platform and save, then type the trigger in your own chat to confirm it answers.

Because the list is shared across platforms, you write and maintain each command once instead of keeping three dashboards in sync.

Worth doing on day one: set up !lurk, !discord and !socials in one sitting. They're the three that get asked for most, they take about five minutes together, and they're all static responses so there's nothing to debug. Full details are on the custom chat commands page.

Method 2: Custom Commands in Nightbot

Nightbot is the long-standing default on Twitch and can be driven entirely from chat, which is why it's still the fastest bot to add a command to mid-stream.

  1. 1Sign in at nightbot.tv with your Twitch account and use Join Channel to bring the bot into your chat.
  2. 2Type /mod nightbot in your chat so its messages aren't filtered.
  3. 3Open Commands → Custom and choose Add Command.
  4. 4Fill in the Command field with your trigger and the Message field with the response.
  5. 5Choose a User Level — Everyone, Regular, Subscriber, Moderator or Owner.
  6. 6Set a Cooldown in seconds. Nightbot applies it channel-wide rather than per viewer.
  7. 7Add an Alias if you want a second trigger to fire the same response, then save.
  8. 8Alternatively skip all of that and type !addcom !trigger your response directly in chat.

Nightbot's variables use $(name) syntax — $(user), $(touser), $(count), $(urlfetch …). Recipes written for other bots won't substitute correctly.

The chat shortcut is worth memorising: !addcom !trigger your response here creates a command instantly, !editcom changes it and !delcom removes it. Our full Nightbot commands guide covers the default command list, timers and every variable.

Method 3: Custom Commands in StreamElements

StreamElements pairs commands with loyalty points, alerts and overlays in one account, and gives you finer cooldown control than most bots.

  1. 1Sign in to StreamElements with your Twitch account and confirm the bot has joined your channel.
  2. 2Type /mod streamelements in your chat to give it moderator status.
  3. 3Open the chat bot section of the dashboard and go to Chat Commands → Custom Commands.
  4. 4Choose Add new command and set the trigger and response.
  5. 5Use ${variables} in the response for anything dynamic — ${user}, ${touser}, ${uptime}, ${count}.
  6. 6Pick an Access Level: Everyone, Regular, Subscriber, VIP, Moderator or Broadcaster.
  7. 7Set the user cooldown and the global cooldown separately — they do different jobs.
  8. 8Save, then run the command once in your own chat to check the wording and spacing.

StreamElements variables use ${name} with curly braces. This is the single most common reason a copied command prints raw text instead of a value.

The separate user and global cooldowns are the feature to use here — a 60-second user cooldown with a 5-second global one lets everyone have a turn without letting anyone spam. The StreamElements commands guide has the full variables list.

Method 4: Custom Commands in Moobot

Moobot is the veteran Twitch-focused option, with a clean dashboard and a strong set of automated moderation rules alongside its commands.

  1. 1Sign in to the Moobot dashboard with your Twitch account and add the bot to your channel.
  2. 2Give Moobot moderator status in your chat.
  3. 3Open the custom commands section of the dashboard and create a new command.
  4. 4Set the trigger and write the response, keeping it to a single line.
  5. 5Choose who is allowed to run it and set a cooldown so it can't be spammed.
  6. 6Save and test the command in your own chat before you rely on it live.

Moobot is Twitch-centred, so treat it as a single-platform choice unless you've confirmed otherwise for the platforms you stream to.

Variables: The Same Idea, Four Syntaxes

A static response is fine for a Discord link, but the commands people actually enjoy react to who typed them. Every bot supports the same handful of concepts under different names — this is the translation table.

Equivalent command variables across StreamUps, Nightbot and StreamElements
What You WantNightbotStreamElements
Name whoever typed the command$(user)${user}
Name the person they typed after it$(touser)${touser}
Capture everything they typed$(query)${1:}
Capture the first word only$(1)${1}
Count how many times it has run$(count)${count}
Fetch text from an external API$(urlfetch URL)${customapi.URL}
Post how long you have been live$(twitch $(channel))${uptime}
Pick a random chatter$(eval …)${random.chatter}

When a copied command prints literal text like $(user) into chat, you've pasted the wrong bot's syntax. That's the fix nine times out of ten.

Two patterns cover most of what you'll build. Naming the sender turns an announcement into an acknowledgement, which is exactly why !lurk works. Targeting another chatter turns a command into an interaction between viewers rather than between you and one viewer — the mechanic behind !hug and its variants.

Which Commands to Create First

Don't build twenty commands on day one — nobody will find them. Start with the questions you already answer out loud every stream, then add one new command a week. These six are the standard first set, and each links to a guide with copy-ready responses.

Browse the full chat commands library when you're ready to expand, or read our roundup of the best Twitch chat commands for the reasoning behind each one.

How to Make Custom Commands on Kick

Kick is where bot choice actually matters. The two biggest Twitch bots — Nightbot and StreamElements — don't connect to Kick, so a command list built there covers only part of your audience the moment you start simulcasting.

The process itself is identical once you're using a bot that supports Kick: connect the Kick channel, create the trigger and response, set a user level and cooldown, and enable it on Kick. In StreamUps the same command you already wrote for Twitch simply starts answering on Kick too — there's no second list to maintain, which matters more than it sounds when you're editing a Discord invite in a hurry.

Kick's native moderation slash commands work differently from Twitch's, and its bot ecosystem is younger and smaller. Our Kick chat commands guide covers what's native, what needs a bot and which bots reach Kick at all.

How to Make Custom Commands on YouTube Live

YouTube Live supports the same custom commands, with one structural difference worth planning around: YouTube's live chat is attached to a broadcast rather than a persistent channel chat, so bots authorise against your channel and follow whichever stream is live.

Most bots that support YouTube ask you to authorise with the Google account that owns the channel, then join automatically when you go live. Commands, cooldowns and user levels behave as they do on Twitch; what changes is the permission model — YouTube's moderator and owner roles map onto your bot's user levels, and there's no direct equivalent of Twitch's VIP tier.

Because YouTube chat moves more slowly than Twitch on most channels, longer command responses survive better there — a three-line !socials that would scroll away instantly on Twitch stays readable. Full detail is in our YouTube Live chat commands guide.

Troubleshooting: When a Command Doesn't Fire

Work down this list in order — it's roughly the frequency at which each cause actually happens.

  • The bot isn't modded — Twitch filters links and long messages from unmodded accounts. Type /mod botname and test again before changing anything else.
  • The user level is too high — A command set to Moderator works when you test it and silently fails for everyone else. Check the permission before assuming the command is broken.
  • The cooldown is still running — You tested it thirty seconds ago and the timer hasn't cleared. Wait it out or lower the cooldown while testing.
  • Two bots share the trigger — If you run more than one bot, a shared trigger produces duplicate replies or a race. Give each bot its own set.
  • The response uses the wrong variable syntax — $(user) in StreamElements or ${user} in Nightbot prints as literal text. Rewrite it in the syntax your bot expects.
  • The command is disabled, not deleted — Most dashboards keep disabled commands in the list looking exactly like live ones. Check the toggle.
  • The bot isn't connected to that platform — A Kick viewer typing a Twitch-only bot's command gets silence. Confirm the bot supports every platform you stream to.

Custom Twitch Commands FAQ

How do I make a custom command on Twitch?
Add a chat bot to your channel, mod it, then create a trigger and a response in that bot's dashboard. In Nightbot you can do it from chat with !addcom !trigger response; in StreamUps, StreamElements and Moobot you add it from the commands section of the dashboard. Twitch itself has no built-in way to create custom !commands.
Can I create Twitch commands without a bot?
No. Twitch's native slash commands — /ban, /timeout, /slow and the rest — are moderation tools, not custom responses. Anything starting with an exclamation mark needs a bot listening to your chat. The native list is covered in our Twitch mod commands guide.
How many custom commands should I have?
Start with five or six and grow slowly. Past about fifteen, viewers stop discovering commands and start ignoring the list, so a shorter set that people actually use beats a long one nobody remembers. Post a link to your command list in a channel panel either way.
Do custom commands work on Kick and YouTube too?
The concept works everywhere, but the bot has to support the platform. Nightbot and StreamElements don't connect to Kick, so a Kick simulcast needs a bot that does. StreamUps runs one command list across Twitch, YouTube Live and Kick, so the same command answers in all three chats.
What's the difference between a command and a timer?
A command waits for a viewer to type a trigger. A timer posts on a schedule with nobody asking. Most streamers pair them — a !socials command for when people ask, plus a timer on a long interval that posts the same thing for people who never think to ask.
Why does my command print $(user) instead of a name?
You've used another bot's variable syntax. Nightbot uses $(user) with parentheses; StreamElements uses ${user} with curly braces. Rewrite the variable in your bot's format and it will substitute correctly.
Can moderators add commands for me?
Yes, in every bot listed here — command management defaults to moderator level. It's genuinely useful during a busy stream, though it's worth agreeing on naming conventions first so you don't end up with !social, !socials and !links all doing the same job.
Should a command be everyone-level or restricted?
Informational commands should be open to everyone — that's the entire point of them. Restrict anything that changes channel state, anything that costs money, and anything that would be funny to spam. When in doubt, open it and add a cooldown rather than locking it to subs.

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