]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/util/SendMessageResultUtils.java
Implement reacting to stories
[signal-cli] / src / main / java / org / asamk / signal / util / SendMessageResultUtils.java
index bb46a89dff700f6d41ae3f0ac4925b6fbdc7e7ba..cf2b282fabd33d8f150c0f43eb94ee66205e0e40 100644 (file)
@@ -1,5 +1,8 @@
 package org.asamk.signal.util;
 
+import org.asamk.signal.commands.exceptions.CommandException;
+import org.asamk.signal.commands.exceptions.UntrustedKeyErrorException;
+import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.json.JsonSendMessageResult;
 import org.asamk.signal.manager.api.ProofRequiredException;
 import org.asamk.signal.manager.api.RecipientIdentifier;
@@ -33,7 +36,9 @@ public class SendMessageResultUtils {
         }
     }
 
-    public static void outputResult(final OutputWriter outputWriter, final SendMessageResults sendMessageResults) {
+    public static void outputResult(
+            final OutputWriter outputWriter, final SendMessageResults sendMessageResults
+    ) throws CommandException {
         if (outputWriter instanceof PlainTextWriter writer) {
             var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results());
             printSendMessageResultErrors(writer, errors);
@@ -43,6 +48,13 @@ public class SendMessageResultUtils {
             var results = getJsonSendMessageResults(sendMessageResults.results());
             writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results));
         }
+        if (!sendMessageResults.hasSuccess()) {
+            if (sendMessageResults.hasOnlyUntrustedIdentity()) {
+                throw new UntrustedKeyErrorException("Failed to send message due to untrusted identities");
+            } else {
+                throw new UserErrorException("Failed to send message");
+            }
+        }
     }
 
     public static List<String> getErrorMessagesFromSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
@@ -72,11 +84,11 @@ public class SendMessageResultUtils {
                             + (
                             failure.getOptions().contains(ProofRequiredException.Option.RECAPTCHA)
                                     ? """
-                                    To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html
-                                    Check the developer tools (F12) console for a failed redirect to signalcaptcha://
-                                    Everything after signalcaptcha:// is the captcha token.
-                                    Use the following command to submit the captcha token:
-                                    signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN"""
+                                      To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html
+                                      Check the developer tools (F12) console for a failed redirect to signalcaptcha://
+                                      Everything after signalcaptcha:// is the captcha token.
+                                      Use the following command to submit the captcha token:
+                                      signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN"""
                                     : ""
                     ),
                     identifier,
@@ -88,6 +100,8 @@ public class SendMessageResultUtils {
                     failure.getRetryAfterSeconds());
         } else if (result.isNetworkFailure()) {
             return String.format("Network failure for \"%s\"", identifier);
+        } else if (result.isRateLimitFailure()) {
+            return String.format("Rate limit failure for \"%s\"", identifier);
         } else if (result.isUnregisteredFailure()) {
             return String.format("Unregistered user \"%s\"", identifier);
         } else if (result.isIdentityFailure()) {
@@ -106,7 +120,7 @@ public class SendMessageResultUtils {
         }
     }
 
-    public static List<JsonSendMessageResult> getJsonSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
+    private static List<JsonSendMessageResult> getJsonSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> mapResults) {
         return mapResults.entrySet().stream().flatMap(entry -> {
             final var groupId = entry.getKey() instanceof RecipientIdentifier.Group g ? g.groupId() : null;
             return entry.getValue().stream().map(r -> JsonSendMessageResult.from(r, groupId));