diff options
author | David Robertson <davidr@element.io> | 2022-10-06 14:00:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-06 13:00:03 +0000 |
commit | e9a0419c8d28b8e153088073d6b76df6d7ed4ddf (patch) | |
tree | 43e90a0e6c392243bc4c578a8cdeb3b00203eea2 /synapse | |
parent | Pin build-system requirements (#14080) (diff) | |
download | synapse-e9a0419c8d28b8e153088073d6b76df6d7ed4ddf.tar.xz |
Fix sending events into rooms with non-integer power levels (#14073)
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/push/bulk_push_rule_evaluator.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py index 4270438918..998354648f 100644 --- a/synapse/push/bulk_push_rule_evaluator.py +++ b/synapse/push/bulk_push_rule_evaluator.py @@ -289,11 +289,18 @@ class BulkPushRuleEvaluator: if relation.rel_type == RelationTypes.THREAD: thread_id = relation.parent_id + # It's possible that old room versions have non-integer power levels (floats or + # strings). Workaround this by explicitly converting to int. + notification_levels = power_levels.get("notifications", {}) + if not event.room_version.msc3667_int_only_power_levels: + for user_id, level in notification_levels.items(): + notification_levels[user_id] = int(level) + evaluator = PushRuleEvaluator( _flatten_dict(event), room_member_count, sender_power_level, - power_levels.get("notifications", {}), + notification_levels, relations, self._relations_match_enabled, ) |