Skip to content

Commit

Permalink
Add --message-from-stdin flag for send command
Browse files Browse the repository at this point in the history
  • Loading branch information
AsamK committed Feb 20, 2022
1 parent f3b2df6 commit ec945cd
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 16 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ System requirements:
- at least Java Runtime Environment (JRE) 17
- native library: libsignal-client

The native libs are bundled for x86_64 Linux (with recent enough glibc, see #643), Windows and MacOS. For other systems/architectures
The native libs are bundled for x86_64 Linux (with recent enough glibc, see #643), Windows and MacOS. For other
systems/architectures
see: [Provide native lib for libsignal](https://github.com/AsamK/signal-cli/wiki/Provide-native-lib-for-libsignal)

### Install system-wide on Linux
Expand Down Expand Up @@ -75,7 +76,7 @@ of all country codes.)

* Pipe the message content from another process.

uname -a | signal-cli -a ACCOUNT send RECIPIENT
uname -a | signal-cli -a ACCOUNT send --message-from-stdin RECIPIENT

* Receive messages

Expand Down
8 changes: 6 additions & 2 deletions man/signal-cli.1.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,11 @@ Send the message to self without notification.
Specify the recipient group ID in base64 encoding.

*-m* MESSAGE, *--message* MESSAGE::
Specify the message, if missing, standard input is used.
Specify the message.
Currently, signal-cli reads the message from stdin if `-m` is missing, but this will change in a future version and the explicit flag `--message-from-stdin` should be used instead.

*--message-from-stdin*::
Read the message from standard input.

*-a* [ATTACHMENT [ATTACHMENT ...]], *--attachment* [ATTACHMENT [ATTACHMENT ...]]::
Add one or more files as attachment.
Expand Down Expand Up @@ -578,7 +582,7 @@ Send a message to one or more recipients::
signal-cli -a ACCOUNT send -m "This is a message" [RECIPIENT [RECIPIENT ...]] [-a [ATTACHMENT [ATTACHMENT ...]]]

Pipe the message content from another process::
uname -a | signal-cli -a ACCOUNT send [RECIPIENT [RECIPIENT ...]]
uname -a | signal-cli -a ACCOUNT send --message-from-stdin [RECIPIENT [RECIPIENT ...]]

Create a group::
signal-cli -a ACCOUNT updateGroup -n "Group name" -m [MEMBER [MEMBER ...]]
Expand Down
25 changes: 13 additions & 12 deletions src/main/java/org/asamk/signal/commands/SendCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ public void attachToSubparser(final Subparser subparser) {
.help("Send the message to self without notification.")
.action(Arguments.storeTrue());

subparser.addArgument("-m", "--message").help("Specify the message, if missing standard input is used.");
var mut = subparser.addMutuallyExclusiveGroup();
mut.addArgument("-m", "--message").help("Specify the message to be sent.");
mut.addArgument("--message-from-stdin")
.action(Arguments.storeTrue())
.help("Read the message from standard input.");
subparser.addArgument("-a", "--attachment").nargs("*").help("Add file as attachment");
subparser.addArgument("-e", "--end-session", "--endsession")
.help("Clear session state and send end session message.")
Expand Down Expand Up @@ -107,16 +111,13 @@ public void handleCommand(
final var sticker = stickerString == null ? null : parseSticker(stickerString);

var messageText = ns.getString("message");
if (messageText == null) {
if (sticker != null) {
messageText = "";
} else {
logger.debug("Reading message from stdin...");
try {
messageText = IOUtils.readAll(System.in, Charset.defaultCharset());
} catch (IOException e) {
throw new UserErrorException("Failed to read message from stdin: " + e.getMessage());
}
final var readMessageFromStdin = ns.getBoolean("message-from-stdin") == Boolean.TRUE;
if (readMessageFromStdin || (messageText == null && sticker == null)) {
logger.debug("Reading message from stdin...");
try {
messageText = IOUtils.readAll(System.in, Charset.defaultCharset());
} catch (IOException e) {
throw new UserErrorException("Failed to read message from stdin: " + e.getMessage());
}
}

Expand Down Expand Up @@ -146,7 +147,7 @@ public void handleCommand(
}

try {
var results = m.sendMessage(new Message(messageText,
var results = m.sendMessage(new Message(messageText == null ? "" : messageText,
attachments,
mentions,
Optional.ofNullable(quote),
Expand Down

0 comments on commit ec945cd

Please sign in to comment.