TDLightTelegramBots/telegrambots-meta/src/main/java/org/telegram/telegrambots/meta/api/methods/send/SendAudio.java

218 lines
7.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package org.telegram.telegrambots.meta.api.methods.send;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.Singular;
import lombok.ToString;
import lombok.experimental.Tolerate;
import org.telegram.telegrambots.meta.api.objects.InputFile;
import org.telegram.telegrambots.meta.api.objects.Message;
import org.telegram.telegrambots.meta.api.objects.MessageEntity;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.ReplyKeyboard;
import org.telegram.telegrambots.meta.exceptions.TelegramApiRequestException;
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
import java.util.List;
/**
* @author Ruben Bermudez
* @version 1.0
* Use this method to send audio files, Use this method to send audio files, if you want
* Telegram clients to display them in the music player. Your audio must be in an .mp3 format. On
* success, the sent Message is returned. Bots can currently send audio files of up to 50 MB in
* size, this limit may be changed in the future.
* @apiNote For sending voice notes, use sendVoice method instead.
*/
@EqualsAndHashCode(callSuper = false)
@Getter
@Setter
@ToString
@RequiredArgsConstructor
@NoArgsConstructor(force = true)
@AllArgsConstructor
@Builder
public class SendAudio extends SendMediaBotMethod<Message> {
public static final String PATH = "sendaudio";
public static final String DURATION_FIELD = "duration";
public static final String CHATID_FIELD = "chat_id";
public static final String MESSAGETHREADID_FIELD = "message_thread_id";
public static final String AUDIO_FIELD = "audio";
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
public static final String DISABLENOTIFICATION_FIELD = "disable_notification";
public static final String REPLYMARKUP_FIELD = "reply_markup";
public static final String PERFOMER_FIELD = "performer";
public static final String TITLE_FIELD = "title";
public static final String CAPTION_FIELD = "caption";
public static final String PARSEMODE_FIELD = "parse_mode";
public static final String THUMBNAIL_FIELD = "thumbnail";
public static final String CAPTION_ENTITIES_FIELD = "caption_entities";
public static final String ALLOWSENDINGWITHOUTREPLY_FIELD = "allow_sending_without_reply";
public static final String PROTECTCONTENT_FIELD = "protect_content";
/**
* Unique identifier for the chat to send the message to (or Username fro channels)
*/
@NonNull
private String chatId;
/**
* Unique identifier for the target message thread (topic) of the forum;
* for forum supergroups only
*/
private Integer messageThreadId;
/**
* Audio file to send. file_id as String to resend an audio that is already on the Telegram servers or Url to upload it
*/
@NonNull
private InputFile audio;
/**
* Optional. If the message is a reply, ID of the original message
*/
private Integer replyToMessageId;
/**
* Optional. Sends the message silently. Users will receive a notification with no sound.
*/
private Boolean disableNotification;
/**
* Optional. JSON-serialized object for a custom reply keyboard
*/
private ReplyKeyboard replyMarkup;
/**
* Optional. Performer of sent audio
*/
private String performer;
/**
* Optional. Title of sent audio
*/
private String title;
/**
* Optional. Audio caption (may also be used when resending documents by file_id), 0-200 characters
*/
private String caption;
/**
* Optional. Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in the media caption.
*/
private String parseMode;
/**
* Integer Duration of the audio in seconds as defined by sender
*/
private Integer duration;
/**
* Optional.
* Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size.
* A thumbnails width and height should not exceed 320.
* Ignored if the file is not uploaded using multipart/form-data.
* Thumbnails cant be reused and can be only uploaded as a new file, so you can pass
* “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under <file_attach_name>.
*/
private InputFile thumbnail;
/**
* Optional. List of special entities that appear in the caption, which can be specified instead of parse_mode
*/
@Singular
private List<MessageEntity> captionEntities;
/**
* Optional Pass True, if the message should be sent even if the specified replied-to message is not found
*/
private Boolean allowSendingWithoutReply;
/**
* Optional. Protects the contents of sent messages from forwarding and saving
*/
private Boolean protectContent;
@Tolerate
public void setChatId(@NonNull Long chatId) {
this.chatId = chatId.toString();
}
public void enableNotification() {
this.disableNotification = false;
}
public void disableNotification() {
this.disableNotification = true;
}
@Override
public Message deserializeResponse(String answer) throws TelegramApiRequestException {
return deserializeResponse(answer, Message.class);
}
@Override
public void validate() throws TelegramApiValidationException {
if (chatId.isEmpty()) {
throw new TelegramApiValidationException("ChatId parameter can't be empty", this);
}
if (parseMode != null && (captionEntities != null && !captionEntities.isEmpty()) ) {
throw new TelegramApiValidationException("Parse mode can't be enabled if Entities are provided", this);
}
audio.validate();
if (thumbnail != null) {
thumbnail.validate();
}
if (replyMarkup != null) {
replyMarkup.validate();
}
}
@Override
public String getMethod() {
return PATH;
}
@Override
public InputFile getFile() {
return audio;
}
@Override
public String getFileField() {
return AUDIO_FIELD;
}
/**
* @deprecated Use {{@link #getThumbnail()}}
*/
@JsonIgnore
@Deprecated
public InputFile getThumb() {
return thumbnail;
}
/**
* @deprecated Use {{@link #setThumbnail(InputFile)}}
*/
@JsonIgnore
@Deprecated
public void setThumb(InputFile thumb) {
this.thumbnail = thumb;
}
public static class SendAudioBuilder {
@Tolerate
public SendAudioBuilder chatId(@NonNull Long chatId) {
this.chatId = chatId.toString();
return this;
}
@Tolerate
@Deprecated
public SendAudioBuilder thumb(InputFile thumb) {
this.thumbnail = thumb;
return this;
}
}
}