+
+ private List<TextStyle> parseTextStyles(
+ final List<String> textStylesStrings
+ ) throws UserErrorException {
+ List<TextStyle> textStyles;
+ final Pattern textStylePattern = Pattern.compile("(\\d+):(\\d+):(.+)");
+ textStyles = new ArrayList<>();
+ for (final var textStyle : textStylesStrings) {
+ final var matcher = textStylePattern.matcher(textStyle);
+ if (!matcher.matches()) {
+ throw new UserErrorException("Invalid textStyle syntax ("
+ + textStyle
+ + ") expected 'start:length:STYLE'");
+ }
+ final var style = TextStyle.Style.from(matcher.group(3));
+ if (style == null) {
+ throw new UserErrorException("Invalid style: " + matcher.group(3));
+ }
+ textStyles.add(new TextStyle(style,
+ Integer.parseInt(matcher.group(1)),
+ Integer.parseInt(matcher.group(2))));
+ }
+ return textStyles;
+ }
+
+ private Message.Sticker parseSticker(final String stickerString) throws UserErrorException {
+ final Pattern stickerPattern = Pattern.compile("([\\da-f]+):(\\d+)");
+ final var matcher = stickerPattern.matcher(stickerString);
+ if (!matcher.matches() || matcher.group(1).length() % 2 != 0) {
+ throw new UserErrorException("Invalid sticker syntax ("
+ + stickerString
+ + ") expected 'stickerPackId:stickerId'");
+ }
+ return new Message.Sticker(Hex.toByteArray(matcher.group(1)), Integer.parseInt(matcher.group(2)));
+ }