MSC3952: Intentional mentions requires a way for a push rule condition to search for a value in a JSON array of values. This proposes implementing it in a generic fashion for re-use with other push rules.
A new push rule condition event_property_contains
is added which acts like
event_match
,
but searches an array for an exact value. The values must match exactly and be a
non-compound JSON type allowed by canonical JSON:
i.e. strings, null
, true
, false
and integers.
An example condition would look like:
{
"kind": "event_property_contains",
"key": "content.my_array",
"value": "foo"
}
This would match an event with content:
{
"content": {
"my_array": ["foo", true]
}
}
And it would not match if my_array
was empty or did not exist.
None foreseen.
MSC3887 is an
unfinished alternative which suggests allowing event_match
to search in arrays without other changes.
It is possible for the event content to contain very large arrays (the maximum event size is 65,536 bytes, if most of that contains an array of empty strings you get somewhere around 20,000 entries). Iterating through arrays of this size should not be a problem for modern computers, especially since the push rule searches for exact matches.
During development org.matrix.msc3966.exact_event_property_contains
shall be
used in place of event_property_contains
.
This MSC has similar semantics to MSC3758 (and the implementation builds on that), but it does not strictly depend on it.