+ if (message.sticker().isPresent()) {
+ final var sticker = message.sticker().get();
+ final var packId = StickerPackId.deserialize(sticker.packId());
+ final var stickerId = sticker.stickerId();
+
+ final var stickerPack = context.getAccount().getStickerStore().getStickerPack(packId);
+ if (stickerPack == null || !context.getStickerPackStore().existsStickerPack(packId)) {
+ throw new InvalidStickerException("Sticker pack not found");
+ }
+ final var manifest = context.getStickerPackStore().retrieveManifest(packId);
+ if (manifest.stickers().size() <= stickerId) {
+ throw new InvalidStickerException("Sticker id not part of this pack");
+ }
+ final var manifestSticker = manifest.stickers().get(stickerId);
+ final var streamDetails = context.getStickerPackStore().retrieveSticker(packId, stickerId);
+ if (streamDetails == null) {
+ throw new InvalidStickerException("Missing local sticker file");
+ }
+ messageBuilder.withSticker(new SignalServiceDataMessage.Sticker(packId.serialize(),
+ stickerPack.getPackKey(),
+ stickerId,
+ manifestSticker.emoji(),
+ AttachmentUtils.createAttachment(streamDetails, Optional.absent())));
+ }