Skip to content

Commit f178490

Browse files
committed
Require stickerFormat in CreateNewStickerSet constructor and fix stickers uploading
1 parent 505f2e4 commit f178490

File tree

7 files changed

+74
-68
lines changed

7 files changed

+74
-68
lines changed

library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public enum Point {
1717
private Float x_shift, y_shift;
1818
private Float scale;
1919

20-
public MaskPosition() {
20+
MaskPosition() {
2121
}
2222

2323
public MaskPosition(Point point, Float x_shift, Float y_shift, Float scale) {

library/src/main/java/com/pengrad/telegrambot/model/request/InputSticker.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
11
package com.pengrad.telegrambot.model.request;
22

3-
import java.io.Serializable;
4-
3+
import com.pengrad.telegrambot.AttachName;
54
import com.pengrad.telegrambot.model.MaskPosition;
65

6+
import java.io.Serializable;
7+
78
public class InputSticker implements Serializable {
89

910
private final static long serialVersionUID = 0L;
10-
11-
private Object sticker;
11+
12+
private String sticker;
1213
private String[] emoji_list;
1314
private MaskPosition mask_position;
1415
private String[] keywords;
16+
transient private String attachName;
17+
transient private Object attach;
1518

1619
public InputSticker(Object sticker, String[] emojiList) {
17-
this.sticker = sticker;
1820
this.emoji_list = emojiList;
21+
if (sticker instanceof String) {
22+
this.sticker = (String) sticker;
23+
} else {
24+
attach = sticker;
25+
attachName = AttachName.next();
26+
this.sticker = "attach://" + attachName;
27+
}
28+
}
29+
30+
public String getAttachName() {
31+
return attachName;
32+
}
33+
34+
public Object getAttachment() {
35+
return attach;
1936
}
2037

2138
public InputSticker maskPosition(MaskPosition maskPosition) {

library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.pengrad.telegrambot.request;
22

3-
import com.pengrad.telegrambot.model.request.InputSticker;
43
import com.pengrad.telegrambot.response.BaseResponse;
54

65
import java.io.File;
@@ -21,10 +20,8 @@ public AbstractUploadRequest(Class<? extends R> responseClass, String paramName,
2120
isMultipart = true;
2221
} else if (data instanceof byte[]) {
2322
isMultipart = true;
24-
} else if (data instanceof InputSticker) {
25-
isMultipart = true;
2623
} else {
27-
throw new IllegalArgumentException("Sending data should be String, File, InputSticker or byte[]");
24+
throw new IllegalArgumentException("Sending data should be String, File or byte[]");
2825
}
2926
add(paramName, data);
3027
}

library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Stas Parshin
1111
* 23 July 2017
1212
*/
13-
public class CreateNewStickerSet extends AbstractUploadRequest<CreateNewStickerSet, BaseResponse> {
13+
public class CreateNewStickerSet extends BaseRequest<CreateNewStickerSet, BaseResponse> {
1414

1515
/**
1616
* @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
4949
*/
5050
@Deprecated
5151
private CreateNewStickerSet(Long userId, String name, String title, String emojis, String stickerParam, Object sticker) {
52-
super(BaseResponse.class, stickerParam, sticker);
52+
super(BaseResponse.class);
53+
add(stickerParam, sticker);
5354
add("user_id", userId);
5455
add("name", name);
5556
add("title", title);
5657
add("emojis", emojis);
5758
}
5859

59-
public CreateNewStickerSet(Long userId, String name, String title, InputSticker[] stickers) {
60-
super(BaseResponse.class, "stickers", stickers);
60+
public CreateNewStickerSet(Long userId, String name, String title, InputSticker[] stickers, Format stickerFormat) {
61+
super(BaseResponse.class);
6162
add("user_id", userId);
6263
add("name", name);
6364
add("title", title);
65+
add("stickers", stickers);
66+
add("sticker_format", stickerFormat.name().toLowerCase());
67+
for (InputSticker sticker : stickers) {
68+
if (sticker.getAttachment() != null) {
69+
add(sticker.getAttachName(), sticker.getAttachment());
70+
}
71+
}
72+
}
73+
74+
@Override
75+
public boolean isMultipart() {
76+
return true;
6477
}
6578

6679
/**
@@ -79,18 +92,10 @@ public CreateNewStickerSet maskPosition(MaskPosition maskPosition) {
7992
return add("mask_position", maskPosition);
8093
}
8194

82-
/**
83-
* Format of stickers in the set.
84-
* @param stickerFormat must be one of “static”, “animated”, “video”.
85-
* @return a CreateNewStickerSet object
86-
*/
87-
public CreateNewStickerSet stickerFormat(Format stickerFormat) {
88-
return add("sticker_format", stickerFormat.name());
89-
}
90-
9195

9296
/**
9397
* Type of stickers in the set.
98+
*
9499
* @param stickerType pass “regular” or “mask”. "custom_emoji" is defaulted to "regular".
95100
* @return a CreateNewStickerSet object
96101
*/
@@ -99,7 +104,6 @@ public CreateNewStickerSet stickerType(Type stickerType) {
99104
}
100105

101106
/**
102-
*
103107
* @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.
104108
* @return a CreateNewStickerSet object
105109
*/

library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.pengrad.telegrambot.request;
22

33
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
4-
import com.pengrad.telegrambot.model.request.InputFile;
54
import com.pengrad.telegrambot.model.request.InputMedia;
65
import com.pengrad.telegrambot.response.BaseResponse;
76
import com.pengrad.telegrambot.response.SendResponse;

library/src/main/java/com/pengrad/telegrambot/request/UploadStickerFile.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.pengrad.telegrambot.request;
22

33
import com.pengrad.telegrambot.model.Sticker.Format;
4-
import com.pengrad.telegrambot.model.request.InputFile;
54
import com.pengrad.telegrambot.response.GetFileResponse;
65

76
/**
@@ -22,10 +21,10 @@ public UploadStickerFile(Long userId, Object pngSticker) {
2221
/**
2322
* @param stickerFormat must be one of “static”, “animated”, “video”.
2423
*/
25-
public UploadStickerFile(Long userId, InputFile sticker, Format stickerFormat) {
24+
public UploadStickerFile(Long userId, Object sticker, Format stickerFormat) {
2625
super(GetFileResponse.class, "sticker", sticker);
2726
add("user_id", userId);
28-
add("sticker_format", stickerFormat.name());
27+
add("sticker_format", stickerFormat.name().toLowerCase());
2928
}
3029

3130

library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -19,46 +19,7 @@
1919
import com.pengrad.telegrambot.impl.TelegramBotClient;
2020
import com.pengrad.telegrambot.model.*;
2121
import com.pengrad.telegrambot.model.botcommandscope.BotCommandScopeAllChatAdministrators;
22-
import com.pengrad.telegrambot.model.request.ChatAction;
23-
import com.pengrad.telegrambot.model.request.ForceReply;
24-
import com.pengrad.telegrambot.model.request.InlineKeyboardButton;
25-
import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup;
26-
import com.pengrad.telegrambot.model.request.InlineQueryResult;
27-
import com.pengrad.telegrambot.model.request.InlineQueryResultArticle;
28-
import com.pengrad.telegrambot.model.request.InlineQueryResultAudio;
29-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedAudio;
30-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedDocument;
31-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedGif;
32-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedMpeg4Gif;
33-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedPhoto;
34-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedSticker;
35-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedVideo;
36-
import com.pengrad.telegrambot.model.request.InlineQueryResultCachedVoice;
37-
import com.pengrad.telegrambot.model.request.InlineQueryResultContact;
38-
import com.pengrad.telegrambot.model.request.InlineQueryResultDocument;
39-
import com.pengrad.telegrambot.model.request.InlineQueryResultGame;
40-
import com.pengrad.telegrambot.model.request.InlineQueryResultGif;
41-
import com.pengrad.telegrambot.model.request.InlineQueryResultLocation;
42-
import com.pengrad.telegrambot.model.request.InlineQueryResultMpeg4Gif;
43-
import com.pengrad.telegrambot.model.request.InlineQueryResultPhoto;
44-
import com.pengrad.telegrambot.model.request.InlineQueryResultVenue;
45-
import com.pengrad.telegrambot.model.request.InlineQueryResultVideo;
46-
import com.pengrad.telegrambot.model.request.InlineQueryResultVoice;
47-
import com.pengrad.telegrambot.model.request.InputContactMessageContent;
48-
import com.pengrad.telegrambot.model.request.InputLocationMessageContent;
49-
import com.pengrad.telegrambot.model.request.InputMediaAnimation;
50-
import com.pengrad.telegrambot.model.request.InputMediaAudio;
51-
import com.pengrad.telegrambot.model.request.InputMediaDocument;
52-
import com.pengrad.telegrambot.model.request.InputMediaPhoto;
53-
import com.pengrad.telegrambot.model.request.InputMediaVideo;
54-
import com.pengrad.telegrambot.model.request.InputTextMessageContent;
55-
import com.pengrad.telegrambot.model.request.InputVenueMessageContent;
56-
import com.pengrad.telegrambot.model.request.KeyboardButton;
57-
import com.pengrad.telegrambot.model.request.KeyboardButtonPollType;
58-
import com.pengrad.telegrambot.model.request.LoginUrl;
59-
import com.pengrad.telegrambot.model.request.ParseMode;
60-
import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup;
61-
import com.pengrad.telegrambot.model.request.ReplyKeyboardRemove;
22+
import com.pengrad.telegrambot.model.request.*;
6223
import com.pengrad.telegrambot.passport.Credentials;
6324
import com.pengrad.telegrambot.passport.EncryptedPassportElement;
6425
import com.pengrad.telegrambot.passport.PassportData;
@@ -1365,6 +1326,9 @@ public void uploadStickerFile() throws IOException {
13651326
byte[] bytes = Files.readAllBytes(stickerFile.toPath());
13661327
GetFileResponse response = bot.execute(new UploadStickerFile(chatId, bytes));
13671328
FileTest.check(response.file(), false);
1329+
1330+
response = bot.execute(new UploadStickerFile(chatId, bytes, Sticker.Format.Static));
1331+
FileTest.check(response.file(), false);
13681332
}
13691333

13701334
@Test
@@ -1412,6 +1376,32 @@ public void createSetAndAddStickerTgs() {
14121376
assertTrue(response.isOk());
14131377
}
14141378

1379+
@Test
1380+
public void createNewStickerSet() {
1381+
String setName = "testNEW" + System.currentTimeMillis() + "_by_pengrad_test_bot";
1382+
String title = "test112312312";
1383+
BaseResponse response = bot.execute(
1384+
new CreateNewStickerSet(chatId, setName, title, new InputSticker[]{
1385+
new InputSticker(stickerFile, new String[]{"\uD83D\uDE00"})
1386+
.keywords(new String[]{"yes", "no"})
1387+
.maskPosition(new MaskPosition(MaskPosition.Point.forehead, 10f, 20f, 1f))
1388+
}, Sticker.Format.Static)
1389+
.needsRepainting(false));
1390+
assertTrue(response.isOk());
1391+
1392+
StickerSet set = bot.execute(new GetStickerSet(setName)).stickerSet();
1393+
assertEquals(setName, set.name());
1394+
assertEquals(title, set.title());
1395+
assertFalse(set.isVideo());
1396+
Sticker[] stickers = set.stickers();
1397+
assertEquals(1, stickers.length);
1398+
assertEquals("\uD83D\uDE00", stickers[0].emoji());
1399+
assertFalse(stickers[0].isVideo());
1400+
assertNull(stickers[0].needsRepainting());
1401+
assertNull(stickers[0].premiumAnimation());
1402+
assertNull(stickers[0].customEmojiId());
1403+
}
1404+
14151405
@Test
14161406
public void setStickerPositionInSet() {
14171407
GetStickerSetResponse setResponse = bot.execute(new GetStickerSet(stickerSet));

0 commit comments

Comments
 (0)