diff --git a/src/database/rooms.rs b/src/database/rooms.rs index c0cb1ce9..f56e7394 100644 --- a/src/database/rooms.rs +++ b/src/database/rooms.rs @@ -295,6 +295,22 @@ impl Rooms { sauthevents.remove(&shortstatekey).map(|k| (k, event_id)) }) .filter_map(|(k, event_id)| self.get_pdu(&event_id).ok().flatten().map(|pdu| (k, pdu))) + .filter(|(_, pdu)| { + if pdu.kind != EventType::RoomMember { + return true; + } + + #[derive(Deserialize)] + struct ExtractMembership { + membership: MembershipState, + } + + // Leave out auth events where the membership is leave + match serde_json::from_str::(pdu.content.get()) { + Ok(e) => e.membership != MembershipState::Leave, + Err(_) => true, + } + }) .collect()) }