]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/GroupV2Helper.java
Add support for banning/unbanning group members
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / GroupV2Helper.java
index 49582ac95ea61afd53d784807251f15ab1f45c5c..d56ce98feb3aa58973eb862ea89e0a074f82cee8 100644 (file)
@@ -203,9 +203,13 @@ class GroupV2Helper {
                         credentials,
                         (uuid, credential) -> new GroupCandidate(uuid, Optional.ofNullable(credential)))
                 .collect(Collectors.toSet());
+        final var bannedUuids = groupInfoV2.getBannedMembers()
+                .stream()
+                .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
+                .collect(Collectors.toSet());
 
         final var aci = getSelfAci();
-        final var change = groupOperations.createModifyGroupMembershipChange(candidates, Set.of(), aci.uuid());
+        final var change = groupOperations.createModifyGroupMembershipChange(candidates, bannedUuids, aci.uuid());
 
         change.setSourceUuid(getSelfAci().toByteString());
 
@@ -259,6 +263,40 @@ class GroupV2Helper {
         return revokeInvites(groupInfoV2, memberUuids);
     }
 
+    Pair<DecryptedGroup, GroupChange> banMembers(
+            GroupInfoV2 groupInfoV2, Set<RecipientId> block
+    ) throws IOException {
+        GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+
+        final var uuids = block.stream()
+                .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
+                .collect(Collectors.toSet());
+
+        final var change = groupOperations.createBanUuidsChange(uuids,
+                false,
+                groupInfoV2.getGroup().getBannedMembersList());
+
+        change.setSourceUuid(getSelfAci().toByteString());
+
+        return commitChange(groupInfoV2, change);
+    }
+
+    Pair<DecryptedGroup, GroupChange> unbanMembers(
+            GroupInfoV2 groupInfoV2, Set<RecipientId> block
+    ) throws IOException {
+        GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
+
+        final var uuids = block.stream()
+                .map(member -> context.getRecipientHelper().resolveSignalServiceAddress(member).getServiceId().uuid())
+                .collect(Collectors.toSet());
+
+        final var change = groupOperations.createUnbanUuidsChange(uuids);
+
+        change.setSourceUuid(getSelfAci().toByteString());
+
+        return commitChange(groupInfoV2, change);
+    }
+
     Pair<DecryptedGroup, GroupChange> resetGroupLinkPassword(GroupInfoV2 groupInfoV2) throws IOException {
         final GroupsV2Operations.GroupOperations groupOperations = getGroupOperations(groupInfoV2);
         final var newGroupLinkPassword = GroupLinkPassword.createNew().serialize();