# Add permissions and cooldowns

Limit who can run a command and how often it can respond.

Updated 5 October 2026

## Make a command moderators-only

1. Open the command flow and switch to **Canvas**.
2. Search the node library for **Who can trigger**. Insert it between the command trigger and the action.
3. Choose the required role in its fields, then connect the passing path to the action.
4. Save, inspect a dry run, and verify live behaviour with the intended roles.

> **Pebble can show you the check**
>
> Pebble’s **Make it only for mods** tutorial adds a **Who can trigger** check to a command and shows where your Commands page lists it. Start it from [Tutorials](https://bloopbot.com/docs/tutorials).

Everyone at the chosen level and above passes: **Moderators and up** lets your moderators and you through, and **Broadcaster only** keeps the command to you alone. The check reads each viewer’s Twitch badges, so a moderator needs no dashboard access to use a moderators-only command; [Share the work with mods and editors](https://bloopbot.com/docs/editors#moderators) explains the difference.

This is useful for [clip commands](https://bloopbot.com/docs/clips), changes to stream information, point adjustments and other moderator tools. A condition must be on the connected execution path to protect the action.

The level you pick here is also where the command appears on your public **Commands** page: a **Moderators and up** command is listed under **Moderators**, and a command with no **Who can trigger** step under **Everyone**. [Show your chat commands](https://bloopbot.com/docs/public-page#commands) covers which groups viewers see.

## Stop a command from being spammed

Search for **Cooldown** and place the condition before the response. Choose how long the cooldown lasts and whether it is shared by the whole channel or tracked per viewer. A channel cooldown limits total chat noise; a per-viewer cooldown gives each viewer their own turn.

> **Check the failing path**
>
> If a permission or cooldown check does not pass, keep its failing branch away from the protected action. A second direct connection from the trigger could bypass your check.

## Let a failed attempt try again

A cooldown normally counts every attempt it lets through, including the ones that then go wrong. If the step after it fails — a lookup that finds nothing, a request that times out, a channel-point reward that could not be fulfilled — the viewer still waits out the full cooldown before they can try again.

The **Cooldown** step has a second connection point on its left, labelled **Reset**. Anything connected there frees the cooldown: both the whole-channel window and the individual viewer’s, so the very next attempt goes through as if nobody had triggered it.

1. Open the flow and switch to **Canvas**.
2. Find the step that can fail and connect its **error** branch — the red connection on its right — to the **Reset** connection on the left of your **Cooldown** step.
3. Save, then use **Test fire** and expand the **Run log** to check the paths you built.
4. Go live and try the command twice in a row: the first attempt that fails should not make the next one wait.

> **What counts as a failure**
>
> Only a step that fails reaches an **error** branch. A viewer the cooldown or a permission check turns away is the flow working as you set it up, not a failure, so it does not free anything. If you never connect **Reset**, the cooldown behaves exactly as before.

## Allow your regulars

The **Regulars-only command** template includes an **Is a regular** condition. Manage the list on **Regulars**. This is Bloopbot’s regular-viewer list, separate from Twitch’s subscriber, VIP and moderator roles.
