Skip to content

Commit

Permalink
Require stickerFormat in CreateNewStickerSet constructor and fix stic…
Browse files Browse the repository at this point in the history
…kers uploading
  • Loading branch information
pengrad committed Apr 5, 2023
1 parent 505f2e4 commit f178490
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 68 deletions.
Expand Up @@ -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) {
Expand Down
@@ -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) {
Expand Down
@@ -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;
Expand All @@ -21,10 +20,8 @@ public AbstractUploadRequest(Class<? extends R> 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);
}
Expand Down
Expand Up @@ -10,7 +10,7 @@
* Stas Parshin
* 23 July 2017
*/
public class CreateNewStickerSet extends AbstractUploadRequest<CreateNewStickerSet, BaseResponse> {
public class CreateNewStickerSet extends BaseRequest<CreateNewStickerSet, BaseResponse> {

/**
* @deprecated Use constructor with the InputSticker type (since API v6.6)
Expand Down Expand Up @@ -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;
}

/**
Expand All @@ -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
*/
Expand All @@ -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
*/
Expand Down
@@ -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;
Expand Down
@@ -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;

/**
Expand All @@ -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());
}


Expand Down
70 changes: 30 additions & 40 deletions library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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));
Expand Down

0 comments on commit f178490

Please sign in to comment.