{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "#/components/schemas/RegexCondition", "title": "RegexCondition", "type": "object", "properties": { "type": { "type": "string", "description": "This is the type discriminator for regex condition", "example": "regex", "enum": [ "regex" ] }, "regex": { "type": "string", "description": "This is the regular expression pattern to match against message content.\n\nNote:\n- This works by using the RegExp.test method in Node.JS. Eg. /hello/.test(\"hello there\") will return true.\n\nHot tips:\n- In JavaScript, escape \\ when sending the regex pattern. Eg. \"hello\\sthere\" will be sent over the wire as \"hellosthere\". Send \"hello\\\\sthere\" instead.\n- RegExp.test does substring matching, so /cat/.test(\"I love cats\") will return true. To do full string matching, use anchors: /^cat$/ will only match exactly \"cat\".\n- Word boundaries \\b are useful for matching whole words: /\\bcat\\b/ matches \"cat\" but not \"cats\" or \"category\".\n- Use inline flags for portability: (?i) for case insensitive, (?m) for multiline", "examples": [ "\\\\b(cancel|stop|wait)\\\\b - Matches whole words", "^yes$ - Matches exactly yes (full string match)", "(?i)hello - Case insensitive match" ] }, "target": { "description": "This is the target for messages to check against.\nIf not specified, the condition will run on the last message (position: -1).\nIf role is not specified, it will look at the last message regardless of role.\n@default { position: -1 }", "allOf": [ { "$ref": "#/components/schemas/MessageTarget" } ] }, "negate": { "type": "boolean", "description": "This is the flag that when true, the condition matches if the pattern does NOT match.\nUseful for ensuring certain words/phrases are absent.\n\n@default false", "example": "true - Reject if user hasn\"t said goodbye: { regex: \"\\\\b(bye|goodbye)\\\\b\", negate: true }" } }, "required": [ "type", "regex" ] }