-
Notifications
You must be signed in to change notification settings - Fork 380
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* Suppress message edits. * Fix typo. Co-authored-by: Sumner Evans <[email protected]> * Add @room. * Match MSC title to PR. * Add a potential issue. * Clarify rule placement. * Change link text. Co-authored-by: Richard van der Hoff <[email protected]> * Fix typo. Co-authored-by: Richard van der Hoff <[email protected]> * Add a note about mobile clients. * Update from anoa's feedback. * Updates for Matrix 1.7 * Update more spec links. * Minor clarifications. Co-authored-by: Andrew Morgan <[email protected]> * Add downside about "all messages" * Clarify again that this *does* work with all messages. --------- Co-authored-by: Sumner Evans <[email protected]> Co-authored-by: Richard van der Hoff <[email protected]> Co-authored-by: Andrew Morgan <[email protected]>
- Loading branch information
1 parent
7ad992a
commit 43c374e
Showing
1 changed file
with
142 additions
and
0 deletions.
There are no files selected for viewing
142 changes: 142 additions & 0 deletions
142
proposals/3958-suppress-notifications-of-message-edits.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
# MSC3958: Suppress notifications from message edits | ||
|
||
[Event replacement](https://spec.matrix.org/v1.7/client-server-api/#event-replacements) | ||
(more commonly known as message edits) signals that a message is intended to | ||
be replaced with new content. | ||
|
||
This works well for fixing typos or other minor correction, but can cause | ||
spurious notifications if the event mentions a user's display name / localpart or | ||
if it includes `@room` (which is particularly bad in large rooms as every user | ||
is re-notified). This contributes to notification fatigue as the additional | ||
notifications contain no new information. | ||
|
||
Additionally for users which have a room set to "all messages" then every event | ||
edit results in an additional notification.[^1] | ||
|
||
## Proposal | ||
|
||
A new default push rule is added to suppress notifications due to [edits](https://spec.matrix.org/v1.7/client-server-api/#event-replacements). | ||
|
||
```json | ||
{ | ||
"rule_id": ".m.rule.suppress_edits", | ||
"default": true, | ||
"enabled": true, | ||
"conditions": [ | ||
{ | ||
"kind": "event_property_is", | ||
"key": "content.m\\.relates_to.rel_type", | ||
"value": "m.replace" | ||
} | ||
], | ||
"actions": [] | ||
} | ||
``` | ||
|
||
This rule should be placed after the [`.m.rule.room.server_acl` rule](https://spec.matrix.org/v1.7/client-server-api/#default-override-rules) | ||
as the last override rule. | ||
|
||
It would match events such as those given in [event replacements](https://spec.matrix.org/v1.7/client-server-api/#event-replacements) | ||
portion of the spec: | ||
|
||
```json5 | ||
{ | ||
"type": "m.room.message", | ||
"content": { | ||
"body": "* Hello! My name is bar", | ||
"msgtype": "m.text", | ||
"m.new_content": { | ||
"body": "Hello! My name is bar", | ||
"msgtype": "m.text" | ||
}, | ||
"m.relates_to": { | ||
"rel_type": "m.replace", | ||
"event_id": "$some_event_id" | ||
} | ||
}, | ||
// ... other fields required by events | ||
} | ||
``` | ||
|
||
With the [updated mentions behavior in Matrix 1.7](https://spec.matrix.org/v1.7/client-server-api/#user-and-room-mentions), | ||
this would allow the [`.m.rule.is_user_mention`](https://spec.matrix.org/v1.7/client-server-api/#_m_rule_is_user_mention) | ||
and the [`.m.rule.is_room_mention`](https://spec.matrix.org/v1.7/client-server-api/#_m_rule_is_room_mention) | ||
rules to continue matching, even for edited events, while suppressing notifications | ||
from other edits. | ||
|
||
Some users may be depending on notifications of edits. If a user would like to | ||
revert to the old behavior they can disable the `.m.rule.suppress_edits` push rule. | ||
|
||
## Potential issues | ||
|
||
### Edits of invites and tombstones | ||
|
||
The [`.m.rule.invite_for_me` and `.m.rule.tombstone`](https://spec.matrix.org/v1.7/client-server-api/#default-override-rules) | ||
rules may still cause spurious notifications if events which match those rules | ||
are edited. Both of those are state events and | ||
[not subject to valid edits](https://spec.matrix.org/v1.7/client-server-api/#validity-of-replacement-events). | ||
|
||
### Keeping notifications up-to-date | ||
|
||
Mobile clients currently depend on the push notifications of edited events to update the | ||
text of on-screen notifications. The proposed push rule would result in mobile clients no | ||
longer receiving these edits; but showing slightly outdated text on a notification screen. That | ||
is only a minor impact and it would be better to separate when (& why) we send pushes vs. | ||
when we generate notifications. | ||
|
||
### Suppression of notifications to a new keyword | ||
|
||
If an event is edited and the new event (but not the original event) matches a keyword | ||
then the notification would erroneously be suppressed. | ||
|
||
## Alternatives | ||
|
||
An alternative solution would be to add a push rule with no actions and a condition to | ||
check whether a notification was generated for the original message. | ||
|
||
This would be placed as an override rule before the `.m.rule.contains_display_name` | ||
and the `.m.rule.roomnotif` [push rules](https://spec.matrix.org/v1.7/client-server-api/#push-rules). | ||
|
||
This would suppress duplicate notifications, while still allow for new notifications due | ||
to new mentions or keywords changing. | ||
|
||
## Security considerations | ||
|
||
None forseen. | ||
|
||
## Future extensions | ||
|
||
If message edits by other senders were allowed than it would be useful to | ||
know when your own message was edited, but this | ||
[is not currently allowed](https://spec.matrix.org/v1.7/client-server-api/#validity-of-replacement-events). | ||
A future MSC to define this behavior should take into account notifying | ||
users in this situation. | ||
|
||
## Unstable prefix | ||
|
||
The unstable prefix of `.org.matrix.msc3958.suppress_edits` should be used in place of | ||
`.m.rule.suppress_edits`. | ||
|
||
A previous version of this MSC used `.com.beeper.suppress_edits` with a different condition | ||
(which should match the same events), but different rule placement. | ||
|
||
## Dependencies | ||
|
||
N/A | ||
|
||
<!-- Footnotes below --> | ||
|
||
[^1]: A room can be configured to be notify for "all messages" by creating a [room-specific push rule](https://spec.matrix.org/v1.7/client-server-api/#push-rules) | ||
with an `rule_id` of the room ID & has `actions` set to "notify" , e.g.: | ||
|
||
```json | ||
{ | ||
"rule_id" : "!abcdef:example.com", | ||
"default" : false, | ||
"enabled" : true, | ||
"actions" : ["notify"] | ||
} | ||
``` | ||
|
||
See the [Element Web](https://github.com/matrix-org/matrix-react-sdk/blob/da7aa4055e04f291be9b5141b704bd12aec03d0c/src/RoomNotifs.ts#L162-L170) | ||
implementation. |