diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java index 263063bd..3b5adb52 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java @@ -17,7 +17,7 @@ public enum Point { private Float x_shift, y_shift; private Float scale; - public MaskPosition() { + MaskPosition() { } public MaskPosition(Point point, Float x_shift, Float y_shift, Float scale) { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputSticker.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSticker.java index c1ca459d..22834c2e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputSticker.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSticker.java @@ -1,21 +1,38 @@ package com.pengrad.telegrambot.model.request; -import java.io.Serializable; - +import com.pengrad.telegrambot.AttachName; import com.pengrad.telegrambot.model.MaskPosition; +import java.io.Serializable; + public class InputSticker implements Serializable { private final static long serialVersionUID = 0L; - - private Object sticker; + + private String sticker; private String[] emoji_list; private MaskPosition mask_position; private String[] keywords; + transient private String attachName; + transient private Object attach; public InputSticker(Object sticker, String[] emojiList) { - this.sticker = sticker; this.emoji_list = emojiList; + if (sticker instanceof String) { + this.sticker = (String) sticker; + } else { + attach = sticker; + attachName = AttachName.next(); + this.sticker = "attach://" + attachName; + } + } + + public String getAttachName() { + return attachName; + } + + public Object getAttachment() { + return attach; } public InputSticker maskPosition(MaskPosition maskPosition) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java b/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java index cb8ed6c7..21401d3a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java @@ -1,6 +1,5 @@ package com.pengrad.telegrambot.request; -import com.pengrad.telegrambot.model.request.InputSticker; import com.pengrad.telegrambot.response.BaseResponse; import java.io.File; @@ -21,10 +20,8 @@ public AbstractUploadRequest(Class responseClass, String paramName, isMultipart = true; } else if (data instanceof byte[]) { isMultipart = true; - } else if (data instanceof InputSticker) { - isMultipart = true; } else { - throw new IllegalArgumentException("Sending data should be String, File, InputSticker or byte[]"); + throw new IllegalArgumentException("Sending data should be String, File or byte[]"); } add(paramName, data); } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java index 8c19ff43..0510dbfc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java @@ -10,7 +10,7 @@ * Stas Parshin * 23 July 2017 */ -public class CreateNewStickerSet extends AbstractUploadRequest { +public class CreateNewStickerSet extends BaseRequest { /** * @deprecated Use constructor with the InputSticker type (since API v6.6) @@ -49,18 +49,31 @@ public CreateNewStickerSet(Long userId, String name, String title, Object pngSti */ @Deprecated private CreateNewStickerSet(Long userId, String name, String title, String emojis, String stickerParam, Object sticker) { - super(BaseResponse.class, stickerParam, sticker); + super(BaseResponse.class); + add(stickerParam, sticker); add("user_id", userId); add("name", name); add("title", title); add("emojis", emojis); } - public CreateNewStickerSet(Long userId, String name, String title, InputSticker[] stickers) { - super(BaseResponse.class, "stickers", stickers); + public CreateNewStickerSet(Long userId, String name, String title, InputSticker[] stickers, Format stickerFormat) { + super(BaseResponse.class); add("user_id", userId); add("name", name); add("title", title); + add("stickers", stickers); + add("sticker_format", stickerFormat.name().toLowerCase()); + for (InputSticker sticker : stickers) { + if (sticker.getAttachment() != null) { + add(sticker.getAttachName(), sticker.getAttachment()); + } + } + } + + @Override + public boolean isMultipart() { + return true; } /** @@ -79,18 +92,10 @@ public CreateNewStickerSet maskPosition(MaskPosition maskPosition) { return add("mask_position", maskPosition); } - /** - * Format of stickers in the set. - * @param stickerFormat must be one of “static”, “animated”, “video”. - * @return a CreateNewStickerSet object - */ - public CreateNewStickerSet stickerFormat(Format stickerFormat) { - return add("sticker_format", stickerFormat.name()); - } - /** * Type of stickers in the set. + * * @param stickerType pass “regular” or “mask”. "custom_emoji" is defaulted to "regular". * @return a CreateNewStickerSet object */ @@ -99,7 +104,6 @@ public CreateNewStickerSet stickerType(Type stickerType) { } /** - * * @param needsRepainting Pass True if stickers in the sticker set must be repainted to the color of text when used in messages, the accent color if used as emoji status, white on chat photos, or another appropriate color based on context; for custom emoji sticker sets only. * @return a CreateNewStickerSet object */ diff --git a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java index 06e2a787..3794733f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.request; import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; -import com.pengrad.telegrambot.model.request.InputFile; import com.pengrad.telegrambot.model.request.InputMedia; import com.pengrad.telegrambot.response.BaseResponse; import com.pengrad.telegrambot.response.SendResponse; diff --git a/library/src/main/java/com/pengrad/telegrambot/request/UploadStickerFile.java b/library/src/main/java/com/pengrad/telegrambot/request/UploadStickerFile.java index 5032b3ce..08a607c0 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/UploadStickerFile.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/UploadStickerFile.java @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.request; import com.pengrad.telegrambot.model.Sticker.Format; -import com.pengrad.telegrambot.model.request.InputFile; import com.pengrad.telegrambot.response.GetFileResponse; /** @@ -22,10 +21,10 @@ public UploadStickerFile(Long userId, Object pngSticker) { /** * @param stickerFormat must be one of “static”, “animated”, “video”. */ - public UploadStickerFile(Long userId, InputFile sticker, Format stickerFormat) { + public UploadStickerFile(Long userId, Object sticker, Format stickerFormat) { super(GetFileResponse.class, "sticker", sticker); add("user_id", userId); - add("sticker_format", stickerFormat.name()); + add("sticker_format", stickerFormat.name().toLowerCase()); } diff --git a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java index 9c43c02c..13cc492b 100644 --- a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java @@ -19,46 +19,7 @@ import com.pengrad.telegrambot.impl.TelegramBotClient; import com.pengrad.telegrambot.model.*; import com.pengrad.telegrambot.model.botcommandscope.BotCommandScopeAllChatAdministrators; -import com.pengrad.telegrambot.model.request.ChatAction; -import com.pengrad.telegrambot.model.request.ForceReply; -import com.pengrad.telegrambot.model.request.InlineKeyboardButton; -import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; -import com.pengrad.telegrambot.model.request.InlineQueryResult; -import com.pengrad.telegrambot.model.request.InlineQueryResultArticle; -import com.pengrad.telegrambot.model.request.InlineQueryResultAudio; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedAudio; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedDocument; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedGif; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedMpeg4Gif; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedPhoto; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedSticker; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedVideo; -import com.pengrad.telegrambot.model.request.InlineQueryResultCachedVoice; -import com.pengrad.telegrambot.model.request.InlineQueryResultContact; -import com.pengrad.telegrambot.model.request.InlineQueryResultDocument; -import com.pengrad.telegrambot.model.request.InlineQueryResultGame; -import com.pengrad.telegrambot.model.request.InlineQueryResultGif; -import com.pengrad.telegrambot.model.request.InlineQueryResultLocation; -import com.pengrad.telegrambot.model.request.InlineQueryResultMpeg4Gif; -import com.pengrad.telegrambot.model.request.InlineQueryResultPhoto; -import com.pengrad.telegrambot.model.request.InlineQueryResultVenue; -import com.pengrad.telegrambot.model.request.InlineQueryResultVideo; -import com.pengrad.telegrambot.model.request.InlineQueryResultVoice; -import com.pengrad.telegrambot.model.request.InputContactMessageContent; -import com.pengrad.telegrambot.model.request.InputLocationMessageContent; -import com.pengrad.telegrambot.model.request.InputMediaAnimation; -import com.pengrad.telegrambot.model.request.InputMediaAudio; -import com.pengrad.telegrambot.model.request.InputMediaDocument; -import com.pengrad.telegrambot.model.request.InputMediaPhoto; -import com.pengrad.telegrambot.model.request.InputMediaVideo; -import com.pengrad.telegrambot.model.request.InputTextMessageContent; -import com.pengrad.telegrambot.model.request.InputVenueMessageContent; -import com.pengrad.telegrambot.model.request.KeyboardButton; -import com.pengrad.telegrambot.model.request.KeyboardButtonPollType; -import com.pengrad.telegrambot.model.request.LoginUrl; -import com.pengrad.telegrambot.model.request.ParseMode; -import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup; -import com.pengrad.telegrambot.model.request.ReplyKeyboardRemove; +import com.pengrad.telegrambot.model.request.*; import com.pengrad.telegrambot.passport.Credentials; import com.pengrad.telegrambot.passport.EncryptedPassportElement; import com.pengrad.telegrambot.passport.PassportData; @@ -1365,6 +1326,9 @@ public void uploadStickerFile() throws IOException { byte[] bytes = Files.readAllBytes(stickerFile.toPath()); GetFileResponse response = bot.execute(new UploadStickerFile(chatId, bytes)); FileTest.check(response.file(), false); + + response = bot.execute(new UploadStickerFile(chatId, bytes, Sticker.Format.Static)); + FileTest.check(response.file(), false); } @Test @@ -1412,6 +1376,32 @@ public void createSetAndAddStickerTgs() { assertTrue(response.isOk()); } + @Test + public void createNewStickerSet() { + String setName = "testNEW" + System.currentTimeMillis() + "_by_pengrad_test_bot"; + String title = "test112312312"; + BaseResponse response = bot.execute( + new CreateNewStickerSet(chatId, setName, title, new InputSticker[]{ + new InputSticker(stickerFile, new String[]{"\uD83D\uDE00"}) + .keywords(new String[]{"yes", "no"}) + .maskPosition(new MaskPosition(MaskPosition.Point.forehead, 10f, 20f, 1f)) + }, Sticker.Format.Static) + .needsRepainting(false)); + assertTrue(response.isOk()); + + StickerSet set = bot.execute(new GetStickerSet(setName)).stickerSet(); + assertEquals(setName, set.name()); + assertEquals(title, set.title()); + assertFalse(set.isVideo()); + Sticker[] stickers = set.stickers(); + assertEquals(1, stickers.length); + assertEquals("\uD83D\uDE00", stickers[0].emoji()); + assertFalse(stickers[0].isVideo()); + assertNull(stickers[0].needsRepainting()); + assertNull(stickers[0].premiumAnimation()); + assertNull(stickers[0].customEmojiId()); + } + @Test public void setStickerPositionInSet() { GetStickerSetResponse setResponse = bot.execute(new GetStickerSet(stickerSet));