summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Eastwood <erice@element.io>2022-09-29 18:57:07 -0500
committerEric Eastwood <erice@element.io>2022-09-29 18:57:07 -0500
commita8be41bb80e6a165eccd60b7400c08361e23130f (patch)
treebcfa195620219786774003f43bbfb4e07376317f
parentAdd changelog (diff)
downloadsynapse-a8be41bb80e6a165eccd60b7400c08361e23130f.tar.xz
Revert back to using our own `_matches_user_in_member_list` thing
See https://github.com/matrix-org/synapse/pull/13958#discussion_r984074247
-rw-r--r--synapse/appservice/__init__.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/synapse/appservice/__init__.py b/synapse/appservice/__init__.py
index 71b534b039..c28bfff0f4 100644
--- a/synapse/appservice/__init__.py
+++ b/synapse/appservice/__init__.py
@@ -172,11 +172,26 @@ class ApplicationService:
         Returns:
             True if this service would like to know about this room.
         """
-        app_service_users_in_room = await store.get_app_service_users_in_room(
-            room_id, self, on_invalidate=cache_context.invalidate
+        # We can use `get_local_users_in_room(...)` here because an application
+        # service can only act on behalf of users of the server it's on.
+        #
+        # In the future, we can consider re-using
+        # `store.get_app_service_users_in_room` which is very similar to this
+        # function but has a slightly worse performance than this because we
+        # have an early escape-hatch if we find a single user that the
+        # appservice is interested in. The juice would be worth the squeeze if
+        # `store.get_app_service_users_in_room` was used in more places besides
+        # an experimental MSC. But for now we can avoid doing more work and
+        # barely using it later.
+        member_list = await store.get_local_users_in_room(
+            room_id, on_invalidate=cache_context.invalidate
         )
 
-        return len(app_service_users_in_room) > 0
+        # check joined member events
+        for user_id in member_list:
+            if self.is_interested_in_user(user_id):
+                return True
+        return False
 
     def is_interested_in_user(
         self,