You type a StreamElements command and it works. Your bot sends exactly the same line and nothing happens: no reply, no error. The cause is almost always the command’s user level.
StreamElements user levels
Every command in the StreamElements chatbot has a minimum level. Anyone below it gets no response. StreamElements does not report this; the command is simply skipped.
| Level | Value | How it is assigned |
|---|---|---|
| Everyone | 100 | default for everyone |
| Subscriber | 250 | automatically for subscribers |
| Regular | 300 | assigned manually |
| VIP | 400 | automatically for VIPs |
| Moderator | 500 | automatically for Twitch moderators |
| Super Moderator | 1000 | assigned manually |
| Broadcaster | – | above every level, may run anything |
The last row matters: as the broadcaster you can trigger every command. When you test a command yourself, you therefore never see whether the level works for others.
The super moderator trap
A bot you made a moderator in your channel automatically gets level 500 in StreamElements. It only gets Super Moderator (1000) if you assign it by hand.
If you set a command to Super Moderator, perhaps to protect title changes, you lock out your own bot as well. That is exactly what happened to us: our bot announced every video in chat, and StreamElements was meant to turn that into the stream title. At level 1000 the bot’s line vanished without any message. At level 500 it worked immediately.
Fix: set the command to Moderator (500). Then only your moderators and your bot can use it, and the bot is no longer locked out.
Example: setting the stream title via a bot
To change the Twitch title, a program needs the Twitch permission channel:manage:broadcast for your channel. Many bots do not have it. StreamElements does, because it is connected to your broadcaster account. A proven approach is therefore: your bot writes a command in chat, and StreamElements sets the title from it.
StreamElements provides the $(settitle …) variable for this. A custom command looks like this:
!command add !current Title set: $(settitle ${1:})${1:} stands for everything from the first word after the command. If your bot writes !current Episode 12: The boss room, exactly “Episode 12: The boss room” becomes the new title.
Then set the level:
!command options current -level 500Without this restriction any viewer could change your title. StreamElements warns about this explicitly in its own documentation.
Troubleshooting in five steps
- Testing it yourself is not a test. As the broadcaster you bypass every level. Have a moderator or the bot trigger the command.
- Check the command’s level. In the StreamElements dashboard under Chatbot → Chat Commands, for custom and default commands.
- Check the bot’s level. In the chatbot’s user management or with the
!levelcommand. - Is the bot really a moderator? In your Twitch dashboard under Community → Roles. Without the mod role it stays at level 100.
- Check the cooldown. StreamElements commands have cooldowns. If the bot writes twice in quick succession, the second line is ignored.
Does this apply to other chatbots?
The principle is the same in most chatbots: commands have a minimum level and the channel owner sits above it. Names and values differ. The troubleshooting steps above work in the same way there.
How we connect video announcements and titles in a 24/7 stream is described on the OBS plugin page.