Conditions.
Conditions are the rules in a flow. They decide whether the run keeps going and which path it follows. A condition has a true path and a false path, and the run takes exactly one of them based on the answer.
Branching
A condition looks at a value and follows its true branch when the rule passes, or its false branch when it does not. You connect whatever should happen to the matching branch. Leave a branch unconnected and that outcome simply ends the run.
The kinds of condition
A quick read on each: Check a condition compares one value against another (equals, greater or less than, at least, contains, starts or ends with, or a regular expression match). Check multiple conditions combines several checks with AND or OR. Within a time window watches for a number of events inside a rolling window. Switch on a value routes to a different path per value instead of just true or false. Random chance takes the true path a set percentage of the time.
Counting in a window
A time window condition is how you react to a burst rather than a single event. It counts matching events inside a rolling window (and can sum quantities, so a gift bomb of seven counts as seven), fires once the moment the threshold is crossed, then stays quiet until the window clears so you do not get a flood.
Random chance
The random chance condition is a slider from 0 to 100. At 50, about half of events follow the true path; at 100 every event does, at 0 none do. Use it to keep a sound or a shout-out from firing every single time, so it stays a treat.
A condition reads best as a yes or no question. If you can phrase it as "is the message longer than 200 characters?", it maps cleanly onto a true and a false branch.
Checking a viewer
Nine conditions look specifically at the person behind the event, or the channel around it:
- Check watchtime compares tracked watch time (in hours) against a threshold. Defaults to the person who caused the trigger.
- Check followage looks at how long they have followed (in days). "At least 0 days" is a quick way to ask "do they follow at all?".
- Check account age looks at how old their Twitch account is, in days.
- Check user level checks a minimum role: subscriber, VIP, moderator or broadcaster. Only meaningful on chat-triggered flows.
- Check subscription tier checks for any paid tier, or a specific Tier 1, 2 or 3.
- Viewer is a moderator and Viewer is a VIP ask Twitch directly whether they hold the role, so they work on any trigger, not just chat.
- Check if live is true while you are live, optionally only once you have been live past a minimum uptime.
- Check time of day is true inside a time window you set (it can wrap past midnight), read in your Bot Settings timezone, with an optional set of weekdays.
Held messages and links
Twitch can hold a chat message for review instead of posting it: AutoMod holds messages it flags for content, blocked terms hold on your term list, and, when you enable hold links for review in your Twitch moderation settings, messages containing links are held too. OverlayThing never holds anything itself here. Holds are Twitch's; flows only decide what happens to a message Twitch has already held.
The Held message type condition routes each held message down one of five paths, checked in this order:
- Trusted link: the message was held only because of links, it contains nothing besides those links, and every one of them is on your trusted domains list. This is the only path that is safe to wire straight to Approve: there is no other content to review, so releasing it costs nothing (no AI call).
- Other link: the message contains at least one link that is not on your trusted list, no matter why it was held. A suspicious link outranks everything else, including AI review. This is where you send a "links are not allowed" reply, deny, or simply leave it unwired so a human decides.
- AutoMod flagged: AutoMod held it for content, and any links it carries are all trusted. The text is the concern, so this is the path to send through an AI decision.
- Blocked term: it matched your blocked terms, same link guarantee.
- Other: everything else. That includes a trusted link with surrounding text (the words still deserve review), and any hold type Twitch adds in the future that this node does not recognize yet.
Every path except Other link is free of untrusted links by construction. A message carrying an unvetted URL always exits at Other link before anything downstream runs, so an AI decision or an Approve wired to the other paths can never release a link you have not trusted.
A path you leave unwired simply ends the run, and an untouched held message stays in the held queue for a human, in your dock and in Twitch's mod view. Doing nothing is always the safe default.
Trusted link domains
The node reads your channel's trusted link domains list automatically; there is nothing to configure on the node itself. You manage the list in Chatbot → Chat Filters on the links filter card, or under Settings → Moderation; both edit the same list, and the chatbot's own links filter uses it too.
- Matching is by domain, never by text: an entry like
twitch.tvmatchestwitch.tvand any subdomain such asclips.twitch.tv, but not lookalikes liketwitch.tv.example.comor a link that merely mentions twitch.tv in its path. - Every link in a message must match. One untrusted link sends the whole message to Other link.
- An empty list trusts nothing, so until you add domains, every link-hold routes to Other link.
- "Nothing besides the link" is strict: any other words, including an emote name, count as content, and the message routes for review instead of the Trusted link fast path.
Every held-message trigger also exposes the routing facts as data you can use anywhere in the flow: {{trigger.hold_reason}} (why Twitch held it), {{trigger.contains_link}}, {{trigger.link_only}}, {{trigger.links}} and {{trigger.link_domains}}.
Cooldown reads like a condition but you will find it grouped with the controls (next to Wait and Repeat). It gates how often a flow may proceed, per user or channel-wide, and gives you a separate exit to run when a viewer is still cooled down.
Link intent
The Link intent condition decides whether a message that looks like a link really intends to share one, or a typo. It sits downstream of an AutoMod hold-type condition routed to the "Other link" port, or within the links filter's opt-in typo check. It reads the held message and classifies whether the detected URL-like text is a real link or a typo (a missing space after a period, for example, can turn "ok.So anyway" into what reads like a link, the same shape as someone typing "my store is at ok.so" on purpose).
The condition branches on two ports: Intended link when a link is confirmed, and Typo when it is not. Five routing rules, evaluated in order, decide which port fires: (1) a URL with a scheme (http://, https://), a www. prefix, or a path (domain/slash) routes to intended without judgment. (2) No link-shaped text at all routes to typo. (3) A test-fire button or flow simulation never calls the judge (no spend) and defaults to intended link. (4) Ambiguous candidates consult the judge: if the verdict is intended, route to intended link. If the verdict is typo, route to typo. (5) If the judge is unavailable (a transient error, timeout, or channel limit reached), default to intended link so a human can review it. The message is not actioned by the flow itself. You add actions on each branch to decide what happens next.
This condition sits downstream of an AutoMod hold-type branch on the "Other link" port, or embedded in the links filter as part of its opt-in typo check. It does not re-check trusted domains. Those are exempted at an earlier point in the chain.