Trigger conditions
Conditions decide whether a trigger fires, and whether an individual action in the trigger runs. A trigger’s conditions are a list where every item must pass (AND); one item in that list can itself be an “any of these” group (OR). See also the conditions guide.
Rule shapes
Section titled “Rule shapes”A single rule
Section titled “A single rule”The basic condition is one comparison: a field, an operator, and a value to compare against — e.g. “player.name $eq Scori”.
An OR-group
Section titled “An OR-group”Group up to 20 single rules with “match any of these” — the group passes as soon as one rule inside it matches. You can’t nest a group inside another group; a group can only hold plain rules.
How the list combines
Section titled “How the list combines”The trigger’s full condition list is AND across the top level — every entry must pass, including any OR-group:
(rule A) AND (rule B OR rule C) AND (rule D)Operators
Section titled “Operators”$eq / $ne / $has / $lacks are case-sensitive. $contains / $ncontains and $regex are case-insensitive.
| Operator | Description |
|---|---|
$eq |
Exact match |
$ne |
Not equal |
$contains |
Contains this text (case-insensitive) |
$ncontains |
Does not contain this text (case-insensitive) |
$regex |
Matches this regex pattern (see Regex safety) |
$gt |
Numeric greater-than |
$gte |
Numeric greater-than-or-equal |
$lt |
Numeric less-than |
$lte |
Numeric less-than-or-equal |
$has |
Field is a comma-separated list that includes this value |
$lacks |
Field is a comma-separated list that does not include this value |
The numeric operators ($gt/$gte/$lt/$lte) treat both sides as numbers; if a field is missing or not numeric, the condition doesn’t match.
$has / $lacks split the field on commas and check for an exact match within the list — this is how you check roster-group membership on player.groups (e.g. player.groups $has watch).
Regex safety
Section titled “Regex safety”Regex patterns are checked when you save the trigger and again every time they run:
| Limit | Value |
|---|---|
| Max pattern length | 256 characters |
| Max text checked against it | 1024 characters (longer input is cut to this length before matching) |
| Matching mode | Case-insensitive, Unicode-aware |
| Unsafe patterns | Rejected at save time — nested repeating groups like (a+)+ or (.*)* are blocked because they can hang the matcher |
A pattern that somehow slips through as invalid or unsafe is treated as a non-match at run time rather than failing the trigger.
Limits
Section titled “Limits”| Item | Max |
|---|---|
| Conditions on a trigger | 20 |
| Rules inside one OR-group | 20 |
| Conditions on one action | 20 |
Fields resolved per action
Section titled “Fields resolved per action”Some fields — player.groups, player.game.timePlayed, player.bans.count, player.firstSeen, and any counter.* field — are looked up only when an action actually runs. Because of that they can only be used in a per-action condition (the condition on one action in the actions list), not in the trigger’s top-level conditions — the builder rejects a trigger-level condition that references one of them.
See Event types for the full list of fields available per event.