From 3602ef9be940e287bfe6ed32972ce13fea9deaa4 Mon Sep 17 00:00:00 2001 From: AsamK Date: Thu, 16 Nov 2023 20:36:46 +0100 Subject: [PATCH] Add -u flag to send to username --- .../signal/commands/RemoteDeleteCommand.java | 5 ++++- .../org/asamk/signal/commands/SendCommand.java | 6 +++++- .../signal/commands/SendReactionCommand.java | 5 ++++- .../java/org/asamk/signal/util/CommandUtil.java | 17 ++++++++++++++++- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java b/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java index 294fd7c5..1b26396d 100644 --- a/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java +++ b/src/main/java/org/asamk/signal/commands/RemoteDeleteCommand.java @@ -34,6 +34,7 @@ public class RemoteDeleteCommand implements JsonRpcLocalCommand { .help("Specify the timestamp of the message to delete."); subparser.addArgument("-g", "--group-id", "--group").help("Specify the recipient group ID.").nargs("*"); subparser.addArgument("recipient").help("Specify the recipients' phone number.").nargs("*"); + subparser.addArgument("-u", "--username").help("Specify the recipient username or username link.").nargs("*"); subparser.addArgument("--note-to-self").action(Arguments.storeTrue()); } @@ -43,12 +44,14 @@ public class RemoteDeleteCommand implements JsonRpcLocalCommand { ) throws CommandException { final var isNoteToSelf = Boolean.TRUE.equals(ns.getBoolean("note-to-self")); final var recipientStrings = ns.getList("recipient"); + final var usernameStrings = ns.getList("username"); final var groupIdStrings = ns.getList("group-id"); final var recipientIdentifiers = CommandUtil.getRecipientIdentifiers(m, isNoteToSelf, recipientStrings, - groupIdStrings); + groupIdStrings, + usernameStrings); final long targetTimestamp = ns.getLong("target-timestamp"); diff --git a/src/main/java/org/asamk/signal/commands/SendCommand.java b/src/main/java/org/asamk/signal/commands/SendCommand.java index 7d9fe788..1d0b46e4 100644 --- a/src/main/java/org/asamk/signal/commands/SendCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendCommand.java @@ -47,6 +47,7 @@ public class SendCommand implements JsonRpcLocalCommand { subparser.help("Send a message to another user or group."); subparser.addArgument("recipient").help("Specify the recipients' phone number.").nargs("*"); subparser.addArgument("-g", "--group-id", "--group").help("Specify the recipient group ID.").nargs("*"); + subparser.addArgument("-u", "--username").help("Specify the recipient username or username link.").nargs("*"); subparser.addArgument("--note-to-self") .help("Send the message to self without notification.") .action(Arguments.storeTrue()); @@ -56,6 +57,7 @@ public class SendCommand implements JsonRpcLocalCommand { mut.addArgument("--message-from-stdin") .action(Arguments.storeTrue()) .help("Read the message from standard input."); + subparser.addArgument("-a", "--attachment") .nargs("*") .help("Add an attachment. " @@ -106,11 +108,13 @@ public class SendCommand implements JsonRpcLocalCommand { final var isNoteToSelf = Boolean.TRUE.equals(ns.getBoolean("note-to-self")); final var recipientStrings = ns.getList("recipient"); final var groupIdStrings = ns.getList("group-id"); + final var usernameStrings = ns.getList("username"); final var recipientIdentifiers = CommandUtil.getRecipientIdentifiers(m, isNoteToSelf, recipientStrings, - groupIdStrings); + groupIdStrings, + usernameStrings); final var isEndSession = Boolean.TRUE.equals(ns.getBoolean("end-session")); if (isEndSession) { diff --git a/src/main/java/org/asamk/signal/commands/SendReactionCommand.java b/src/main/java/org/asamk/signal/commands/SendReactionCommand.java index 0eafc2fd..56fa81f2 100644 --- a/src/main/java/org/asamk/signal/commands/SendReactionCommand.java +++ b/src/main/java/org/asamk/signal/commands/SendReactionCommand.java @@ -31,6 +31,7 @@ public class SendReactionCommand implements JsonRpcLocalCommand { subparser.help("Send reaction to a previously received or sent message."); subparser.addArgument("-g", "--group-id", "--group").help("Specify the recipient group ID.").nargs("*"); subparser.addArgument("recipient").help("Specify the recipients' phone number.").nargs("*"); + subparser.addArgument("-u", "--username").help("Specify the recipient username or username link.").nargs("*"); subparser.addArgument("--note-to-self") .help("Send the reaction to self without notification.") .action(Arguments.storeTrue()); @@ -57,11 +58,13 @@ public class SendReactionCommand implements JsonRpcLocalCommand { final var isNoteToSelf = Boolean.TRUE.equals(ns.getBoolean("note-to-self")); final var recipientStrings = ns.getList("recipient"); final var groupIdStrings = ns.getList("group-id"); + final var usernameStrings = ns.getList("username"); final var recipientIdentifiers = CommandUtil.getRecipientIdentifiers(m, isNoteToSelf, recipientStrings, - groupIdStrings); + groupIdStrings, + usernameStrings); final var emoji = ns.getString("emoji"); final var isRemove = Boolean.TRUE.equals(ns.getBoolean("remove")); diff --git a/src/main/java/org/asamk/signal/util/CommandUtil.java b/src/main/java/org/asamk/signal/util/CommandUtil.java index 48decc7a..039ac2a7 100644 --- a/src/main/java/org/asamk/signal/util/CommandUtil.java +++ b/src/main/java/org/asamk/signal/util/CommandUtil.java @@ -26,7 +26,8 @@ public class CommandUtil { final Manager m, final boolean isNoteToSelf, final List recipientStrings, - final List groupIdStrings + final List groupIdStrings, + final List usernameStrings ) throws UserErrorException { final var recipientIdentifiers = new HashSet(); if (isNoteToSelf) { @@ -39,6 +40,9 @@ public class CommandUtil { if (groupIdStrings != null) { recipientIdentifiers.addAll(CommandUtil.getGroupIdentifiers(groupIdStrings)); } + if (usernameStrings != null) { + recipientIdentifiers.addAll(CommandUtil.getUsernameIdentifiers(usernameStrings)); + } if (recipientIdentifiers.isEmpty()) { throw new UserErrorException("No recipients given"); @@ -102,6 +106,17 @@ public class CommandUtil { } } + public static Set getUsernameIdentifiers(Collection usernameIdStrings) { + if (usernameIdStrings == null) { + return Set.of(); + } + final var usernameIds = new HashSet(); + for (final var usernameIdString : usernameIdStrings) { + usernameIds.add(new RecipientIdentifier.Username(usernameIdString)); + } + return usernameIds; + } + public static String getCaptchaRequiredMessage(final CaptchaRequiredException e, final boolean captchaProvided) { String message; if (!captchaProvided) { -- 2.50.1