Merge pull request #94 from rubenlagus/dev

v2.3.3.3
This commit is contained in:
Ruben Bermudez 2016-06-09 23:20:40 +02:00
commit 0b114aefe2
18 changed files with 397 additions and 70 deletions

View File

@ -14,14 +14,14 @@ Both ways are supported, but I recommend long polling method.
## Usage
Just import add the library to your project using [Maven, Gradly, ...](https://jitpack.io/#rubenlagus/TelegramBots/v2.3.3.2) or download the jar(including all dependencies) from [here](https://github.com/rubenlagus/TelegramBots/releases/tag/v2.3.3.2)
Just import add the library to your project using [Maven, Gradly, ...](https://jitpack.io/#rubenlagus/TelegramBots/v2.3.3.3) or download the jar(including all dependencies) from [here](https://github.com/rubenlagus/TelegramBots/releases/tag/v2.3.3.3)
In order to use Long Polling mode, just create your own bot extending `org.telegram.telegrambots.bots.TelegramLongPollingBot`.
If you like to use Webhook, extend `org.telegram.telegrambots.bots.TelegramWebhookBot`
Once done, you just need to creat a `org.telegram.telegrambots.TelegramBotsApi`and register your bots:
Once done, you just need to create a `org.telegram.telegrambots.TelegramBotsApi`and register your bots:
```java
@ -59,6 +59,8 @@ https://telegram.me/TGlanguagesbot (**Send files uploding them**)
https://telegram.me/RaeBot (**Inline support**)
https://telegram.me/SnowcrashBot (**Webhook support**)
You can see code for those bots at [TelegramBotsExample](https://github.com/rubenlagus/TelegramBotsExample) project.
## Telegram Bot API

View File

@ -6,7 +6,7 @@
<packaging>jar</packaging>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>2.3.3.2</version>
<version>2.3.3.3</version>
<name>Telegram Bots</name>
<url>https://telegram.me/JavaBotsApi</url>

View File

@ -19,12 +19,12 @@ import java.io.IOException;
public class ForwardMessage extends BotApiMethod<Message> {
public static final String PATH = "forwardmessage";
public static final String CHATID_FIELD = "chat_id";
public static final String FROMCHATID_FIELD = "from_chat_id";
public static final String MESSAGEID_FIELD = "message_id";
public static final String DISABLENOTIFICATION_FIELD = "disable_notification";
private static final String CHATID_FIELD = "chat_id";
private static final String FROMCHATID_FIELD = "from_chat_id";
private static final String MESSAGEID_FIELD = "message_id";
private static final String DISABLENOTIFICATION_FIELD = "disable_notification";
private String chatId; ///< Unique identifier for the chat to send the message to (or username for channels)
private Integer fromChatId; ///< Unique identifier for the chat where the original message was sent User or GroupChat id
private String fromChatId; ///< Unique identifier for the chat where the original message was sent User or GroupChat id
private Integer messageId; ///< Unique message identifier
/**
* Optional. Sends the message silently.
@ -47,11 +47,17 @@ public class ForwardMessage extends BotApiMethod<Message> {
return this;
}
public Integer getFromChatId() {
@Deprecated
public ForwardMessage setFromChatId(Integer fromChatId) {
this.fromChatId = fromChatId.toString();
return this;
}
public String getFromChatId() {
return fromChatId;
}
public ForwardMessage setFromChatId(Integer fromChatId) {
public ForwardMessage setFromChatId(String fromChatId) {
this.fromChatId = fromChatId;
return this;
}
@ -82,7 +88,7 @@ public class ForwardMessage extends BotApiMethod<Message> {
gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH);
gen.writeStringField(CHATID_FIELD, chatId);
gen.writeNumberField(FROMCHATID_FIELD, fromChatId);
gen.writeStringField(FROMCHATID_FIELD, fromChatId);
gen.writeNumberField(MESSAGEID_FIELD, messageId);
if (disableNotification != null) {
gen.writeBooleanField(DISABLENOTIFICATION_FIELD, disableNotification);

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -36,8 +39,11 @@ public class SendAudio {
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
private String performer; ///< Optional. Performer of sent audio
private String title; ///< Optional. Title of sent audio
private boolean isNewAudio;
private boolean isNewAudio; ///< True to upload a new audio, false to use a fileId
private String audioName;
private File newAudioFile; ///< New audio file
private InputStream newAudioStream; ///< New audio stream
public SendAudio() {
super();
@ -82,7 +88,10 @@ public class SendAudio {
*
* @param audio Path to the new file in your server
* @param audioName Name of the file itself
*
* @deprecated use {@link #setNewAudio(File)} or {@link #setNewAudio(InputStream)} instead.
*/
@Deprecated
public SendAudio setNewAudio(String audio, String audioName) {
this.audio = audio;
this.isNewAudio = true;
@ -90,6 +99,24 @@ public class SendAudio {
return this;
}
/**
* Use this method to set the audio to a new file
*
* @param file New audio file
*/
public SendAudio setNewAudio(File file) {
this.audio = file.getName();
this.isNewAudio = true;
this.newAudioFile = file;
return this;
}
public SendAudio setNewAudio(InputStream inputStream) {
this.isNewAudio = true;
this.newAudioStream = inputStream;
return this;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
@ -148,6 +175,14 @@ public class SendAudio {
return audioName;
}
public File getNewAudioFile() {
return newAudioFile;
}
public InputStream getNewAudioStream() {
return newAudioStream;
}
@Override
public String toString() {
return "SendAudio{" +
@ -158,7 +193,6 @@ public class SendAudio {
", performer='" + performer + '\'' +
", title='" + title + '\'' +
", isNewAudio=" + isNewAudio +
", audioName='" + audioName + '\'' +
'}';
}
}

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -28,8 +31,10 @@ public class SendDocument {
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
private boolean isNewDocument;
private boolean isNewDocument; ///< True to upload a new document, false to use a fileId
private String documentName;
private File newDocumentFile; ///< New document file
private InputStream newDocumentStream; ///< New document stream
public SendDocument() {
super();
@ -48,12 +53,27 @@ public class SendDocument {
return document;
}
/**
* Use this method to set the document to an document existing in Telegram system
*
* @param document File_id of the document to send
* @note The file_id must have already been received or sent by your bot
*/
public SendDocument setDocument(String document) {
this.document = document;
this.isNewDocument = false;
return this;
}
/**
* Use this method to set the document to a new file
*
* @param document Path to the new file in your server
* @param documentName Name of the file itself
*
* @deprecated use {@link #setNewDocument(File)} or {@link #setNewDocument(InputStream)} instead.
*/
@Deprecated
public SendDocument setNewDocument(String document, String documentName) {
this.document = document;
this.isNewDocument = true;
@ -61,6 +81,29 @@ public class SendDocument {
return this;
}
/**
* Use this method to set the document to a new file
*
* @param file New document file
*/
public SendDocument setNewDocument(File file) {
this.document = file.getName();
this.isNewDocument = true;
this.newDocumentFile = file;
return this;
}
/**
* Use this method to set the document to a new file
*
* @param inputStream New document file
*/
public SendDocument setNewDocument(InputStream inputStream) {
this.isNewDocument = true;
this.newDocumentStream = inputStream;
return this;
}
public boolean isNewDocument() {
return isNewDocument;
}
@ -69,6 +112,14 @@ public class SendDocument {
return documentName;
}
public File getNewDocumentFile() {
return newDocumentFile;
}
public InputStream getNewDocumentStream() {
return newDocumentStream;
}
public Integer getReplayToMessageId() {
return replayToMessageId;
}
@ -118,7 +169,6 @@ public class SendDocument {
", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup +
", isNewDocument=" + isNewDocument +
", documentName='" + documentName + '\'' +
'}';
}
}

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -30,7 +33,8 @@ public class SendPhoto {
private boolean isNewPhoto; ///< True if the photo must be uploaded from a file, file if it is a fileId
private String photoName; ///< Name of the photo
private File newPhotoFile; // New photo file
private InputStream newPhotoStream; // New photo stream
public SendPhoto() {
super();
@ -90,6 +94,14 @@ public class SendPhoto {
return photoName;
}
public File getNewPhotoFile() {
return newPhotoFile;
}
public InputStream getNewPhotoStream() {
return newPhotoStream;
}
public Boolean getDisableNotification() {
return disableNotification;
}
@ -104,6 +116,15 @@ public class SendPhoto {
return this;
}
/**
* Use this method to set the photo to a new file
*
* @param photo Path to the new file in your server
* @param photoName Name of the file itself
*
* @deprecated use {@link #setNewPhoto(File)} or {@link #setNewPhoto(InputStream)} instead.
*/
@Deprecated
public SendPhoto setNewPhoto(String photo, String photoName) {
this.photo = photo;
this.isNewPhoto = true;
@ -111,6 +132,19 @@ public class SendPhoto {
return this;
}
public SendPhoto setNewPhoto(File file) {
this.photo = file.getName();
this.newPhotoFile = file;
this.isNewPhoto = true;
return this;
}
public SendPhoto setNewPhoto(InputStream inputStream) {
this.newPhotoStream = inputStream;
this.isNewPhoto = true;
return this;
}
@Override
public String toString() {
return "SendPhoto{" +
@ -120,7 +154,6 @@ public class SendPhoto {
", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup +
", isNewPhoto=" + isNewPhoto +
", photoName='" + photoName + '\'' +
'}';
}
}

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -26,8 +29,10 @@ public class SendSticker {
private Integer replayToMessageId; ///< Optional. If the message is a reply, ID of the original message
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
private boolean isNewSticker;
private boolean isNewSticker; ///< True to upload a new sticker, false to use a fileId
private String stickerName;
private File newStickerFile; ///< New sticker file
private InputStream newStickerStream; ///< New sticker stream
public SendSticker() {
super();
@ -70,6 +75,15 @@ public class SendSticker {
return this;
}
/**
* Use this method to set the sticker to a new file
*
* @param sticker Path to the new file in your server
* @param stickerName Name of the file itself
*
* @deprecated use {@link #setNewSticker(File)} or {@link #setNewSticker(InputStream)} instead.
*/
@Deprecated
public SendSticker setSticker(String sticker, String stickerName) {
this.sticker = sticker;
this.isNewSticker = true;
@ -77,6 +91,19 @@ public class SendSticker {
return this;
}
public SendSticker setNewSticker(File file) {
this.sticker = file.getName();
this.isNewSticker = true;
this.newStickerFile = file;
return this;
}
public SendSticker setNewSticker(InputStream inputStream) {
this.isNewSticker = true;
this.newStickerStream = inputStream;
return this;
}
public Boolean getDisableNotification() {
return disableNotification;
}
@ -99,6 +126,14 @@ public class SendSticker {
return stickerName;
}
public File getNewStickerFile() {
return newStickerFile;
}
public InputStream getNewStickerStream() {
return newStickerStream;
}
@Override
public String toString() {
return "SendSticker{" +
@ -107,7 +142,6 @@ public class SendSticker {
", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup +
", isNewSticker=" + isNewSticker +
", stickerName='" + stickerName + '\'' +
'}';
}
}

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -37,6 +40,8 @@ public class SendVideo {
private boolean isNewVideo; ///< True to upload a new video, false to use a fileId
private String videoName; ///< Name of the video
private File newVideoFile; ///< New video file
private InputStream newVideoStream; ///< New video stream
public SendVideo() {
super();
@ -105,6 +110,14 @@ public class SendVideo {
return videoName;
}
public File getNewVideoFile() {
return newVideoFile;
}
public InputStream getNewVideoStream() {
return newVideoStream;
}
public Boolean getDisableNotification() {
return disableNotification;
}
@ -137,6 +150,15 @@ public class SendVideo {
return this;
}
/**
* Use this method to set the video to a new file
*
* @param video Path to the new file in your server
* @param videoName Name of the file itself
*
* @deprecated use {@link #setNewVideo(File)} or {@link #setNewVideo(InputStream)} instead.
*/
@Deprecated
public SendVideo setNewVideo(String video, String videoName) {
this.video = video;
this.isNewVideo = true;
@ -144,6 +166,19 @@ public class SendVideo {
return this;
}
public SendVideo setNewVideo(File file) {
this.video = file.getName();
this.isNewVideo = true;
this.newVideoFile = file;
return this;
}
public SendVideo setNewVideo(InputStream inputStream) {
this.isNewVideo = true;
this.newVideoStream = inputStream;
return this;
}
@Override
public String toString() {
return "SendVideo{" +
@ -154,7 +189,6 @@ public class SendVideo {
", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup +
", isNewVideo=" + isNewVideo +
", videoName='" + videoName + '\'' +
'}';
}
}

View File

@ -2,6 +2,9 @@ package org.telegram.telegrambots.api.methods.send;
import org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/**
* @author Ruben Bermudez
* @version 1.0
@ -14,13 +17,14 @@ public class SendVoice {
public static final String PATH = "sendvoice";
public static final String CHATID_FIELD = "chat_id";
public static final String AUDIO_FIELD = "audio";
public static final String VOICE_FIELD = "voice";
public static final String DISABLENOTIFICATION_FIELD = "disable_notification";
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
public static final String REPLYMARKUP_FIELD = "reply_markup";
public static final String DURATION_FIELD = "duration";
private String chatId; ///< Unique identifier for the chat sent message to (Or username for channels)
private String audio; ///< Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data.
private String voice; ///< Audio file to send. You can either pass a file_id as String to resend an audio that is already on the Telegram servers, or upload a new audio file using multipart/form-data.
/**
* Optional. Sends the message silently. iOS users will not receive a notification, Android
* users will receive a notification with no sound. Other apps coming soon
@ -32,6 +36,8 @@ public class SendVoice {
private boolean isNewVoice; ///< True to upload a new voice note, false to use a fileId
private String voiceName; ///< Name of the voice note
private File newVoiceFile; ///< New voice note file
private InputStream newVoiceStream; ///< New voice note stream
public SendVoice() {
super();
@ -41,7 +47,7 @@ public class SendVoice {
public String toString() {
return "SendVoice{" +
"chatId='" + chatId + '\'' +
", audio='" + audio + '\'' +
", voice='" + voice + '\'' +
", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup +
", duration=" + duration +
@ -71,20 +77,76 @@ public class SendVoice {
return this;
}
public String getAudio() {
return audio;
public String getVoice() {
return voice;
}
public SendVoice setAudio(String audio) {
this.audio = audio;
/**
* @deprecated Use {@link #getVoice()} instead
*/
@Deprecated
public String getAudio() {
return voice;
}
public SendVoice setVoice(String voice) {
this.voice = voice;
this.isNewVoice = false;
return this;
}
public SendVoice setNewAudio(String audio, String audioName) {
this.audio = audio;
/**
* @deprecated Use {@link #setVoice(String)} instead
*/
@Deprecated
public SendVoice setAudio(String voice) {
this.voice = voice;
this.isNewVoice = false;
this.voiceName = audioName;
return this;
}
/**
* Use this method to set the voice to a new file
*
* @param voice Path to the new file in your server
* @param voiceName Name of the file itself
*
* @deprecated use {@link #setNewVoice(File)} or {@link #setNewVoice(InputStream)} instead.
*/
@Deprecated
public SendVoice setNewVoice(String voice, String voiceName) {
this.voice = voice;
this.isNewVoice = false;
this.voiceName = voiceName;
return this;
}
/**
* Use this method to set the voice to a new file
*
* @param voice Path to the new file in your server
* @param voiceName Name of the file itself
*
* @deprecated use {@link #setNewVoice(File)} or {@link #setNewVoice(InputStream)} instead.
*/
@Deprecated
public SendVoice setNewAudio(String voice, String voiceName) {
this.voice = voice;
this.isNewVoice = false;
this.voiceName = voiceName;
return this;
}
public SendVoice setNewVoice(File file) {
this.voice = file.getName();
this.isNewVoice = true;
this.newVoiceFile = file;
return this;
}
public SendVoice setNewVoice(InputStream inputStream) {
this.isNewVoice = true;
this.newVoiceStream = inputStream;
return this;
}
@ -122,4 +184,12 @@ public class SendVoice {
public String getVoiceName() {
return voiceName;
}
public File getNewVoiceFile() {
return newVoiceFile;
}
public InputStream getNewVoiceStream() {
return newVoiceStream;
}
}

View File

@ -28,6 +28,12 @@ public class Chat implements IBotApiObject {
private static final String CHANNELCHATTYPE = "channel";
private static final String SUPERGROUPCHATTYPE = "supergroup";
@JsonProperty(ID_FIELD)
/**
* Unique identifier for this chat.
* 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.
*/
private Long id; ///< Unique identifier for this chat, not exciding 1e13 by absolute value
@JsonProperty(TYPE_FIELD)
private String type; ///< Type of the chat, one of private, group or channel

View File

@ -111,12 +111,40 @@ public class Message implements IBotApiObject {
@JsonProperty(CAPTION_FIELD)
private String caption; ///< Optional. Caption for the document, photo or video, 0-200 characters
@JsonProperty(SUPERGROUPCREATED_FIELD)
private Boolean superGroupCreated; ///< Optional. Informs that the supergroup has been created
/**
* Optional. Service message: the supergroup has been created.
* This field cant be received in a message coming through updates,
* because bot cant 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.
*/
private Boolean superGroupCreated;
@JsonProperty(CHANNELCHATCREATED_FIELD)
private Boolean channelChatCreated; ///< Optional. Informs that the channel has been created
/**
* Optional. Service message: the channel has been created.
* This field cant be received in a message coming through updates,
* because bot cant 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.
*/
private Boolean channelChatCreated;
@JsonProperty(MIGRATETOCHAT_FIELD)
/**
* 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.
*/
private Long migrateToChatId; ///< Optional. The chat has been migrated to a chat with specified identifier, not exceeding 1e13 by absolute value
@JsonProperty(MIGRATEFROMCHAT_FIELD)
/**
* 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.
*/
private Long migrateFromChatId; ///< Optional. The chat has been migrated from a chat with specified identifier, not exceeding 1e13 by absolute value
@JsonProperty(EDITDATE_FIELD)
private Integer editDate; ///< Optional. Date the message was last edited in Unix time

View File

@ -19,7 +19,6 @@ import java.io.IOException;
* @date 22 of June of 2015
*/
public class ForceReplyKeyboard implements ReplyKeyboard {
private static final String FORCEREPLY_FIELD = "force_reply";
private static final String SELECTIVE_FIELD = "selective";
/**
@ -55,11 +54,6 @@ public class ForceReplyKeyboard implements ReplyKeyboard {
return forceReply;
}
public ForceReplyKeyboard setForceReply(Boolean forceReply) {
this.forceReply = forceReply;
return this;
}
public Boolean getSelective() {
return selective;
}

View File

@ -19,7 +19,6 @@ import java.io.IOException;
* @date 20 of June of 2015
*/
public class ReplyKeyboardHide implements ReplyKeyboard {
private static final String HIDEKEYBOARD_FIELD = "hide_keyboard";
private static final String SELECTIVE_FIELD = "selective";
@JsonProperty(HIDEKEYBOARD_FIELD)
@ -34,7 +33,7 @@ public class ReplyKeyboardHide implements ReplyKeyboard {
public ReplyKeyboardHide() {
super();
this.selective = true;
this.hideKeyboard = true;
}
public ReplyKeyboardHide(JSONObject jsonObject) {
@ -51,11 +50,6 @@ public class ReplyKeyboardHide implements ReplyKeyboard {
return hideKeyboard;
}
public ReplyKeyboardHide setHideKeyboard(Boolean hideKeyboard) {
this.hideKeyboard = hideKeyboard;
return this;
}
public Boolean getSelective() {
return selective;
}

View File

@ -74,12 +74,14 @@ import static org.telegram.telegrambots.Constants.ERRORDESCRIPTIONFIELD;
*/
@SuppressWarnings("unused")
public abstract class AbsSender {
private static final ContentType TEXT_PLAIN_CONTENT_TYPE = ContentType.create("text/plain", StandardCharsets.UTF_8);
private final ExecutorService exe = Executors.newSingleThreadExecutor();
private volatile CloseableHttpClient httpclient;
private volatile RequestConfig requestConfig;
private static final int SOCKET_TIMEOUT = 75 * 1000;
public AbsSender() {
AbsSender() {
httpclient = HttpClientBuilder.create()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setConnectionTimeToLive(70, TimeUnit.SECONDS)
@ -502,15 +504,21 @@ public abstract class AbsSender {
if (sendDocument.isNewDocument()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendDocument.CHATID_FIELD, sendDocument.getChatId());
builder.addBinaryBody(SendDocument.DOCUMENT_FIELD, new java.io.File(sendDocument.getDocument()), ContentType.APPLICATION_OCTET_STREAM, sendDocument.getDocumentName());
if (sendDocument.getNewDocumentFile() != null) {
builder.addBinaryBody(SendDocument.DOCUMENT_FIELD, sendDocument.getNewDocumentFile());
} else if (sendDocument.getNewDocumentStream() != null) {
builder.addBinaryBody(SendDocument.DOCUMENT_FIELD, sendDocument.getNewDocumentStream());
} else {
builder.addBinaryBody(SendDocument.DOCUMENT_FIELD, new java.io.File(sendDocument.getDocument()), ContentType.APPLICATION_OCTET_STREAM, sendDocument.getDocumentName());
}
if (sendDocument.getReplayMarkup() != null) {
builder.addTextBody(SendDocument.REPLYMARKUP_FIELD, sendDocument.getReplayMarkup().toJson().toString());
builder.addTextBody(SendDocument.REPLYMARKUP_FIELD, sendDocument.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendDocument.getReplayToMessageId() != null) {
builder.addTextBody(SendDocument.REPLYTOMESSAGEID_FIELD, sendDocument.getReplayToMessageId().toString());
}
if (sendDocument.getCaption() != null) {
builder.addTextBody(SendDocument.CAPTION_FIELD, sendDocument.getCaption(), ContentType.create("text/plain", StandardCharsets.UTF_8));
builder.addTextBody(SendDocument.CAPTION_FIELD, sendDocument.getCaption(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendDocument.getDisableNotification() != null) {
builder.addTextBody(SendDocument.DISABLENOTIFICATION_FIELD, sendDocument.getDisableNotification().toString());
@ -562,15 +570,21 @@ public abstract class AbsSender {
if (sendPhoto.isNewPhoto()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendPhoto.CHATID_FIELD, sendPhoto.getChatId());
builder.addBinaryBody(SendPhoto.PHOTO_FIELD, new java.io.File(sendPhoto.getPhoto()), ContentType.APPLICATION_OCTET_STREAM, sendPhoto.getPhotoName());
if (sendPhoto.getNewPhotoFile() != null) {
builder.addBinaryBody(SendPhoto.PHOTO_FIELD, sendPhoto.getNewPhotoFile());
} else if (sendPhoto.getNewPhotoStream() != null) {
builder.addBinaryBody(SendPhoto.PHOTO_FIELD, sendPhoto.getNewPhotoStream());
} else {
builder.addBinaryBody(SendPhoto.PHOTO_FIELD, new java.io.File(sendPhoto.getPhoto()), ContentType.APPLICATION_OCTET_STREAM, sendPhoto.getPhotoName());
}
if (sendPhoto.getReplayMarkup() != null) {
builder.addTextBody(SendPhoto.REPLYMARKUP_FIELD, sendPhoto.getReplayMarkup().toJson().toString());
builder.addTextBody(SendPhoto.REPLYMARKUP_FIELD, sendPhoto.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendPhoto.getReplayToMessageId() != null) {
builder.addTextBody(SendPhoto.REPLYTOMESSAGEID_FIELD, sendPhoto.getReplayToMessageId().toString());
}
if (sendPhoto.getCaption() != null) {
builder.addTextBody(SendPhoto.CAPTION_FIELD, sendPhoto.getCaption(), ContentType.create("text/plain", StandardCharsets.UTF_8));
builder.addTextBody(SendPhoto.CAPTION_FIELD, sendPhoto.getCaption(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendPhoto.getDisableNotification() != null) {
builder.addTextBody(SendPhoto.DISABLENOTIFICATION_FIELD, sendPhoto.getDisableNotification().toString());
@ -622,15 +636,21 @@ public abstract class AbsSender {
if (sendVideo.isNewVideo()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendVideo.CHATID_FIELD, sendVideo.getChatId());
builder.addBinaryBody(SendVideo.VIDEO_FIELD, new java.io.File(sendVideo.getVideo()), ContentType.APPLICATION_OCTET_STREAM, sendVideo.getVideoName());
if (sendVideo.getNewVideoFile() != null) {
builder.addBinaryBody(SendVideo.VIDEO_FIELD, sendVideo.getNewVideoFile());
} else if (sendVideo.getNewVideoStream() != null) {
builder.addBinaryBody(SendVideo.VIDEO_FIELD, sendVideo.getNewVideoStream());
} else {
builder.addBinaryBody(SendVideo.VIDEO_FIELD, new java.io.File(sendVideo.getVideo()), ContentType.APPLICATION_OCTET_STREAM, sendVideo.getVideoName());
}
if (sendVideo.getReplayMarkup() != null) {
builder.addTextBody(SendVideo.REPLYMARKUP_FIELD, sendVideo.getReplayMarkup().toJson().toString());
builder.addTextBody(SendVideo.REPLYMARKUP_FIELD, sendVideo.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendVideo.getReplayToMessageId() != null) {
builder.addTextBody(SendVideo.REPLYTOMESSAGEID_FIELD, sendVideo.getReplayToMessageId().toString());
}
if (sendVideo.getCaption() != null) {
builder.addTextBody(SendVideo.CAPTION_FIELD, sendVideo.getCaption(), ContentType.create("text/plain", StandardCharsets.UTF_8));
builder.addTextBody(SendVideo.CAPTION_FIELD, sendVideo.getCaption(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendVideo.getDuration() != null) {
builder.addTextBody(SendVideo.DURATION_FIELD, sendVideo.getDuration().toString());
@ -701,9 +721,15 @@ public abstract class AbsSender {
if (sendSticker.isNewSticker()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendSticker.CHATID_FIELD, sendSticker.getChatId());
builder.addBinaryBody(SendSticker.STICKER_FIELD, new java.io.File(sendSticker.getSticker()), ContentType.APPLICATION_OCTET_STREAM, sendSticker.getStickerName());
if (sendSticker.getNewStickerFile() != null) {
builder.addBinaryBody(SendSticker.STICKER_FIELD, sendSticker.getNewStickerFile());
} else if (sendSticker.getNewStickerStream() != null) {
builder.addBinaryBody(SendSticker.STICKER_FIELD, sendSticker.getNewStickerStream());
} else {
builder.addBinaryBody(SendSticker.STICKER_FIELD, new java.io.File(sendSticker.getSticker()), ContentType.APPLICATION_OCTET_STREAM, sendSticker.getStickerName());
}
if (sendSticker.getReplayMarkup() != null) {
builder.addTextBody(SendSticker.REPLYMARKUP_FIELD, sendSticker.getReplayMarkup().toJson().toString());
builder.addTextBody(SendSticker.REPLYMARKUP_FIELD, sendSticker.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendSticker.getReplayToMessageId() != null) {
builder.addTextBody(SendSticker.REPLYTOMESSAGEID_FIELD, sendSticker.getReplayToMessageId().toString());
@ -763,9 +789,15 @@ public abstract class AbsSender {
if (sendAudio.isNewAudio()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendAudio.CHATID_FIELD, sendAudio.getChatId());
builder.addBinaryBody(SendAudio.AUDIO_FIELD, new java.io.File(sendAudio.getAudio()), ContentType.create("audio/mpeg"), sendAudio.getAudioName());
if (sendAudio.getNewAudioFile() != null) {
builder.addBinaryBody(SendAudio.AUDIO_FIELD, sendAudio.getNewAudioFile());
} else if (sendAudio.getNewAudioStream() != null) {
builder.addBinaryBody(SendAudio.AUDIO_FIELD, sendAudio.getNewAudioStream());
} else {
builder.addBinaryBody(SendAudio.AUDIO_FIELD, new java.io.File(sendAudio.getAudio()), ContentType.create("audio/mpeg"), sendAudio.getAudioName());
}
if (sendAudio.getReplayMarkup() != null) {
builder.addTextBody(SendAudio.REPLYMARKUP_FIELD, sendAudio.getReplayMarkup().toJson().toString());
builder.addTextBody(SendAudio.REPLYMARKUP_FIELD, sendAudio.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendAudio.getReplayToMessageId() != null) {
builder.addTextBody(SendAudio.REPLYTOMESSAGEID_FIELD, sendAudio.getReplayToMessageId().toString());
@ -831,6 +863,7 @@ public abstract class AbsSender {
/**
* Sends a voice note using Send Voice method (https://core.telegram.org/bots/api#sendvoice)
* For this to work, your audio must be in an .ogg file encoded with OPUS
* @param sendVoice Information to send
* @return If success, the sent Message is returned
* @throws TelegramApiException If there is any error sending the audio
@ -845,9 +878,15 @@ public abstract class AbsSender {
if (sendVoice.isNewVoice()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendVoice.CHATID_FIELD, sendVoice.getChatId());
builder.addBinaryBody(SendVoice.AUDIO_FIELD, new java.io.File(sendVoice.getAudio()), ContentType.create("audio/ogg"), sendVoice.getVoiceName());
if (sendVoice.getNewVoiceFile() != null) {
builder.addBinaryBody(SendVoice.VOICE_FIELD, sendVoice.getNewVoiceFile());
} else if (sendVoice.getNewVoiceStream() != null) {
builder.addBinaryBody(SendVoice.VOICE_FIELD, sendVoice.getNewVoiceStream());
} else {
builder.addBinaryBody(SendVoice.VOICE_FIELD, new java.io.File(sendVoice.getVoice()), ContentType.create("audio/ogg"), sendVoice.getVoiceName());
}
if (sendVoice.getReplayMarkup() != null) {
builder.addTextBody(SendVoice.REPLYMARKUP_FIELD, sendVoice.getReplayMarkup().toJson().toString());
builder.addTextBody(SendVoice.REPLYMARKUP_FIELD, sendVoice.getReplayMarkup().toJson().toString(), TEXT_PLAIN_CONTENT_TYPE);
}
if (sendVoice.getReplayToMessageId() != null) {
builder.addTextBody(SendVoice.REPLYTOMESSAGEID_FIELD, sendVoice.getReplayToMessageId().toString());
@ -863,7 +902,7 @@ public abstract class AbsSender {
} else {
List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair(SendVoice.CHATID_FIELD, sendVoice.getChatId()));
nameValuePairs.add(new BasicNameValuePair(SendVoice.AUDIO_FIELD, sendVoice.getAudio()));
nameValuePairs.add(new BasicNameValuePair(SendVoice.VOICE_FIELD, sendVoice.getVoice()));
if (sendVoice.getReplayMarkup() != null) {
nameValuePairs.add(new BasicNameValuePair(SendVoice.REPLYMARKUP_FIELD, sendVoice.getReplayMarkup().toJson().toString()));
}

View File

@ -14,7 +14,7 @@ import java.util.function.BiConsumer;
/**
* This class adds command functionality to the TelegramLongPollingBot
*
* @author tschulz
* @author Timo Schulz (Mit0x2)
*/
public abstract class TelegramLongPollingCommandBot extends TelegramLongPollingBot implements ICommandRegistry {
private final CommandRegistry commandRegistry;

View File

@ -1,12 +1,13 @@
package org.telegram.telegrambots.bots.commands;
import org.telegram.telegrambots.api.objects.Chat;
import org.telegram.telegrambots.api.objects.User;
import org.telegram.telegrambots.bots.AbsSender;
/**
* Representation of a command, which can be executed
*
* @author tschulz
* @author Timo Schulz (Mit0x2)
*/
public abstract class BotCommand {
public final static String COMMAND_INIT_CHARACTER = "/";
@ -69,8 +70,9 @@ public abstract class BotCommand {
* Execute the command
*
* @param absSender absSender to send messages over
* @param user the user who sent the command
* @param chat the chat, to be able to send replies
* @param arguments passed arguments
*/
public abstract void execute(AbsSender absSender, Chat chat, String[] arguments);
public abstract void execute(AbsSender absSender, User user, Chat chat, String[] arguments);
}

View File

@ -10,16 +10,15 @@ import java.util.Map;
import java.util.function.BiConsumer;
/**
* @author tschulz
* This class manages all the commands for a bot. You can register and deregister commands on demand
*
* @author Timo Schulz (Mit0x2)
*/
public final class CommandRegistry implements ICommandRegistry {
private final Map<String, BotCommand> commandRegistryMap = new HashMap<>();
private BiConsumer<AbsSender, Message> defaultConsumer;
public CommandRegistry() {
}
@Override
public void registerDefaultAction(BiConsumer<AbsSender, Message> defaultConsumer) {
this.defaultConsumer = defaultConsumer;
@ -87,7 +86,7 @@ public final class CommandRegistry implements ICommandRegistry {
if (commandRegistryMap.containsKey(command)) {
String[] parameters = Arrays.copyOfRange(commandSplit, 1, commandSplit.length);
commandRegistryMap.get(command).execute(absSender, message.getChat(), parameters);
commandRegistryMap.get(command).execute(absSender, message.getFrom(), message.getChat(), parameters);
return true;
} else if (defaultConsumer != null) {
defaultConsumer.accept(absSender, message);

View File

@ -8,7 +8,9 @@ import java.util.Map;
import java.util.function.BiConsumer;
/**
* This Interface represents the gateway for registering and deregistering commands.
*
* @author Timo Schulz (Mit0x2)
*/
public interface ICommandRegistry {