Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit ed3979d

Browse files
committed
Fix invite pushes
* If the event is an invite event, add the invitee to list of user we run push rules for (if they have a pusher etc) * Move invite_for_me to be higher prio than member events otherwise member events matches them * Spell override right
1 parent 7b6d519 commit ed3979d

File tree

4 files changed

+58
-39
lines changed

4 files changed

+58
-39
lines changed

synapse/push/action_generator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from twisted.internet import defer
1717

18-
from .bulk_push_rule_evaluator import evaluator_for_room_id
18+
from .bulk_push_rule_evaluator import evaluator_for_event
1919

2020
import logging
2121

@@ -35,8 +35,8 @@ def __init__(self, hs):
3535

3636
@defer.inlineCallbacks
3737
def handle_push_actions_for_event(self, event, context, handler):
38-
bulk_evaluator = yield evaluator_for_room_id(
39-
event.room_id, self.hs, self.store
38+
bulk_evaluator = yield evaluator_for_event(
39+
event, self.hs, self.store
4040
)
4141

4242
actions_by_user = yield bulk_evaluator.action_for_event_by_user(

synapse/push/baserules.py

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def make_base_append_rules(kind, modified_base_rules):
7979
rules = []
8080

8181
if kind == 'override':
82-
rules = BASE_APPEND_OVRRIDE_RULES
82+
rules = BASE_APPEND_OVERRIDE_RULES
8383
elif kind == 'underride':
8484
rules = BASE_APPEND_UNDERRIDE_RULES
8585
elif kind == 'content':
@@ -148,7 +148,7 @@ def make_base_prepend_rules(kind, modified_base_rules):
148148
]
149149

150150

151-
BASE_APPEND_OVRRIDE_RULES = [
151+
BASE_APPEND_OVERRIDE_RULES = [
152152
{
153153
'rule_id': 'global/override/.m.rule.suppress_notices',
154154
'conditions': [
@@ -163,6 +163,40 @@ def make_base_prepend_rules(kind, modified_base_rules):
163163
'dont_notify',
164164
]
165165
},
166+
# NB. .m.rule.invite_for_me must be higher prio than .m.rule.member_event
167+
# otherwise invites will be matched by .m.rule.member_event
168+
{
169+
'rule_id': 'global/underride/.m.rule.invite_for_me',
170+
'conditions': [
171+
{
172+
'kind': 'event_match',
173+
'key': 'type',
174+
'pattern': 'm.room.member',
175+
'_id': '_member',
176+
},
177+
{
178+
'kind': 'event_match',
179+
'key': 'content.membership',
180+
'pattern': 'invite',
181+
'_id': '_invite_member',
182+
},
183+
{
184+
'kind': 'event_match',
185+
'key': 'state_key',
186+
'pattern_type': 'user_id'
187+
},
188+
],
189+
'actions': [
190+
'notify',
191+
{
192+
'set_tweak': 'sound',
193+
'value': 'default'
194+
}, {
195+
'set_tweak': 'highlight',
196+
'value': False
197+
}
198+
]
199+
},
166200
# Will we sometimes want to know about people joining and leaving?
167201
# Perhaps: if so, this could be expanded upon. Seems the most usual case
168202
# is that we don't though. We add this override rule so that even if
@@ -251,38 +285,6 @@ def make_base_prepend_rules(kind, modified_base_rules):
251285
}
252286
]
253287
},
254-
{
255-
'rule_id': 'global/underride/.m.rule.invite_for_me',
256-
'conditions': [
257-
{
258-
'kind': 'event_match',
259-
'key': 'type',
260-
'pattern': 'm.room.member',
261-
'_id': '_member',
262-
},
263-
{
264-
'kind': 'event_match',
265-
'key': 'content.membership',
266-
'pattern': 'invite',
267-
'_id': '_invite_member',
268-
},
269-
{
270-
'kind': 'event_match',
271-
'key': 'state_key',
272-
'pattern_type': 'user_id'
273-
},
274-
],
275-
'actions': [
276-
'notify',
277-
{
278-
'set_tweak': 'sound',
279-
'value': 'default'
280-
}, {
281-
'set_tweak': 'highlight',
282-
'value': False
283-
}
284-
]
285-
},
286288
{
287289
'rule_id': 'global/underride/.m.rule.message',
288290
'conditions': [
@@ -315,7 +317,7 @@ def make_base_prepend_rules(kind, modified_base_rules):
315317
r['default'] = True
316318
BASE_RULE_IDS.add(r['rule_id'])
317319

318-
for r in BASE_APPEND_OVRRIDE_RULES:
320+
for r in BASE_APPEND_OVERRIDE_RULES:
319321
r['priority_class'] = PRIORITY_CLASS_MAP['override']
320322
r['default'] = True
321323
BASE_RULE_IDS.add(r['rule_id'])

synapse/push/bulk_push_rule_evaluator.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ def _get_rules(room_id, user_ids, store):
6969

7070

7171
@defer.inlineCallbacks
72-
def evaluator_for_room_id(room_id, hs, store):
72+
def evaluator_for_event(event, hs, store):
73+
room_id = event.room_id
7374
users_with_pushers = yield store.get_users_with_pushers_in_room(room_id)
7475
receipts = yield store.get_receipts_for_room(room_id, "m.read")
7576

@@ -79,6 +80,15 @@ def evaluator_for_room_id(room_id, hs, store):
7980
if hs.is_mine_id(r['user_id']):
8081
user_ids.add(r['user_id'])
8182

83+
# if this event is an invite event, we may need to run rules for the user
84+
# who's been invited, otherwise they won't get told they've been invited
85+
if event.type == 'm.room.member' and event.content['membership'] == 'invite':
86+
invited_user = event.state_key
87+
if invited_user and hs.is_mine_id(invited_user):
88+
has_pusher = yield store.user_has_pusher(invited_user)
89+
if has_pusher:
90+
user_ids.add(invited_user)
91+
8292
user_ids = list(user_ids)
8393

8494
rules_by_user = yield _get_rules(room_id, user_ids, store)

synapse/storage/pusher.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ def _decode_pushers_rows(self, rows):
4949

5050
return rows
5151

52+
@defer.inlineCallbacks
53+
def user_has_pusher(self, user_id):
54+
ret = yield self._simple_select_one_onecol(
55+
"pushers", {"user_name": user_id}, "id", allow_none=True
56+
)
57+
defer.returnValue(ret is not None)
58+
5259
@defer.inlineCallbacks
5360
def get_pushers_by_app_id_and_pushkey(self, app_id, pushkey):
5461
def r(txn):

0 commit comments

Comments
 (0)