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.

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.
| Bot | Platforms | Best For | Cost |
|---|---|---|---|
| StreamUps | Twitch, YouTube Live, Kick | One command list answering on every platform you simulcast to, plus AI chat and overlays | Free tier plus Pro |
| Nightbot | Twitch, YouTube Live | Fast chat-based command creation and mature spam filtering | Free |
| StreamElements | Twitch, YouTube Live | Loyalty points, alerts and widgets sharing one account with your commands | Free |
| Moobot | Twitch | Automated moderation rules and a clean single-platform dashboard | Free |
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.
- 1Create a free StreamUps account and connect the channels you stream to — Twitch, YouTube Live and Kick can all sit on the same account.
- 2Give the StreamUps bot moderator status in each connected chat so its responses and links aren't filtered by the platform.
- 3Open the Commands section of the dashboard and choose to add a new command.
- 4Set the trigger, including the exclamation mark — for example !discord.
- 5Write the response and drop in a viewer-name placeholder if the reply should name whoever typed it.
- 6Set the user level to everyone for informational commands, or restrict it to moderators for anything that changes channel state.
- 7Set a cooldown — 30 seconds suits informational commands, 60 or more suits fun ones.
- 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.
- 1Sign in at nightbot.tv with your Twitch account and use Join Channel to bring the bot into your chat.
- 2Type /mod nightbot in your chat so its messages aren't filtered.
- 3Open Commands → Custom and choose Add Command.
- 4Fill in the Command field with your trigger and the Message field with the response.
- 5Choose a User Level — Everyone, Regular, Subscriber, Moderator or Owner.
- 6Set a Cooldown in seconds. Nightbot applies it channel-wide rather than per viewer.
- 7Add an Alias if you want a second trigger to fire the same response, then save.
- 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.
- 1Sign in to StreamElements with your Twitch account and confirm the bot has joined your channel.
- 2Type /mod streamelements in your chat to give it moderator status.
- 3Open the chat bot section of the dashboard and go to Chat Commands → Custom Commands.
- 4Choose Add new command and set the trigger and response.
- 5Use ${variables} in the response for anything dynamic — ${user}, ${touser}, ${uptime}, ${count}.
- 6Pick an Access Level: Everyone, Regular, Subscriber, VIP, Moderator or Broadcaster.
- 7Set the user cooldown and the global cooldown separately — they do different jobs.
- 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.
- 1Sign in to the Moobot dashboard with your Twitch account and add the bot to your channel.
- 2Give Moobot moderator status in your chat.
- 3Open the custom commands section of the dashboard and create a new command.
- 4Set the trigger and write the response, keeping it to a single line.
- 5Choose who is allowed to run it and set a cooldown so it can't be spammed.
- 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.
| What You Want | Nightbot | StreamElements |
|---|---|---|
| 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.
!lurkLurk
Let viewers announce they're watching quietly without leaving the stream.
!soShoutout
Give another streamer an on-stream shoutout with a link to their channel.
!discordDiscord
Drop your community Discord invite into chat on demand.
!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.
!specsSpecs
Answer the most-asked question on any stream: what's in your PC?
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?
Can I create Twitch commands without a bot?
How many custom commands should I have?
Do custom commands work on Kick and YouTube too?
What's the difference between a command and a timer?
Why does my command print $(user) instead of a name?
Can moderators add commands for me?
Should a command be everyone-level or restricted?
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.