diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index e238579164..5c50c611ba 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -196,12 +196,25 @@ class MessageHandler(BaseHandler):
if builder.type == EventTypes.Member:
membership = builder.content.get("membership", None)
+ target = UserID.from_string(builder.state_key)
+
if membership == Membership.JOIN:
- joinee = UserID.from_string(builder.state_key)
# If event doesn't include a display name, add one.
yield collect_presencelike_data(
- self.distributor, joinee, builder.content
+ self.distributor, target, builder.content
)
+ elif membership == Membership.INVITE:
+ profile = self.hs.get_handlers().profile_handler
+ content = builder.content
+
+ try:
+ content["displayname"] = yield profile.get_displayname(target)
+ content["avatar_url"] = yield profile.get_avatar_url(target)
+ except Exception as e:
+ logger.info(
+ "Failed to get profile information for %r: %s",
+ target, e
+ )
if token_id is not None:
builder.internal_metadata.token_id = token_id
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 92eab20c7c..1f6fde8e8a 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -210,9 +210,9 @@ class SyncHandler(BaseHandler):
key=None
)
- membership_list = (Membership.INVITE, Membership.JOIN)
- if sync_config.filter_collection.include_leave:
- membership_list += (Membership.LEAVE, Membership.BAN)
+ membership_list = (
+ Membership.INVITE, Membership.JOIN, Membership.LEAVE, Membership.BAN
+ )
room_list = yield self.store.get_rooms_for_user_where_membership_is(
user_id=sync_config.user.to_string(),
@@ -262,6 +262,12 @@ class SyncHandler(BaseHandler):
invite=invite,
))
elif event.membership in (Membership.LEAVE, Membership.BAN):
+ # Always send down rooms we were banned or kicked from.
+ if not sync_config.filter_collection.include_leave:
+ if event.membership == Membership.LEAVE:
+ if sync_config.user.to_string() == event.sender:
+ continue
+
leave_token = now_token.copy_and_replace(
"room_key", "s%d" % (event.stream_ordering,)
)
|