Merge remote-tracking branch 'github/dev'
This commit is contained in:
commit
a1cab968c6
@ -1,7 +1,7 @@
|
|||||||
So, you just wanna program your own Telegram bot with TelegramBots? Let's see the fast version.
|
So, you’d like to create your own Telegram bot with TelegramBots? Then Let's get You started quickly.
|
||||||
|
|
||||||
## Grab the library
|
## Grab the library
|
||||||
First you need ot get the library and add it to your project. There are few possibilities for this:
|
First you need to acquire the library and add it to your project. There are several ways to do this:
|
||||||
|
|
||||||
1. If you use [Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), etc; you should be able to import the dependency directly from [Maven Central Repository](http://mvnrepository.com/artifact/org.telegram/telegrambots). For example:
|
1. If you use [Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), etc; you should be able to import the dependency directly from [Maven Central Repository](http://mvnrepository.com/artifact/org.telegram/telegrambots). For example:
|
||||||
|
|
||||||
@ -20,14 +20,14 @@ First you need ot get the library and add it to your project. There are few poss
|
|||||||
implementation 'org.telegram:telegrambots:6.1.0'
|
implementation 'org.telegram:telegrambots:6.1.0'
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Don't like **Maven Central Repository**? It can also be taken from [Jitpack](https://jitpack.io/#rubenlagus/TelegramBots).
|
2. Don't like the **Maven Central Repository**? It can also be grabbed from [Jitpack](https://jitpack.io/#rubenlagus/TelegramBots).
|
||||||
3. Import the library *.jar* direclty to your project. You can find it [here](https://github.com/rubenlagus/TelegramBots/releases), don't forget to take last version, it usually is a good idea. Depending on the IDE you are using, the process to add a library is different, here is a video that may help with [Intellij](https://www.youtube.com/watch?v=NZaH4tjwMYg) or [Eclipse](https://www.youtube.com/watch?v=VWnfHkBgO1I)
|
3. Import the library *.jar* direclty to your project. You can find it [here](https://github.com/rubenlagus/TelegramBots/releases), don't forget to fetch the latest version, it usually is a good idea. Depending on the IDE you are using, the process to add a library is different, here is a video that may help with [Intellij](https://www.youtube.com/watch?v=NZaH4tjwMYg) or [Eclipse](https://www.youtube.com/watch?v=VWnfHkBgO1I)
|
||||||
|
|
||||||
|
|
||||||
## Build our first bot
|
## Building your first bot
|
||||||
Now that we have the library, we can start coding. There are few steps to follow, in this tutorial (for the sake of simplicity), we are going to build a [Long Polling Bot](http://en.wikipedia.org/wiki/Push_technology#Long_polling):
|
Now that you have the library, you can start coding. There are few steps to follow, in this tutorial (for the sake of simplicity), we are going to build a [Long Polling Bot](http://en.wikipedia.org/wiki/Push_technology#Long_polling):
|
||||||
|
|
||||||
1. **Create your actual bot:**
|
1. **Creating your actual bot:**
|
||||||
The class must extends `TelegramLongPollingBot` and implement necessary methods:
|
The class must extends `TelegramLongPollingBot` and implement necessary methods:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@ -99,7 +99,7 @@ Now that we have the library, we can start coding. There are few steps to follow
|
|||||||
```
|
```
|
||||||
|
|
||||||
2. **Instantiate `TelegramBotsApi` and register our new bot:**
|
2. **Instantiate `TelegramBotsApi` and register our new bot:**
|
||||||
For this part, we need to actually perform 2 steps: _Instantiate Telegram Api_ and _Register our Bot_. In this tutorial, we are going to make it in our `main` method:
|
For this part, we need to actually perform 2 steps: _Instantiate Telegram Api_ and _Register our Bot_. In this tutorial, we are going to do it in our `main` method:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
|
||||||
<shiro.version>1.9.0</shiro.version>
|
<shiro.version>1.9.1</shiro.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@ -25,7 +25,7 @@ import java.util.List;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
* Use this method to copy messages of any kind.
|
* Use this method to copy messages of any kind.
|
||||||
* Service messages and invoice messages can't be copied.
|
* Service messages and invoice messages can't be copied.
|
||||||
*
|
* A quiz poll can be copied only if the value of the field correct_option_id is known to the bot.
|
||||||
* The method is analogous to the method forwardMessage, but the copied message doesn't have a link to the original message.
|
* The method is analogous to the method forwardMessage, but the copied message doesn't have a link to the original message.
|
||||||
* Returns the MessageId of the sent message on success.
|
* Returns the MessageId of the sent message on success.
|
||||||
*/
|
*/
|
||||||
|
@ -64,11 +64,11 @@ public class GetGameHighScores extends BotApiMethod<ArrayList<GameHighScore>> {
|
|||||||
private static final String USER_ID_FIELD = "user_id";
|
private static final String USER_ID_FIELD = "user_id";
|
||||||
|
|
||||||
@JsonProperty(CHATID_FIELD)
|
@JsonProperty(CHATID_FIELD)
|
||||||
private String chatId; ///< Optional Required if inline_message_id is not specified. Unique identifier for the target chat (or username of the target channel in the format @channelusername)
|
private String chatId; ///< Optional. Required if inline_message_id is not specified. Unique identifier for the target chat (or username of the target channel in the format @channelusername)
|
||||||
@JsonProperty(MESSAGEID_FIELD)
|
@JsonProperty(MESSAGEID_FIELD)
|
||||||
private Integer messageId; ///< Optional Required if inline_message_id is not specified. Unique identifier of the sent message
|
private Integer messageId; ///< Optional. Required if inline_message_id is not specified. Unique identifier of the sent message
|
||||||
@JsonProperty(INLINE_MESSAGE_ID_FIELD)
|
@JsonProperty(INLINE_MESSAGE_ID_FIELD)
|
||||||
private String inlineMessageId; ///< Optional Required if chat_id and message_id are not specified. Identifier of the inline message
|
private String inlineMessageId; ///< Optional. Required if chat_id and message_id are not specified. Identifier of the inline message
|
||||||
@JsonProperty(USER_ID_FIELD)
|
@JsonProperty(USER_ID_FIELD)
|
||||||
@NonNull
|
@NonNull
|
||||||
private Long userId; ///<Target user id
|
private Long userId; ///<Target user id
|
||||||
|
@ -14,6 +14,7 @@ import lombok.Setter;
|
|||||||
import lombok.Singular;
|
import lombok.Singular;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.botapimethods.BotApiMethodMessage;
|
||||||
import org.telegram.telegrambots.meta.api.objects.ApiResponse;
|
import org.telegram.telegrambots.meta.api.objects.ApiResponse;
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
import org.telegram.telegrambots.meta.api.objects.payments.LabeledPrice;
|
import org.telegram.telegrambots.meta.api.objects.payments.LabeledPrice;
|
||||||
@ -36,7 +37,7 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Builder
|
@Builder
|
||||||
public class CreateInvoiceLink extends BotApiMethod<Message> {
|
public class CreateInvoiceLink extends BotApiMethodMessage {
|
||||||
public static final String PATH = "createInvoiceLink";
|
public static final String PATH = "createInvoiceLink";
|
||||||
|
|
||||||
public static final String TITLE_FIELD = "title";
|
public static final String TITLE_FIELD = "title";
|
||||||
@ -135,21 +136,6 @@ public class CreateInvoiceLink extends BotApiMethod<Message> {
|
|||||||
return PATH;
|
return PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Message deserializeResponse(String answer) throws TelegramApiRequestException {
|
|
||||||
try {
|
|
||||||
ApiResponse<Message> result = OBJECT_MAPPER.readValue(answer,
|
|
||||||
new TypeReference<ApiResponse<Message>>(){});
|
|
||||||
if (result.getOk()) {
|
|
||||||
return result.getResult();
|
|
||||||
} else {
|
|
||||||
throw new TelegramApiRequestException("Error sending invoice", result);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new TelegramApiRequestException("Unable to deserialize response", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate() throws TelegramApiValidationException {
|
public void validate() throws TelegramApiValidationException {
|
||||||
if (Strings.isNullOrEmpty(title) || title.length() > 32) {
|
if (Strings.isNullOrEmpty(title) || title.length() > 32) {
|
||||||
|
@ -15,6 +15,7 @@ import lombok.Singular;
|
|||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import lombok.experimental.Tolerate;
|
import lombok.experimental.Tolerate;
|
||||||
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.botapimethods.BotApiMethodMessage;
|
||||||
import org.telegram.telegrambots.meta.api.objects.ApiResponse;
|
import org.telegram.telegrambots.meta.api.objects.ApiResponse;
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
import org.telegram.telegrambots.meta.api.objects.payments.LabeledPrice;
|
import org.telegram.telegrambots.meta.api.objects.payments.LabeledPrice;
|
||||||
@ -38,7 +39,7 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Builder
|
@Builder
|
||||||
public class SendInvoice extends BotApiMethod<Message> {
|
public class SendInvoice extends BotApiMethodMessage {
|
||||||
public static final String PATH = "sendinvoice";
|
public static final String PATH = "sendinvoice";
|
||||||
|
|
||||||
private static final String CHATID_FIELD = "chat_id";
|
private static final String CHATID_FIELD = "chat_id";
|
||||||
@ -176,21 +177,6 @@ public class SendInvoice extends BotApiMethod<Message> {
|
|||||||
return PATH;
|
return PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Message deserializeResponse(String answer) throws TelegramApiRequestException {
|
|
||||||
try {
|
|
||||||
ApiResponse<Message> result = OBJECT_MAPPER.readValue(answer,
|
|
||||||
new TypeReference<ApiResponse<Message>>(){});
|
|
||||||
if (result.getOk()) {
|
|
||||||
return result.getResult();
|
|
||||||
} else {
|
|
||||||
throw new TelegramApiRequestException("Error sending invoice", result);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new TelegramApiRequestException("Unable to deserialize response", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void validate() throws TelegramApiValidationException {
|
public void validate() throws TelegramApiValidationException {
|
||||||
if (Strings.isNullOrEmpty(chatId)) {
|
if (Strings.isNullOrEmpty(chatId)) {
|
||||||
|
@ -9,12 +9,17 @@ import lombok.NonNull;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
import lombok.experimental.Tolerate;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.CopyMessage;
|
||||||
import org.telegram.telegrambots.meta.api.methods.PartialBotApiMethod;
|
import org.telegram.telegrambots.meta.api.methods.PartialBotApiMethod;
|
||||||
import org.telegram.telegrambots.meta.api.objects.InputFile;
|
import org.telegram.telegrambots.meta.api.objects.InputFile;
|
||||||
import org.telegram.telegrambots.meta.api.objects.stickers.MaskPosition;
|
import org.telegram.telegrambots.meta.api.objects.stickers.MaskPosition;
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
||||||
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Ruben Bermudez
|
* @author Ruben Bermudez
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@ -36,6 +41,8 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
|
|
||||||
public static final String USERID_FIELD = "user_id";
|
public static final String USERID_FIELD = "user_id";
|
||||||
public static final String NAME_FIELD = "name";
|
public static final String NAME_FIELD = "name";
|
||||||
|
public static final String STICKERTYPE_FIELD = "sticker_type";
|
||||||
|
|
||||||
public static final String TITLE_FIELD = "title";
|
public static final String TITLE_FIELD = "title";
|
||||||
public static final String PNGSTICKER_FIELD = "png_sticker";
|
public static final String PNGSTICKER_FIELD = "png_sticker";
|
||||||
public static final String TGSSTICKER_FIELD = "tgs_sticker";
|
public static final String TGSSTICKER_FIELD = "tgs_sticker";
|
||||||
@ -46,6 +53,13 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private Long userId; ///< User identifier of created sticker set owner
|
private Long userId; ///< User identifier of created sticker set owner
|
||||||
|
/**
|
||||||
|
* Type of stickers in the set, pass “regular” or “mask”.
|
||||||
|
* Custom emoji sticker sets can't be created via the Bot API at the moment.
|
||||||
|
* By default, a regular sticker set is created.
|
||||||
|
*/
|
||||||
|
@Builder.Default
|
||||||
|
private String stickerType = "regular";
|
||||||
/**
|
/**
|
||||||
* Name of sticker set, to be used in t.me/addstickers/<name> URLs.
|
* Name of sticker set, to be used in t.me/addstickers/<name> URLs.
|
||||||
* Can contain only english letters, digits and underscores.
|
* Can contain only english letters, digits and underscores.
|
||||||
@ -58,7 +72,6 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
private String title; ///< User identifier of created sticker set owner
|
private String title; ///< User identifier of created sticker set owner
|
||||||
@NonNull
|
@NonNull
|
||||||
private String emojis; ///< One or more emoji corresponding to the sticker
|
private String emojis; ///< One or more emoji corresponding to the sticker
|
||||||
private Boolean containsMasks; ///< Optional. Pass True, if a set of mask stickers should be created
|
|
||||||
private MaskPosition maskPosition; ///< Optional. Position where the mask should be placed on faces
|
private MaskPosition maskPosition; ///< Optional. Position where the mask should be placed on faces
|
||||||
/**
|
/**
|
||||||
* Optional.
|
* Optional.
|
||||||
@ -84,6 +97,33 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
*/
|
*/
|
||||||
private InputFile webmSticker;
|
private InputFile webmSticker;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #setStickerType(String)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void setContainsMasks(boolean containsMasks) {
|
||||||
|
if (containsMasks) {
|
||||||
|
this.stickerType = "mask";
|
||||||
|
} else {
|
||||||
|
this.stickerType = "regular";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #getStickerType()} or {@link #isMask()}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public Boolean getContainsMasks() {
|
||||||
|
return isMask();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRegularSticker() {
|
||||||
|
return "regular".equals(stickerType);
|
||||||
|
}
|
||||||
|
public boolean isMask() {
|
||||||
|
return "mask".equals(stickerType);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean deserializeResponse(String answer) throws TelegramApiRequestException {
|
public Boolean deserializeResponse(String answer) throws TelegramApiRequestException {
|
||||||
return deserializeResponse(answer, Boolean.class);
|
return deserializeResponse(answer, Boolean.class);
|
||||||
@ -94,6 +134,9 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
if (userId <= 0) {
|
if (userId <= 0) {
|
||||||
throw new TelegramApiValidationException("userId can't be empty", this);
|
throw new TelegramApiValidationException("userId can't be empty", this);
|
||||||
}
|
}
|
||||||
|
if (!Arrays.asList("regular", "mask").contains(stickerType)) {
|
||||||
|
throw new TelegramApiValidationException("Stickertype must be 'regular' or 'mask'", this);
|
||||||
|
}
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
throw new TelegramApiValidationException("name can't be empty", this);
|
throw new TelegramApiValidationException("name can't be empty", this);
|
||||||
}
|
}
|
||||||
@ -129,4 +172,20 @@ public class CreateNewStickerSet extends PartialBotApiMethod<Boolean> {
|
|||||||
maskPosition.validate();
|
maskPosition.validate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class CreateNewStickerSetBuilder {
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #stickerType(String)} or {@link #setStickerType(String)}
|
||||||
|
*/
|
||||||
|
@Tolerate
|
||||||
|
@Deprecated
|
||||||
|
public CreateNewStickerSet.CreateNewStickerSetBuilder containsMasks(@NonNull Boolean containsMasks) {
|
||||||
|
if (containsMasks) {
|
||||||
|
this.stickerType("mask");
|
||||||
|
} else {
|
||||||
|
this.stickerType("regular");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package org.telegram.telegrambots.meta.api.methods.stickers;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.*;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.botapimethods.BotApiMethodBoolean;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.games.GameHighScore;
|
||||||
|
import org.telegram.telegrambots.meta.api.objects.stickers.Sticker;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
|
||||||
|
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Ruben Bermudez
|
||||||
|
* @version 6.2
|
||||||
|
* Use this method to get information about emoji stickers by their identifiers.
|
||||||
|
* Returns an Array of Sticker on success.
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class GetCustomEmojiStickers extends BotApiMethod<ArrayList<Sticker>> {
|
||||||
|
private static final String PATH = "getCustomEmojiStickers";
|
||||||
|
|
||||||
|
private static final String CUSTOMEMOJIID_FIELD = "custom_emoji_ids";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of custom emoji identifiers.
|
||||||
|
* At most 200 custom emoji identifiers can be specified.
|
||||||
|
*/
|
||||||
|
@Singular
|
||||||
|
@JsonProperty(CUSTOMEMOJIID_FIELD)
|
||||||
|
private List<String> customEmojiIds;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate() throws TelegramApiValidationException {
|
||||||
|
if (customEmojiIds == null || customEmojiIds.isEmpty() || customEmojiIds.size() > 200) {
|
||||||
|
throw new TelegramApiValidationException("CustomEmojiIds must be between 1 and 200", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMethod() {
|
||||||
|
return PATH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<Sticker> deserializeResponse(String answer) throws TelegramApiRequestException {
|
||||||
|
return deserializeResponseArray(answer, Sticker.class);
|
||||||
|
}
|
||||||
|
}
|
@ -49,6 +49,7 @@ public class Chat implements BotApiObject {
|
|||||||
private static final String HASPROTECTEDCONTENT_FIELD = "has_protected_content";
|
private static final String HASPROTECTEDCONTENT_FIELD = "has_protected_content";
|
||||||
private static final String JOINTOSENDMESSAGES_FIELD = "join_to_send_messages";
|
private static final String JOINTOSENDMESSAGES_FIELD = "join_to_send_messages";
|
||||||
private static final String JOINBYREQUEST_FIELD = "join_by_request";
|
private static final String JOINBYREQUEST_FIELD = "join_by_request";
|
||||||
|
private static final String HASRESTRICTEDVOICEANDVIDEOMESSAGES_FIELD = "has_restricted_voice_and_video_messages";
|
||||||
|
|
||||||
private static final String USERCHATTYPE = "private";
|
private static final String USERCHATTYPE = "private";
|
||||||
private static final String GROUPCHATTYPE = "group";
|
private static final String GROUPCHATTYPE = "group";
|
||||||
@ -152,6 +153,13 @@ public class Chat implements BotApiObject {
|
|||||||
*/
|
*/
|
||||||
@JsonProperty(JOINBYREQUEST_FIELD)
|
@JsonProperty(JOINBYREQUEST_FIELD)
|
||||||
private Boolean joinByRequest;
|
private Boolean joinByRequest;
|
||||||
|
/**
|
||||||
|
* Optional.
|
||||||
|
* True, if the privacy settings of the other party restrict sending voice and video note messages in the private chat.
|
||||||
|
* Returned only in getChat.
|
||||||
|
*/
|
||||||
|
@JsonProperty(HASRESTRICTEDVOICEANDVIDEOMESSAGES_FIELD)
|
||||||
|
private Boolean hasRestrictedVoiceAndVideoMessages;
|
||||||
|
|
||||||
@JsonProperty(IS_VERIFIED_FIELD)
|
@JsonProperty(IS_VERIFIED_FIELD)
|
||||||
private Boolean isVerified; ///< Optional. Extra.
|
private Boolean isVerified; ///< Optional. Extra.
|
||||||
|
@ -42,6 +42,7 @@ public class MessageEntity implements BotApiObject {
|
|||||||
private static final String URL_FIELD = "url";
|
private static final String URL_FIELD = "url";
|
||||||
private static final String USER_FIELD = "user";
|
private static final String USER_FIELD = "user";
|
||||||
private static final String LANGUAGE_FIELD = "language";
|
private static final String LANGUAGE_FIELD = "language";
|
||||||
|
private static final String CUSTOMEMOJI_FIELD = "custom_emoji_id";
|
||||||
/**
|
/**
|
||||||
* Type of the entity.
|
* Type of the entity.
|
||||||
* Currently, can be:
|
* Currently, can be:
|
||||||
@ -61,6 +62,7 @@ public class MessageEntity implements BotApiObject {
|
|||||||
* - “pre” (monowidth block)
|
* - “pre” (monowidth block)
|
||||||
* - “text_link” (for clickable text URLs)
|
* - “text_link” (for clickable text URLs)
|
||||||
* - “text_mention” (for users without usernames)
|
* - “text_mention” (for users without usernames)
|
||||||
|
* - "custom_emoji" (for inline custom emoji stickers)
|
||||||
*/
|
*/
|
||||||
@JsonProperty(TYPE_FIELD)
|
@JsonProperty(TYPE_FIELD)
|
||||||
@NonNull
|
@NonNull
|
||||||
@ -77,6 +79,13 @@ public class MessageEntity implements BotApiObject {
|
|||||||
private User user; ///< Optional. For “text_mention” only, the mentioned user
|
private User user; ///< Optional. For “text_mention” only, the mentioned user
|
||||||
@JsonProperty(LANGUAGE_FIELD)
|
@JsonProperty(LANGUAGE_FIELD)
|
||||||
private String language; ///< Optional. For “pre” only, the programming language of the entity text
|
private String language; ///< Optional. For “pre” only, the programming language of the entity text
|
||||||
|
/**
|
||||||
|
* Optional.
|
||||||
|
* For “custom_emoji” only, unique identifier of the custom emoji.
|
||||||
|
* Use getCustomEmojiStickers to get full information about the sticker
|
||||||
|
*/
|
||||||
|
@JsonProperty(CUSTOMEMOJI_FIELD)
|
||||||
|
private String customEmojiId;
|
||||||
@Setter(AccessLevel.NONE)
|
@Setter(AccessLevel.NONE)
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private MemoizedUTF16Substring text; ///< Text present in the entity. Computed from offset and length
|
private MemoizedUTF16Substring text; ///< Text present in the entity. Computed from offset and length
|
||||||
|
@ -26,6 +26,7 @@ public class Sticker implements BotApiObject {
|
|||||||
|
|
||||||
private static final String FILEID_FIELD = "file_id";
|
private static final String FILEID_FIELD = "file_id";
|
||||||
private static final String FILEUNIQUEID_FIELD = "file_unique_id";
|
private static final String FILEUNIQUEID_FIELD = "file_unique_id";
|
||||||
|
private static final String TYPE_FIELD = "type";
|
||||||
private static final String WIDTH_FIELD = "width";
|
private static final String WIDTH_FIELD = "width";
|
||||||
private static final String HEIGHT_FIELD = "height";
|
private static final String HEIGHT_FIELD = "height";
|
||||||
private static final String THUMB_FIELD = "thumb";
|
private static final String THUMB_FIELD = "thumb";
|
||||||
@ -36,6 +37,7 @@ public class Sticker implements BotApiObject {
|
|||||||
private static final String ISANIMATED_FIELD = "is_animated";
|
private static final String ISANIMATED_FIELD = "is_animated";
|
||||||
private static final String ISVIDEO_FIELD = "is_video";
|
private static final String ISVIDEO_FIELD = "is_video";
|
||||||
private static final String PREMIUMANIMATION_FIELD = "premium_animation";
|
private static final String PREMIUMANIMATION_FIELD = "premium_animation";
|
||||||
|
private static final String CUSTOMEMOJIID_FIELD = "custom_emoji_id";
|
||||||
|
|
||||||
@JsonProperty(FILEID_FIELD)
|
@JsonProperty(FILEID_FIELD)
|
||||||
private String fileId; ///< Identifier for this file, which can be used to download or reuse the file
|
private String fileId; ///< Identifier for this file, which can be used to download or reuse the file
|
||||||
@ -45,6 +47,12 @@ public class Sticker implements BotApiObject {
|
|||||||
*/
|
*/
|
||||||
@JsonProperty(FILEUNIQUEID_FIELD)
|
@JsonProperty(FILEUNIQUEID_FIELD)
|
||||||
private String fileUniqueId;
|
private String fileUniqueId;
|
||||||
|
/**
|
||||||
|
* Type of the sticker, currently one of “regular”, “mask”, “custom_emoji”.
|
||||||
|
* The type of the sticker is independent of its format, which is determined by the fields is_animated and is_video.
|
||||||
|
*/
|
||||||
|
@JsonProperty(TYPE_FIELD)
|
||||||
|
private String type;
|
||||||
@JsonProperty(WIDTH_FIELD)
|
@JsonProperty(WIDTH_FIELD)
|
||||||
private Integer width; ///< Sticker width
|
private Integer width; ///< Sticker width
|
||||||
@JsonProperty(HEIGHT_FIELD)
|
@JsonProperty(HEIGHT_FIELD)
|
||||||
@ -65,4 +73,7 @@ public class Sticker implements BotApiObject {
|
|||||||
private Boolean isVideo; ///< True, if the sticker is a video sticker
|
private Boolean isVideo; ///< True, if the sticker is a video sticker
|
||||||
@JsonProperty(PREMIUMANIMATION_FIELD)
|
@JsonProperty(PREMIUMANIMATION_FIELD)
|
||||||
private File premiumAnimation; ///< Optional. Premium animation for the sticker, if the sticker is premium
|
private File premiumAnimation; ///< Optional. Premium animation for the sticker, if the sticker is premium
|
||||||
|
@JsonProperty(CUSTOMEMOJIID_FIELD)
|
||||||
|
private String customEmojiId; ///< Optional. For custom emoji stickers, unique identifier of the custom emoji
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class StickerSet implements BotApiObject {
|
public class StickerSet implements BotApiObject {
|
||||||
|
private static final String STICKERTYPE_FIELD = "sticker_type";
|
||||||
private static final String NAME_FIELD = "name";
|
private static final String NAME_FIELD = "name";
|
||||||
private static final String TITLE_FIELD = "title";
|
private static final String TITLE_FIELD = "title";
|
||||||
private static final String CONTAINSMASKS_FIELD = "contains_masks";
|
private static final String CONTAINSMASKS_FIELD = "contains_masks";
|
||||||
@ -32,12 +33,20 @@ public class StickerSet implements BotApiObject {
|
|||||||
private static final String ISVIDEO_FIELD = "is_video";
|
private static final String ISVIDEO_FIELD = "is_video";
|
||||||
private static final String THUMB_FIELD = "thumb";
|
private static final String THUMB_FIELD = "thumb";
|
||||||
|
|
||||||
|
@JsonProperty(STICKERS_FIELD)
|
||||||
|
private String stickerType; ///< Type of stickers in the set, currently one of “regular”, “mask”, “custom_emoji”
|
||||||
@JsonProperty(NAME_FIELD)
|
@JsonProperty(NAME_FIELD)
|
||||||
private String name; ///< Sticker set name
|
private String name; ///< Sticker set name
|
||||||
@JsonProperty(TITLE_FIELD)
|
@JsonProperty(TITLE_FIELD)
|
||||||
private String title; ///< Sticker set title
|
private String title; ///< Sticker set title
|
||||||
|
/**
|
||||||
|
* True, if the sticker set contains animated stickers
|
||||||
|
*
|
||||||
|
* @deprecated Use {@link #getStickerType()} or {@link #isMask()}
|
||||||
|
*/
|
||||||
@JsonProperty(CONTAINSMASKS_FIELD)
|
@JsonProperty(CONTAINSMASKS_FIELD)
|
||||||
private Boolean containsMasks; ///< True, if the sticker set contains animated stickers
|
@Deprecated
|
||||||
|
private Boolean containsMasks;
|
||||||
@JsonProperty(STICKERS_FIELD)
|
@JsonProperty(STICKERS_FIELD)
|
||||||
private List<Sticker> stickers; ///< True, if the sticker set contains masks
|
private List<Sticker> stickers; ///< True, if the sticker set contains masks
|
||||||
@JsonProperty(ISANIMATED_FIELD)
|
@JsonProperty(ISANIMATED_FIELD)
|
||||||
@ -46,4 +55,15 @@ public class StickerSet implements BotApiObject {
|
|||||||
private Boolean isVideo; ///< True, if the sticker set contains video stickers
|
private Boolean isVideo; ///< True, if the sticker set contains video stickers
|
||||||
@JsonProperty(THUMB_FIELD)
|
@JsonProperty(THUMB_FIELD)
|
||||||
private PhotoSize thumb; ///< Optional. Sticker set thumbnail in the .WEBP, .TGS, or .WEBM format
|
private PhotoSize thumb; ///< Optional. Sticker set thumbnail in the .WEBP, .TGS, or .WEBM format
|
||||||
|
|
||||||
|
public boolean isRegularSticker() {
|
||||||
|
return "regular".equals(stickerType);
|
||||||
|
}
|
||||||
|
public boolean isMask() {
|
||||||
|
return "mask".equals(stickerType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCustomEmoji() {
|
||||||
|
return "custom_emoji".equals(stickerType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -673,7 +673,7 @@ public abstract class DefaultAbsSender extends AbsSender {
|
|||||||
builder.addTextBody(CreateNewStickerSet.NAME_FIELD, createNewStickerSet.getName(), TEXT_PLAIN_CONTENT_TYPE);
|
builder.addTextBody(CreateNewStickerSet.NAME_FIELD, createNewStickerSet.getName(), TEXT_PLAIN_CONTENT_TYPE);
|
||||||
builder.addTextBody(CreateNewStickerSet.TITLE_FIELD, createNewStickerSet.getTitle(), TEXT_PLAIN_CONTENT_TYPE);
|
builder.addTextBody(CreateNewStickerSet.TITLE_FIELD, createNewStickerSet.getTitle(), TEXT_PLAIN_CONTENT_TYPE);
|
||||||
builder.addTextBody(CreateNewStickerSet.EMOJIS_FIELD, createNewStickerSet.getEmojis(), TEXT_PLAIN_CONTENT_TYPE);
|
builder.addTextBody(CreateNewStickerSet.EMOJIS_FIELD, createNewStickerSet.getEmojis(), TEXT_PLAIN_CONTENT_TYPE);
|
||||||
builder.addTextBody(CreateNewStickerSet.CONTAINSMASKS_FIELD, createNewStickerSet.getContainsMasks().toString(), TEXT_PLAIN_CONTENT_TYPE);
|
builder.addTextBody(CreateNewStickerSet.STICKERTYPE_FIELD, createNewStickerSet.getStickerType(), TEXT_PLAIN_CONTENT_TYPE);
|
||||||
if (createNewStickerSet.getPngSticker() != null) {
|
if (createNewStickerSet.getPngSticker() != null) {
|
||||||
addInputFile(builder, createNewStickerSet.getPngSticker(), CreateNewStickerSet.PNGSTICKER_FIELD, true);
|
addInputFile(builder, createNewStickerSet.getPngSticker(), CreateNewStickerSet.PNGSTICKER_FIELD, true);
|
||||||
} else if (createNewStickerSet.getTgsSticker() != null) {
|
} else if (createNewStickerSet.getTgsSticker() != null) {
|
||||||
|
@ -18,10 +18,10 @@ import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMem
|
|||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMemberCount;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMemberCount;
|
||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.LeaveChat;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.LeaveChat;
|
||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.UnbanChatMember;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.UnbanChatMember;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.invoices.SendInvoice;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
|
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendContact;
|
import org.telegram.telegrambots.meta.api.methods.send.SendContact;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendGame;
|
import org.telegram.telegrambots.meta.api.methods.send.SendGame;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendInvoice;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendLocation;
|
import org.telegram.telegrambots.meta.api.methods.send.SendLocation;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendVenue;
|
import org.telegram.telegrambots.meta.api.methods.send.SendVenue;
|
||||||
|
@ -26,9 +26,9 @@ import static java.nio.charset.Charset.defaultCharset;
|
|||||||
import static org.apache.commons.io.FileUtils.readFileToString;
|
import static org.apache.commons.io.FileUtils.readFileToString;
|
||||||
import static org.apache.commons.io.IOUtils.toInputStream;
|
import static org.apache.commons.io.IOUtils.toInputStream;
|
||||||
import static org.apache.http.HttpVersion.HTTP_1_1;
|
import static org.apache.http.HttpVersion.HTTP_1_1;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.timeout;
|
import static org.mockito.Mockito.timeout;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
@ -12,7 +12,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
import static org.hamcrest.CoreMatchers.is;
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
|
||||||
public class TelegramLongPollingBotTest {
|
public class TelegramLongPollingBotTest {
|
||||||
|
@ -23,10 +23,10 @@ import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMem
|
|||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMemberCount;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatMemberCount;
|
||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.LeaveChat;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.LeaveChat;
|
||||||
import org.telegram.telegrambots.meta.api.methods.groupadministration.UnbanChatMember;
|
import org.telegram.telegrambots.meta.api.methods.groupadministration.UnbanChatMember;
|
||||||
|
import org.telegram.telegrambots.meta.api.methods.invoices.SendInvoice;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
|
import org.telegram.telegrambots.meta.api.methods.send.SendChatAction;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendContact;
|
import org.telegram.telegrambots.meta.api.methods.send.SendContact;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendGame;
|
import org.telegram.telegrambots.meta.api.methods.send.SendGame;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendInvoice;
|
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendLocation;
|
import org.telegram.telegrambots.meta.api.methods.send.SendLocation;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
|
||||||
import org.telegram.telegrambots.meta.api.methods.send.SendVenue;
|
import org.telegram.telegrambots.meta.api.methods.send.SendVenue;
|
||||||
@ -62,7 +62,7 @@ import static org.junit.Assert.fail;
|
|||||||
*/
|
*/
|
||||||
public class TestRestApi extends JerseyTest {
|
public class TestRestApi extends JerseyTest {
|
||||||
|
|
||||||
private FakeWebhook webhookBot = new FakeWebhook();
|
private final FakeWebhook webhookBot = new FakeWebhook();
|
||||||
private RestApi restApi;
|
private RestApi restApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user