TDLightTelegramBots/telegrambots-meta/src/main/java/org/telegram/telegrambots/meta/api/objects/Message.java

585 lines
21 KiB
Java
Raw Normal View History

2018-07-08 01:41:21 +02:00
package org.telegram.telegrambots.meta.api.objects;
2016-01-14 01:14:53 +01:00
import com.fasterxml.jackson.annotation.JsonProperty;
2018-07-08 01:41:21 +02:00
import org.telegram.telegrambots.meta.api.interfaces.BotApiObject;
2018-07-27 00:27:26 +02:00
import org.telegram.telegrambots.meta.api.objects.games.Animation;
2018-07-08 01:41:21 +02:00
import org.telegram.telegrambots.meta.api.objects.games.Game;
2018-07-27 00:27:26 +02:00
import org.telegram.telegrambots.meta.api.objects.passport.PassportData;
2018-07-08 01:41:21 +02:00
import org.telegram.telegrambots.meta.api.objects.payments.Invoice;
import org.telegram.telegrambots.meta.api.objects.payments.SuccessfulPayment;
2019-05-17 21:31:09 +02:00
import org.telegram.telegrambots.meta.api.objects.polls.Poll;
2019-06-01 13:50:17 +02:00
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
2018-07-08 01:41:21 +02:00
import org.telegram.telegrambots.meta.api.objects.stickers.Sticker;
2016-01-14 01:14:53 +01:00
2019-04-03 03:18:53 +02:00
import java.util.ArrayList;
2016-01-14 01:14:53 +01:00
import java.util.List;
/**
* @author Ruben Bermudez
* @version 1.0
2017-05-03 01:40:55 +02:00
* This object represents a message.
2016-01-14 01:14:53 +01:00
*/
public class Message implements BotApiObject {
2016-04-11 02:53:53 +02:00
private static final String MESSAGEID_FIELD = "message_id";
private static final String FROM_FIELD = "from";
private static final String DATE_FIELD = "date";
private static final String CHAT_FIELD = "chat";
private static final String FORWARDFROM_FIELD = "forward_from";
2016-05-07 18:41:48 +02:00
private static final String FORWARDFROMCHAT_FIELD = "forward_from_chat";
2016-04-11 02:53:53 +02:00
private static final String FORWARDDATE_FIELD = "forward_date";
private static final String TEXT_FIELD = "text";
private static final String ENTITIES_FIELD = "entities";
2017-10-11 19:27:12 +02:00
private static final String CAPTIONENTITIES_FIELD = "caption_entities";
2016-04-11 02:53:53 +02:00
private static final String AUDIO_FIELD = "audio";
private static final String DOCUMENT_FIELD = "document";
private static final String PHOTO_FIELD = "photo";
private static final String STICKER_FIELD = "sticker";
private static final String VIDEO_FIELD = "video";
private static final String CONTACT_FIELD = "contact";
private static final String LOCATION_FIELD = "location";
private static final String VENUE_FIELD = "venue";
2018-07-27 00:27:26 +02:00
private static final String ANIMATION_FIELD = "animation";
2016-04-11 02:53:53 +02:00
private static final String PINNED_MESSAGE_FIELD = "pinned_message";
2017-03-27 00:49:08 +02:00
private static final String NEWCHATMEMBERS_FIELD = "new_chat_members";
2016-04-11 02:53:53 +02:00
private static final String LEFTCHATMEMBER_FIELD = "left_chat_member";
private static final String NEWCHATTITLE_FIELD = "new_chat_title";
private static final String NEWCHATPHOTO_FIELD = "new_chat_photo";
private static final String DELETECHATPHOTO_FIELD = "delete_chat_photo";
private static final String GROUPCHATCREATED_FIELD = "group_chat_created";
private static final String REPLYTOMESSAGE_FIELD = "reply_to_message";
private static final String VOICE_FIELD = "voice";
2016-05-19 19:25:52 +02:00
private static final String CAPTION_FIELD = "caption";
2016-04-11 02:53:53 +02:00
private static final String SUPERGROUPCREATED_FIELD = "supergroup_chat_created";
private static final String CHANNELCHATCREATED_FIELD = "channel_chat_created";
private static final String MIGRATETOCHAT_FIELD = "migrate_to_chat_id";
private static final String MIGRATEFROMCHAT_FIELD = "migrate_from_chat_id";
2016-05-22 11:42:04 +02:00
private static final String EDITDATE_FIELD = "edit_date";
2016-09-28 00:29:44 +02:00
private static final String GAME_FIELD = "game";
2016-11-21 01:28:09 +01:00
private static final String FORWARDFROMMESSAGEID_FIELD = "forward_from_message_id";
2017-03-27 00:49:08 +02:00
private static final String INVOICE_FIELD = "invoice";
private static final String SUCCESSFUL_PAYMENT_FIELD = "successful_payment";
2017-05-03 01:40:55 +02:00
private static final String VIDEO_NOTE_FIELD = "video_note";
2017-08-23 09:06:32 +02:00
private static final String AUTHORSIGNATURE_FIELD = "author_signature";
private static final String FORWARDSIGNATURE_FIELD = "forward_signature";
2017-11-17 15:47:22 +01:00
private static final String MEDIAGROUPID_FIELD = "media_group_id";
2018-02-14 20:36:22 +01:00
private static final String CONNECTEDWEBSITE_FIELD = "connected_website";
2018-07-27 00:27:26 +02:00
private static final String PASSPORTDATA_FIELD = "passport_data";
2019-04-08 02:43:46 +02:00
private static final String FORWARDSENDERNAME_FIELD = "forward_sender_name";
2019-05-17 21:31:09 +02:00
private static final String POLL_FIELD = "poll";
2019-06-01 13:50:17 +02:00
private static final String REPLY_MARKUP_FIELD = "reply_markup";
2020-04-01 10:10:13 +02:00
private static final String DICE_FIELD = "dice";
2016-09-28 00:29:44 +02:00
2016-01-14 01:14:53 +01:00
@JsonProperty(MESSAGEID_FIELD)
private Integer messageId; ///< Integer Unique message identifier
@JsonProperty(FROM_FIELD)
private User from; ///< Optional. Sender, can be empty for messages sent to channels
@JsonProperty(DATE_FIELD)
2016-04-11 02:53:53 +02:00
private Integer date; ///< Optional. Date the message was sent in Unix time
2016-01-14 01:14:53 +01:00
@JsonProperty(CHAT_FIELD)
private Chat chat; ///< Conversation the message belongs to
@JsonProperty(FORWARDFROM_FIELD)
private User forwardFrom; ///< Optional. For forwarded messages, sender of the original message
2016-05-07 18:41:48 +02:00
@JsonProperty(FORWARDFROMCHAT_FIELD)
private Chat forwardFromChat; ///< Optional. For messages forwarded from a channel, information about the original channel
2016-01-14 01:14:53 +01:00
@JsonProperty(FORWARDDATE_FIELD)
private Integer forwardDate; ///< Optional. For forwarded messages, date the original message was sent
@JsonProperty(TEXT_FIELD)
private String text; ///< Optional. For text messages, the actual UTF-8 text of the message
2016-04-11 02:53:53 +02:00
/**
* Optional. For text messages, special entities like usernames, URLs,
* bot commands, etc. that appear in the text
*/
@JsonProperty(ENTITIES_FIELD)
2016-04-11 02:53:53 +02:00
private List<MessageEntity> entities;
2017-10-11 19:27:12 +02:00
/**
* Optional. For messages with a caption, special entities like usernames,
* URLs, bot commands, etc. that appear in the caption
*/
@JsonProperty(CAPTIONENTITIES_FIELD)
private List<MessageEntity> captionEntities;
2016-01-14 01:14:53 +01:00
@JsonProperty(AUDIO_FIELD)
private Audio audio; ///< Optional. Message is an audio file, information about the file
@JsonProperty(DOCUMENT_FIELD)
private Document document; ///< Optional. Message is a general file, information about the file
@JsonProperty(PHOTO_FIELD)
private List<PhotoSize> photo; ///< Optional. Message is a photo, available sizes of the photo
@JsonProperty(STICKER_FIELD)
private Sticker sticker; ///< Optional. Message is a sticker, information about the sticker
@JsonProperty(VIDEO_FIELD)
private Video video; ///< Optional. Message is a video, information about the video
@JsonProperty(CONTACT_FIELD)
private Contact contact; ///< Optional. Message is a shared contact, information about the contact
@JsonProperty(LOCATION_FIELD)
private Location location; ///< Optional. Message is a shared location, information about the location
2016-04-11 02:53:53 +02:00
@JsonProperty(VENUE_FIELD)
private Venue venue; ///< Optional. Message is a venue, information about the venue
2018-07-27 00:27:26 +02:00
/**
* Optional. Message is an animation, information about the animation.
* For backward compatibility, when this field is set, the document field will be also set
*/
@JsonProperty(ANIMATION_FIELD)
private Animation animation;
2016-04-11 02:53:53 +02:00
@JsonProperty(PINNED_MESSAGE_FIELD)
private Message pinnedMessage; ///< Optional. Specified message was pinned. Note that the Message object in this field will not contain further reply_to_message fields even if it is itself a reply.
2017-03-27 00:49:08 +02:00
@JsonProperty(NEWCHATMEMBERS_FIELD)
2017-05-03 01:40:55 +02:00
private List<User> newChatMembers; ///< Optional. New members were added to the group or supergroup, information about them (the bot itself may be one of these members)
2016-04-11 02:53:53 +02:00
@JsonProperty(LEFTCHATMEMBER_FIELD)
private User leftChatMember; ///< Optional. A member was removed from the group, information about them (this member may be bot itself)
2016-01-14 01:14:53 +01:00
@JsonProperty(NEWCHATTITLE_FIELD)
private String newChatTitle; ///< Optional. A chat title was changed to this value
@JsonProperty(NEWCHATPHOTO_FIELD)
private List<PhotoSize> newChatPhoto; ///< Optional. A chat photo was change to this value
@JsonProperty(DELETECHATPHOTO_FIELD)
private Boolean deleteChatPhoto; ///< Optional. Informs that the chat photo was deleted
@JsonProperty(GROUPCHATCREATED_FIELD)
private Boolean groupchatCreated; ///< Optional. Informs that the group has been created
@JsonProperty(REPLYTOMESSAGE_FIELD)
private Message replyToMessage;
@JsonProperty(VOICE_FIELD)
private Voice voice; ///< Optional. Message is a voice message, information about the file
2016-05-19 19:25:52 +02:00
@JsonProperty(CAPTION_FIELD)
private String caption; ///< Optional. Caption for the document, photo or video, 0-200 characters
2016-05-31 19:08:56 +02:00
/**
* Optional. Service message: the supergroup has been created.
* This field can‘t be received in a message coming through updates,
* because bot can’t be a member of a supergroup when it is created.
* It can only be found in reply_to_message
* if someone replies to a very first message in a directly created supergroup.
*/
@JsonProperty(SUPERGROUPCREATED_FIELD)
2016-05-31 19:08:56 +02:00
private Boolean superGroupCreated;
/**
* Optional. Service message: the channel has been created.
* This field can‘t be received in a message coming through updates,
* because bot can’t be a member of a channel when it is created.
* It can only be found in reply_to_message if someone
* replies to a very first message in a channel.
*/
@JsonProperty(CHANNELCHATCREATED_FIELD)
2016-05-31 19:08:56 +02:00
private Boolean channelChatCreated;
/**
* Optional. The group has been migrated to a supergroup with the specified identifier.
* This number may be greater than 32 bits and some programming languages
* may have difficulty/silent defects in interpreting it.
* But it smaller than 52 bits, so a signed 64 bit integer or double-precision
* float type are safe for storing this identifier.
*/
@JsonProperty(MIGRATETOCHAT_FIELD)
2016-01-14 01:14:53 +01:00
private Long migrateToChatId; ///< Optional. The chat has been migrated to a chat with specified identifier, not exceeding 1e13 by absolute value
2016-05-31 19:08:56 +02:00
/**
* Optional. The supergroup has been migrated from a group with the specified identifier.
* This number may be greater than 32 bits and some programming languages
* may have difficulty/silent defects in interpreting it.
* But it smaller than 52 bits, so a signed 64 bit integer or double-precision
* float type are safe for storing this identifier.
*/
@JsonProperty(MIGRATEFROMCHAT_FIELD)
2016-01-14 01:14:53 +01:00
private Long migrateFromChatId; ///< Optional. The chat has been migrated from a chat with specified identifier, not exceeding 1e13 by absolute value
2016-05-22 11:42:04 +02:00
@JsonProperty(EDITDATE_FIELD)
private Integer editDate; ///< Optional. Date the message was last edited in Unix time
2016-09-28 00:29:44 +02:00
@JsonProperty(GAME_FIELD)
private Game game; ///< Optional. Message is a game, information about the game
2016-11-21 01:28:09 +01:00
@JsonProperty(FORWARDFROMMESSAGEID_FIELD)
private Integer forwardFromMessageId; ///< Optional. For forwarded channel posts, identifier of the original message in the channel
2017-03-27 00:49:08 +02:00
@JsonProperty(INVOICE_FIELD)
private Invoice invoice; ///< Optional. Message is an invoice for a payment, information about the invoice.
@JsonProperty(SUCCESSFUL_PAYMENT_FIELD)
private SuccessfulPayment successfulPayment; ///< Optional. Message is a service message about a successful payment, information about the payment.
2017-05-03 01:40:55 +02:00
@JsonProperty(VIDEO_NOTE_FIELD)
private VideoNote videoNote; ///< Optional. Message is a video note, information about the video message
2017-08-23 09:06:32 +02:00
@JsonProperty(AUTHORSIGNATURE_FIELD)
private String authorSignature; ///< Optional. Post author signature for posts in channel chats
@JsonProperty(FORWARDSIGNATURE_FIELD)
private String forwardSignature; ///< Optional. Post author signature for messages forwarded from channel chats
2017-11-17 15:47:22 +01:00
@JsonProperty(MEDIAGROUPID_FIELD)
2018-02-14 20:36:22 +01:00
private String mediaGroupId; ///< Optional. The unique identifier of a media message group this message belongs to
@JsonProperty(CONNECTEDWEBSITE_FIELD)
private String connectedWebsite; ///< Optional. The domain name of the website on which the user has logged in
2018-07-27 00:27:26 +02:00
@JsonProperty(PASSPORTDATA_FIELD)
private PassportData passportData; ///< Optional. Telegram Passport data
2019-04-08 02:43:46 +02:00
@JsonProperty(FORWARDSENDERNAME_FIELD)
private String forwardSenderName; ///< Optional. Sender's name for messages forwarded from users who disallow adding a link to their account in forwarded messages.
2019-05-17 21:31:09 +02:00
@JsonProperty(POLL_FIELD)
private Poll poll; ///< Optional. Message is a native poll, information about the poll
2019-06-01 13:50:17 +02:00
/**
* Inline keyboard attached to the message.
*
* @apiNote login_url buttons are represented as ordinary url buttons.
*/
@JsonProperty(REPLY_MARKUP_FIELD)
private InlineKeyboardMarkup replyMarkup;
2020-04-01 10:10:13 +02:00
@JsonProperty(DICE_FIELD)
private Dice dice; // Optional. Message is a dice with random value from 1 to 6
2016-01-14 01:14:53 +01:00
public Message() {
super();
}
public Integer getMessageId() {
return messageId;
}
public User getFrom() {
return from;
}
public Integer getDate() {
return date;
}
public Chat getChat() {
return chat;
}
public User getForwardFrom() {
return forwardFrom;
}
public Integer getForwardDate() {
return forwardDate;
}
public String getText() {
return text;
}
2016-04-12 22:53:44 +02:00
public List<MessageEntity> getEntities() {
2017-04-21 23:45:26 +02:00
if (entities != null) {
entities.forEach(x -> x.computeText(text));
}
2016-04-12 22:53:44 +02:00
return entities;
}
2017-10-11 19:27:12 +02:00
public List<MessageEntity> getCaptionEntities() {
if (captionEntities != null) {
captionEntities.forEach(x -> x.computeText(caption));
}
return captionEntities;
}
2016-01-14 01:14:53 +01:00
public Audio getAudio() {
return audio;
}
public Document getDocument() {
return document;
}
public List<PhotoSize> getPhoto() {
return photo;
}
public Sticker getSticker() {
return sticker;
}
2018-07-27 00:27:26 +02:00
public boolean hasSticker() {
return sticker != null;
}
2016-01-14 01:14:53 +01:00
public Video getVideo() {
return video;
}
2018-07-27 00:27:26 +02:00
public Animation getAnimation() {
return animation;
}
2016-01-14 01:14:53 +01:00
public Contact getContact() {
return contact;
}
public Location getLocation() {
return location;
}
2016-04-12 22:53:44 +02:00
public Venue getVenue() {
return venue;
}
public Message getPinnedMessage() {
return pinnedMessage;
}
2017-03-27 00:49:08 +02:00
public List<User> getNewChatMembers() {
2019-04-03 03:18:53 +02:00
return newChatMembers == null ? new ArrayList<>() : newChatMembers;
2016-01-14 01:14:53 +01:00
}
2016-04-11 02:53:53 +02:00
public User getLeftChatMember() {
return leftChatMember;
2016-01-14 01:14:53 +01:00
}
public String getNewChatTitle() {
return newChatTitle;
}
public List<PhotoSize> getNewChatPhoto() {
return newChatPhoto;
}
public Boolean getDeleteChatPhoto() {
return deleteChatPhoto;
}
public Boolean getGroupchatCreated() {
return groupchatCreated;
}
public Message getReplyToMessage() {
return replyToMessage;
}
public Voice getVoice() {
return voice;
}
2016-05-19 19:25:52 +02:00
public String getCaption() {
return caption;
}
2016-01-14 01:14:53 +01:00
public Boolean getSuperGroupCreated() {
return superGroupCreated;
}
public Boolean getChannelChatCreated() {
return channelChatCreated;
}
public Long getMigrateToChatId() {
return migrateToChatId;
}
public Long getMigrateFromChatId() {
return migrateFromChatId;
}
2016-11-21 01:28:09 +01:00
public Integer getForwardFromMessageId() {
return forwardFromMessageId;
}
2016-04-12 22:53:44 +02:00
public boolean isGroupMessage() {
return chat.isGroupChat();
}
public boolean isUserMessage() {
return chat.isUserChat();
}
public boolean isChannelMessage() {
return chat.isChannelChat();
}
public boolean isSuperGroupMessage() {
return chat.isSuperGroupChat();
}
public Long getChatId() {
return chat.getId();
}
public boolean hasText() {
return text != null && !text.isEmpty();
}
public boolean isCommand() {
2016-05-27 03:19:17 +02:00
if (hasText() && entities != null) {
for (MessageEntity entity : entities) {
2016-05-27 03:19:17 +02:00
if (entity != null && entity.getOffset() == 0 &&
EntityType.BOTCOMMAND.equals(entity.getType())) {
return true;
}
}
}
return false;
}
2016-04-12 22:53:44 +02:00
public boolean hasDocument() {
return this.document != null;
}
2018-04-02 18:38:29 +02:00
public boolean hasVideo() {
return this.video != null;
}
public boolean hasAudio(){
return this.audio != null;
}
public boolean hasVoice(){
return this.voice != null;
}
2016-04-12 22:53:44 +02:00
public boolean isReply() {
return this.replyToMessage != null;
}
public boolean hasLocation() {
return location != null;
}
public Chat getForwardFromChat() {
return forwardFromChat;
2016-05-07 18:41:48 +02:00
}
2016-05-22 11:42:04 +02:00
public Integer getEditDate() {
return editDate;
2016-05-07 18:41:48 +02:00
}
2016-09-28 00:29:44 +02:00
public Game getGame() {
return game;
}
private boolean hasGame() {
return game != null;
}
public boolean hasEntities() {
return entities != null && !entities.isEmpty();
}
public boolean hasPhoto() {
return photo != null && !photo.isEmpty();
2016-01-14 01:14:53 +01:00
}
2017-03-27 00:49:08 +02:00
public boolean hasInvoice() {
return invoice != null;
}
public boolean hasSuccessfulPayment() {
return successfulPayment != null;
}
2018-04-01 12:40:58 +02:00
public boolean hasContact() {
return contact != null;
}
2017-03-27 00:49:08 +02:00
public Invoice getInvoice() {
return invoice;
}
public SuccessfulPayment getSuccessfulPayment() {
return successfulPayment;
}
2017-05-03 01:40:55 +02:00
public VideoNote getVideoNote() {
return videoNote;
}
2018-07-27 00:27:26 +02:00
public boolean hasVideoNote() {
return videoNote != null;
}
2017-10-11 19:27:12 +02:00
public String getAuthorSignature() {
return authorSignature;
}
public String getForwardSignature() {
return forwardSignature;
}
2017-11-17 15:47:22 +01:00
public String getMediaGroupId() {
return mediaGroupId;
}
2018-02-14 20:36:22 +01:00
public String getConnectedWebsite() {
return connectedWebsite;
}
2018-07-27 00:27:26 +02:00
public PassportData getPassportData() {
return passportData;
}
public boolean hasPassportData() {
return passportData != null;
}
public boolean hasAnimation() {
return animation != null;
}
2019-04-08 02:43:46 +02:00
public String getForwardSenderName() {
return forwardSenderName;
}
public void setForwardSenderName(String forwardSenderName) {
this.forwardSenderName = forwardSenderName;
}
2019-05-17 21:31:09 +02:00
public boolean hasPoll() {
return poll != null;
}
public Poll getPoll() {
return poll;
}
2020-04-01 10:10:13 +02:00
public Dice getDice() {
return dice;
}
public boolean hasDice() {
return dice != null;
}
2019-06-01 13:50:17 +02:00
public boolean hasReplyMarkup() {
return replyMarkup != null;
}
public InlineKeyboardMarkup getReplyMarkup() {
return replyMarkup;
}
@Override
public String toString() {
return "Message{" +
"messageId=" + messageId +
", from=" + from +
", date=" + date +
", chat=" + chat +
", forwardFrom=" + forwardFrom +
", forwardFromChat=" + forwardFromChat +
", forwardDate=" + forwardDate +
", text='" + text + '\'' +
2016-09-28 00:29:44 +02:00
", entities=" + entities +
2017-10-11 19:27:12 +02:00
", captionEntities=" + captionEntities +
", audio=" + audio +
", document=" + document +
", photo=" + photo +
", sticker=" + sticker +
", video=" + video +
", contact=" + contact +
", location=" + location +
2016-04-11 02:53:53 +02:00
", venue=" + venue +
2019-06-01 13:50:17 +02:00
", animation=" + animation +
2016-09-28 00:29:44 +02:00
", pinnedMessage=" + pinnedMessage +
2017-03-27 00:49:08 +02:00
", newChatMembers=" + newChatMembers +
2016-04-11 02:53:53 +02:00
", leftChatMember=" + leftChatMember +
", newChatTitle='" + newChatTitle + '\'' +
", newChatPhoto=" + newChatPhoto +
", deleteChatPhoto=" + deleteChatPhoto +
", groupchatCreated=" + groupchatCreated +
", replyToMessage=" + replyToMessage +
", voice=" + voice +
2016-09-28 00:29:44 +02:00
", caption='" + caption + '\'' +
", superGroupCreated=" + superGroupCreated +
", channelChatCreated=" + channelChatCreated +
", migrateToChatId=" + migrateToChatId +
", migrateFromChatId=" + migrateFromChatId +
2016-05-22 11:42:04 +02:00
", editDate=" + editDate +
2016-09-28 00:29:44 +02:00
", game=" + game +
2016-11-21 01:28:09 +01:00
", forwardFromMessageId=" + forwardFromMessageId +
2017-03-27 00:49:08 +02:00
", invoice=" + invoice +
", successfulPayment=" + successfulPayment +
2017-05-03 01:40:55 +02:00
", videoNote=" + videoNote +
2017-10-11 19:27:12 +02:00
", authorSignature='" + authorSignature + '\'' +
", forwardSignature='" + forwardSignature + '\'' +
2017-11-17 15:47:22 +01:00
", mediaGroupId='" + mediaGroupId + '\'' +
2018-02-14 20:36:22 +01:00
", connectedWebsite='" + connectedWebsite + '\'' +
2018-07-27 00:27:26 +02:00
", passportData=" + passportData +
2019-06-01 13:50:17 +02:00
", forwardSenderName='" + forwardSenderName + '\'' +
2019-05-17 21:31:09 +02:00
", poll=" + poll +
2019-06-01 13:50:17 +02:00
", replyMarkup=" + replyMarkup +
'}';
}
2016-01-14 01:14:53 +01:00
}