diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroupHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroupHandler.kt index c5c5e9a506..dfd63b2090 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroupHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroupHandler.kt @@ -161,6 +161,12 @@ fun MessageSender.addMembers(groupPublicKey: String, membersToAdd: List) for (member in membersToAdd) { val closedGroupNewKind = ClosedGroupControlMessage.Kind.New(ByteString.copyFrom(Hex.fromStringCondensed(groupPublicKey)), name, encryptionKeyPair, membersAsData, adminsAsData, expireTimer) val closedGroupControlMessage = ClosedGroupControlMessage(closedGroupNewKind) + // It's important that the sent timestamp of this message is greater than the sent timestamp + // of the `MembersAdded` message above. The reason is that upon receiving this `New` message, + // the recipient will update the closed group formation timestamp and ignore any closed group + // updates from before that timestamp. By setting the timestamp of the message below to a value + // greater than that of the `MembersAdded` message, we ensure that newly added members ignore + // the `MembersAdded` message. closedGroupControlMessage.sentTimestamp = System.currentTimeMillis() send(closedGroupControlMessage, Address.fromSerialized(member)) }