1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
4 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
6 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
7 import org
.asamk
.signal
.commands
.exceptions
.UnexpectedErrorException
;
8 import org
.asamk
.signal
.commands
.exceptions
.UserErrorException
;
9 import org
.asamk
.signal
.json
.JsonAttachmentData
;
10 import org
.asamk
.signal
.manager
.Manager
;
11 import org
.asamk
.signal
.manager
.api
.StickerPackId
;
12 import org
.asamk
.signal
.output
.JsonWriter
;
13 import org
.asamk
.signal
.output
.OutputWriter
;
14 import org
.asamk
.signal
.output
.PlainTextWriter
;
15 import org
.asamk
.signal
.util
.Hex
;
17 import java
.io
.FileNotFoundException
;
18 import java
.io
.IOException
;
19 import java
.io
.InputStream
;
20 import java
.util
.Base64
;
22 public class GetStickerCommand
implements JsonRpcLocalCommand
{
25 public String
getName() {
30 public void attachToSubparser(final Subparser subparser
) {
31 subparser
.help("Retrieve the sticker of a sticker pack base64 encoded.");
32 subparser
.addArgument("--pack-id").required(true).help("The ID of the sticker pack.");
33 subparser
.addArgument("--sticker-id").type(int.class).required(true).help("The ID of the sticker.");
37 public void handleCommand(
38 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
39 ) throws CommandException
{
41 final var packId
= StickerPackId
.deserialize(Hex
.toByteArray(ns
.getString("pack-id")));
42 final var stickerId
= ns
.getInt("sticker-id");
44 try (InputStream data
= m
.retrieveSticker(packId
, stickerId
)) {
45 final var bytes
= data
.readAllBytes();
46 final var base64
= Base64
.getEncoder().encodeToString(bytes
);
47 switch (outputWriter
) {
48 case PlainTextWriter writer
-> writer
.println(base64
);
49 case JsonWriter writer
-> writer
.write(new JsonAttachmentData(base64
));
51 } catch (FileNotFoundException ex
) {
52 throw new UserErrorException("Could not find sticker with ID: " + stickerId
+ " in pack " + packId
, ex
);
53 } catch (IOException ex
) {
54 throw new UnexpectedErrorException("An error occurred reading sticker with ID: "