X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/942999b7b4beebf4519eed9b216587519b47e6c6..19b15e68e4ec652e23f9625662b7c0f96b963029:/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java diff --git a/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java b/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java index a7739c23..76932402 100644 --- a/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java +++ b/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java @@ -1,10 +1,12 @@ package org.asamk.signal.util; import org.asamk.signal.commands.exceptions.CommandException; +import org.asamk.signal.commands.exceptions.RateLimitErrorException; 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.RateLimitException; import org.asamk.signal.manager.api.RecipientIdentifier; import org.asamk.signal.manager.api.SendGroupMessageResults; import org.asamk.signal.manager.api.SendMessageResult; @@ -25,32 +27,39 @@ public class SendMessageResultUtils { } public static void outputResult(final OutputWriter outputWriter, final SendGroupMessageResults sendMessageResults) { - if (outputWriter instanceof PlainTextWriter writer) { - var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results()); - printSendMessageResultErrors(writer, errors); - writer.println("{}", sendMessageResults.timestamp()); - } else { - final var writer = (JsonWriter) outputWriter; - var results = getJsonSendMessageResults(sendMessageResults.results()); - writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results)); + switch (outputWriter) { + case PlainTextWriter writer -> { + var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results()); + printSendMessageResultErrors(writer, errors); + writer.println("{}", sendMessageResults.timestamp()); + } + case JsonWriter writer -> { + var results = getJsonSendMessageResults(sendMessageResults.results()); + writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results)); + } } } 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); - writer.println("{}", sendMessageResults.timestamp()); - } else { - final var writer = (JsonWriter) outputWriter; - var results = getJsonSendMessageResults(sendMessageResults.results()); - writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results)); + switch (outputWriter) { + case PlainTextWriter writer -> { + var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results()); + printSendMessageResultErrors(writer, errors); + writer.println("{}", sendMessageResults.timestamp()); + } + case JsonWriter writer -> { + 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 if (sendMessageResults.hasOnlyRateLimitFailure()) { + throw new RateLimitErrorException("Failed to send message due to rate limiting", + new RateLimitException(0)); } else { throw new UserErrorException("Failed to send message"); } @@ -82,13 +91,12 @@ public class SendMessageResultUtils { return String.format( "CAPTCHA proof required for sending to \"%s\", available options \"%s\" with challenge token \"%s\", or wait \"%d\" seconds.\n" + ( - failure.getOptions().contains(ProofRequiredException.Option.RECAPTCHA) + failure.getOptions().contains(ProofRequiredException.Option.CAPTCHA) ? """ - 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 + After solving the captcha, right-click on the "Open Signal" link and copy the link. + Use the following command to submit the captcha token: + signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN""" : "" ), identifier, @@ -111,7 +119,7 @@ public class SendMessageResultUtils { } public static void printSendMessageResultErrors(PlainTextWriter writer, List errors) { - if (errors.size() == 0) { + if (errors.isEmpty()) { return; } writer.println("Failed to send (some) messages:");