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 ## 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`. 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` 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 ```java
@ -59,6 +59,8 @@ https://telegram.me/TGlanguagesbot (**Send files uploding them**)
https://telegram.me/RaeBot (**Inline support**) 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. You can see code for those bots at [TelegramBotsExample](https://github.com/rubenlagus/TelegramBotsExample) project.
## Telegram Bot API ## Telegram Bot API

View File

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

View File

@ -19,12 +19,12 @@ import java.io.IOException;
public class ForwardMessage extends BotApiMethod<Message> { public class ForwardMessage extends BotApiMethod<Message> {
public static final String PATH = "forwardmessage"; public static final String PATH = "forwardmessage";
public static final String CHATID_FIELD = "chat_id"; private static final String CHATID_FIELD = "chat_id";
public static final String FROMCHATID_FIELD = "from_chat_id"; private static final String FROMCHATID_FIELD = "from_chat_id";
public static final String MESSAGEID_FIELD = "message_id"; private static final String MESSAGEID_FIELD = "message_id";
public static final String DISABLENOTIFICATION_FIELD = "disable_notification"; 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 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 private Integer messageId; ///< Unique message identifier
/** /**
* Optional. Sends the message silently. * Optional. Sends the message silently.
@ -47,11 +47,17 @@ public class ForwardMessage extends BotApiMethod<Message> {
return this; return this;
} }
public Integer getFromChatId() { @Deprecated
public ForwardMessage setFromChatId(Integer fromChatId) {
this.fromChatId = fromChatId.toString();
return this;
}
public String getFromChatId() {
return fromChatId; return fromChatId;
} }
public ForwardMessage setFromChatId(Integer fromChatId) { public ForwardMessage setFromChatId(String fromChatId) {
this.fromChatId = fromChatId; this.fromChatId = fromChatId;
return this; return this;
} }
@ -82,7 +88,7 @@ public class ForwardMessage extends BotApiMethod<Message> {
gen.writeStartObject(); gen.writeStartObject();
gen.writeStringField(METHOD_FIELD, PATH); gen.writeStringField(METHOD_FIELD, PATH);
gen.writeStringField(CHATID_FIELD, chatId); gen.writeStringField(CHATID_FIELD, chatId);
gen.writeNumberField(FROMCHATID_FIELD, fromChatId); gen.writeStringField(FROMCHATID_FIELD, fromChatId);
gen.writeNumberField(MESSAGEID_FIELD, messageId); gen.writeNumberField(MESSAGEID_FIELD, messageId);
if (disableNotification != null) { if (disableNotification != null) {
gen.writeBooleanField(DISABLENOTIFICATION_FIELD, disableNotification); 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
@ -36,8 +39,11 @@ public class SendAudio {
private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard private ReplyKeyboard replayMarkup; ///< Optional. JSON-serialized object for a custom reply keyboard
private String performer; ///< Optional. Performer of sent audio private String performer; ///< Optional. Performer of sent audio
private String title; ///< Optional. Title 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 String audioName;
private File newAudioFile; ///< New audio file
private InputStream newAudioStream; ///< New audio stream
public SendAudio() { public SendAudio() {
super(); super();
@ -82,7 +88,10 @@ public class SendAudio {
* *
* @param audio Path to the new file in your server * @param audio Path to the new file in your server
* @param audioName Name of the file itself * @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) { public SendAudio setNewAudio(String audio, String audioName) {
this.audio = audio; this.audio = audio;
this.isNewAudio = true; this.isNewAudio = true;
@ -90,6 +99,24 @@ public class SendAudio {
return this; 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() { public Integer getReplayToMessageId() {
return replayToMessageId; return replayToMessageId;
} }
@ -148,6 +175,14 @@ public class SendAudio {
return audioName; return audioName;
} }
public File getNewAudioFile() {
return newAudioFile;
}
public InputStream getNewAudioStream() {
return newAudioStream;
}
@Override @Override
public String toString() { public String toString() {
return "SendAudio{" + return "SendAudio{" +
@ -158,7 +193,6 @@ public class SendAudio {
", performer='" + performer + '\'' + ", performer='" + performer + '\'' +
", title='" + title + '\'' + ", title='" + title + '\'' +
", isNewAudio=" + isNewAudio + ", 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @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 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 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 String documentName;
private File newDocumentFile; ///< New document file
private InputStream newDocumentStream; ///< New document stream
public SendDocument() { public SendDocument() {
super(); super();
@ -48,12 +53,27 @@ public class SendDocument {
return document; 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) { public SendDocument setDocument(String document) {
this.document = document; this.document = document;
this.isNewDocument = false; this.isNewDocument = false;
return this; 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) { public SendDocument setNewDocument(String document, String documentName) {
this.document = document; this.document = document;
this.isNewDocument = true; this.isNewDocument = true;
@ -61,6 +81,29 @@ public class SendDocument {
return this; 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() { public boolean isNewDocument() {
return isNewDocument; return isNewDocument;
} }
@ -69,6 +112,14 @@ public class SendDocument {
return documentName; return documentName;
} }
public File getNewDocumentFile() {
return newDocumentFile;
}
public InputStream getNewDocumentStream() {
return newDocumentStream;
}
public Integer getReplayToMessageId() { public Integer getReplayToMessageId() {
return replayToMessageId; return replayToMessageId;
} }
@ -118,7 +169,6 @@ public class SendDocument {
", replayToMessageId=" + replayToMessageId + ", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup + ", replayMarkup=" + replayMarkup +
", isNewDocument=" + isNewDocument + ", 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @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 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 String photoName; ///< Name of the photo
private File newPhotoFile; // New photo file
private InputStream newPhotoStream; // New photo stream
public SendPhoto() { public SendPhoto() {
super(); super();
@ -90,6 +94,14 @@ public class SendPhoto {
return photoName; return photoName;
} }
public File getNewPhotoFile() {
return newPhotoFile;
}
public InputStream getNewPhotoStream() {
return newPhotoStream;
}
public Boolean getDisableNotification() { public Boolean getDisableNotification() {
return disableNotification; return disableNotification;
} }
@ -104,6 +116,15 @@ public class SendPhoto {
return this; 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) { public SendPhoto setNewPhoto(String photo, String photoName) {
this.photo = photo; this.photo = photo;
this.isNewPhoto = true; this.isNewPhoto = true;
@ -111,6 +132,19 @@ public class SendPhoto {
return this; 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 @Override
public String toString() { public String toString() {
return "SendPhoto{" + return "SendPhoto{" +
@ -120,7 +154,6 @@ public class SendPhoto {
", replayToMessageId=" + replayToMessageId + ", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup + ", replayMarkup=" + replayMarkup +
", isNewPhoto=" + isNewPhoto + ", 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @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 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 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 String stickerName;
private File newStickerFile; ///< New sticker file
private InputStream newStickerStream; ///< New sticker stream
public SendSticker() { public SendSticker() {
super(); super();
@ -70,6 +75,15 @@ public class SendSticker {
return this; 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) { public SendSticker setSticker(String sticker, String stickerName) {
this.sticker = sticker; this.sticker = sticker;
this.isNewSticker = true; this.isNewSticker = true;
@ -77,6 +91,19 @@ public class SendSticker {
return this; 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() { public Boolean getDisableNotification() {
return disableNotification; return disableNotification;
} }
@ -99,6 +126,14 @@ public class SendSticker {
return stickerName; return stickerName;
} }
public File getNewStickerFile() {
return newStickerFile;
}
public InputStream getNewStickerStream() {
return newStickerStream;
}
@Override @Override
public String toString() { public String toString() {
return "SendSticker{" + return "SendSticker{" +
@ -107,7 +142,6 @@ public class SendSticker {
", replayToMessageId=" + replayToMessageId + ", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup + ", replayMarkup=" + replayMarkup +
", isNewSticker=" + isNewSticker + ", 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @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 boolean isNewVideo; ///< True to upload a new video, false to use a fileId
private String videoName; ///< Name of the video private String videoName; ///< Name of the video
private File newVideoFile; ///< New video file
private InputStream newVideoStream; ///< New video stream
public SendVideo() { public SendVideo() {
super(); super();
@ -105,6 +110,14 @@ public class SendVideo {
return videoName; return videoName;
} }
public File getNewVideoFile() {
return newVideoFile;
}
public InputStream getNewVideoStream() {
return newVideoStream;
}
public Boolean getDisableNotification() { public Boolean getDisableNotification() {
return disableNotification; return disableNotification;
} }
@ -137,6 +150,15 @@ public class SendVideo {
return this; 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) { public SendVideo setNewVideo(String video, String videoName) {
this.video = video; this.video = video;
this.isNewVideo = true; this.isNewVideo = true;
@ -144,6 +166,19 @@ public class SendVideo {
return this; 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 @Override
public String toString() { public String toString() {
return "SendVideo{" + return "SendVideo{" +
@ -154,7 +189,6 @@ public class SendVideo {
", replayToMessageId=" + replayToMessageId + ", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup + ", replayMarkup=" + replayMarkup +
", isNewVideo=" + isNewVideo + ", 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 org.telegram.telegrambots.api.objects.replykeyboard.ReplyKeyboard;
import java.io.File;
import java.io.InputStream;
/** /**
* @author Ruben Bermudez * @author Ruben Bermudez
* @version 1.0 * @version 1.0
@ -14,13 +17,14 @@ public class SendVoice {
public static final String PATH = "sendvoice"; public static final String PATH = "sendvoice";
public static final String CHATID_FIELD = "chat_id"; 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 DISABLENOTIFICATION_FIELD = "disable_notification";
public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id"; public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id";
public static final String REPLYMARKUP_FIELD = "reply_markup"; public static final String REPLYMARKUP_FIELD = "reply_markup";
public static final String DURATION_FIELD = "duration"; public static final String DURATION_FIELD = "duration";
private String chatId; ///< Unique identifier for the chat sent message to (Or username for channels) 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 * 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 * 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 boolean isNewVoice; ///< True to upload a new voice note, false to use a fileId
private String voiceName; ///< Name of the voice note private String voiceName; ///< Name of the voice note
private File newVoiceFile; ///< New voice note file
private InputStream newVoiceStream; ///< New voice note stream
public SendVoice() { public SendVoice() {
super(); super();
@ -41,7 +47,7 @@ public class SendVoice {
public String toString() { public String toString() {
return "SendVoice{" + return "SendVoice{" +
"chatId='" + chatId + '\'' + "chatId='" + chatId + '\'' +
", audio='" + audio + '\'' + ", voice='" + voice + '\'' +
", replayToMessageId=" + replayToMessageId + ", replayToMessageId=" + replayToMessageId +
", replayMarkup=" + replayMarkup + ", replayMarkup=" + replayMarkup +
", duration=" + duration + ", duration=" + duration +
@ -71,20 +77,76 @@ public class SendVoice {
return this; return this;
} }
public String getAudio() { public String getVoice() {
return audio; 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; this.isNewVoice = false;
return this; 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.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; return this;
} }
@ -122,4 +184,12 @@ public class SendVoice {
public String getVoiceName() { public String getVoiceName() {
return voiceName; 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 CHANNELCHATTYPE = "channel";
private static final String SUPERGROUPCHATTYPE = "supergroup"; private static final String SUPERGROUPCHATTYPE = "supergroup";
@JsonProperty(ID_FIELD) @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 private Long id; ///< Unique identifier for this chat, not exciding 1e13 by absolute value
@JsonProperty(TYPE_FIELD) @JsonProperty(TYPE_FIELD)
private String type; ///< Type of the chat, one of private, group or channel 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) @JsonProperty(CAPTION_FIELD)
private String caption; ///< Optional. Caption for the document, photo or video, 0-200 characters private String caption; ///< Optional. Caption for the document, photo or video, 0-200 characters
@JsonProperty(SUPERGROUPCREATED_FIELD) @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) @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) @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 private Long migrateToChatId; ///< Optional. The chat has been migrated to a chat with specified identifier, not exceeding 1e13 by absolute value
@JsonProperty(MIGRATEFROMCHAT_FIELD) @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 private Long migrateFromChatId; ///< Optional. The chat has been migrated from a chat with specified identifier, not exceeding 1e13 by absolute value
@JsonProperty(EDITDATE_FIELD) @JsonProperty(EDITDATE_FIELD)
private Integer editDate; ///< Optional. Date the message was last edited in Unix time 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 * @date 22 of June of 2015
*/ */
public class ForceReplyKeyboard implements ReplyKeyboard { public class ForceReplyKeyboard implements ReplyKeyboard {
private static final String FORCEREPLY_FIELD = "force_reply"; private static final String FORCEREPLY_FIELD = "force_reply";
private static final String SELECTIVE_FIELD = "selective"; private static final String SELECTIVE_FIELD = "selective";
/** /**
@ -55,11 +54,6 @@ public class ForceReplyKeyboard implements ReplyKeyboard {
return forceReply; return forceReply;
} }
public ForceReplyKeyboard setForceReply(Boolean forceReply) {
this.forceReply = forceReply;
return this;
}
public Boolean getSelective() { public Boolean getSelective() {
return selective; return selective;
} }

View File

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

View File

@ -74,12 +74,14 @@ import static org.telegram.telegrambots.Constants.ERRORDESCRIPTIONFIELD;
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public abstract class AbsSender { 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 final ExecutorService exe = Executors.newSingleThreadExecutor();
private volatile CloseableHttpClient httpclient; private volatile CloseableHttpClient httpclient;
private volatile RequestConfig requestConfig; private volatile RequestConfig requestConfig;
private static final int SOCKET_TIMEOUT = 75 * 1000; private static final int SOCKET_TIMEOUT = 75 * 1000;
public AbsSender() { AbsSender() {
httpclient = HttpClientBuilder.create() httpclient = HttpClientBuilder.create()
.setSSLHostnameVerifier(new NoopHostnameVerifier()) .setSSLHostnameVerifier(new NoopHostnameVerifier())
.setConnectionTimeToLive(70, TimeUnit.SECONDS) .setConnectionTimeToLive(70, TimeUnit.SECONDS)
@ -502,15 +504,21 @@ public abstract class AbsSender {
if (sendDocument.isNewDocument()) { if (sendDocument.isNewDocument()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendDocument.CHATID_FIELD, sendDocument.getChatId()); 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) { 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) { if (sendDocument.getReplayToMessageId() != null) {
builder.addTextBody(SendDocument.REPLYTOMESSAGEID_FIELD, sendDocument.getReplayToMessageId().toString()); builder.addTextBody(SendDocument.REPLYTOMESSAGEID_FIELD, sendDocument.getReplayToMessageId().toString());
} }
if (sendDocument.getCaption() != null) { 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) { if (sendDocument.getDisableNotification() != null) {
builder.addTextBody(SendDocument.DISABLENOTIFICATION_FIELD, sendDocument.getDisableNotification().toString()); builder.addTextBody(SendDocument.DISABLENOTIFICATION_FIELD, sendDocument.getDisableNotification().toString());
@ -562,15 +570,21 @@ public abstract class AbsSender {
if (sendPhoto.isNewPhoto()) { if (sendPhoto.isNewPhoto()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendPhoto.CHATID_FIELD, sendPhoto.getChatId()); 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) { 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) { if (sendPhoto.getReplayToMessageId() != null) {
builder.addTextBody(SendPhoto.REPLYTOMESSAGEID_FIELD, sendPhoto.getReplayToMessageId().toString()); builder.addTextBody(SendPhoto.REPLYTOMESSAGEID_FIELD, sendPhoto.getReplayToMessageId().toString());
} }
if (sendPhoto.getCaption() != null) { 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) { if (sendPhoto.getDisableNotification() != null) {
builder.addTextBody(SendPhoto.DISABLENOTIFICATION_FIELD, sendPhoto.getDisableNotification().toString()); builder.addTextBody(SendPhoto.DISABLENOTIFICATION_FIELD, sendPhoto.getDisableNotification().toString());
@ -622,15 +636,21 @@ public abstract class AbsSender {
if (sendVideo.isNewVideo()) { if (sendVideo.isNewVideo()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendVideo.CHATID_FIELD, sendVideo.getChatId()); 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) { 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) { if (sendVideo.getReplayToMessageId() != null) {
builder.addTextBody(SendVideo.REPLYTOMESSAGEID_FIELD, sendVideo.getReplayToMessageId().toString()); builder.addTextBody(SendVideo.REPLYTOMESSAGEID_FIELD, sendVideo.getReplayToMessageId().toString());
} }
if (sendVideo.getCaption() != null) { 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) { if (sendVideo.getDuration() != null) {
builder.addTextBody(SendVideo.DURATION_FIELD, sendVideo.getDuration().toString()); builder.addTextBody(SendVideo.DURATION_FIELD, sendVideo.getDuration().toString());
@ -701,9 +721,15 @@ public abstract class AbsSender {
if (sendSticker.isNewSticker()) { if (sendSticker.isNewSticker()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendSticker.CHATID_FIELD, sendSticker.getChatId()); 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) { 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) { if (sendSticker.getReplayToMessageId() != null) {
builder.addTextBody(SendSticker.REPLYTOMESSAGEID_FIELD, sendSticker.getReplayToMessageId().toString()); builder.addTextBody(SendSticker.REPLYTOMESSAGEID_FIELD, sendSticker.getReplayToMessageId().toString());
@ -763,9 +789,15 @@ public abstract class AbsSender {
if (sendAudio.isNewAudio()) { if (sendAudio.isNewAudio()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendAudio.CHATID_FIELD, sendAudio.getChatId()); 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) { 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) { if (sendAudio.getReplayToMessageId() != null) {
builder.addTextBody(SendAudio.REPLYTOMESSAGEID_FIELD, sendAudio.getReplayToMessageId().toString()); 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) * 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 * @param sendVoice Information to send
* @return If success, the sent Message is returned * @return If success, the sent Message is returned
* @throws TelegramApiException If there is any error sending the audio * @throws TelegramApiException If there is any error sending the audio
@ -845,9 +878,15 @@ public abstract class AbsSender {
if (sendVoice.isNewVoice()) { if (sendVoice.isNewVoice()) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(SendVoice.CHATID_FIELD, sendVoice.getChatId()); 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) { 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) { if (sendVoice.getReplayToMessageId() != null) {
builder.addTextBody(SendVoice.REPLYTOMESSAGEID_FIELD, sendVoice.getReplayToMessageId().toString()); builder.addTextBody(SendVoice.REPLYTOMESSAGEID_FIELD, sendVoice.getReplayToMessageId().toString());
@ -863,7 +902,7 @@ public abstract class AbsSender {
} else { } else {
List<NameValuePair> nameValuePairs = new ArrayList<>(); List<NameValuePair> nameValuePairs = new ArrayList<>();
nameValuePairs.add(new BasicNameValuePair(SendVoice.CHATID_FIELD, sendVoice.getChatId())); 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) { if (sendVoice.getReplayMarkup() != null) {
nameValuePairs.add(new BasicNameValuePair(SendVoice.REPLYMARKUP_FIELD, sendVoice.getReplayMarkup().toJson().toString())); 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 * This class adds command functionality to the TelegramLongPollingBot
* *
* @author tschulz * @author Timo Schulz (Mit0x2)
*/ */
public abstract class TelegramLongPollingCommandBot extends TelegramLongPollingBot implements ICommandRegistry { public abstract class TelegramLongPollingCommandBot extends TelegramLongPollingBot implements ICommandRegistry {
private final CommandRegistry commandRegistry; private final CommandRegistry commandRegistry;

View File

@ -1,12 +1,13 @@
package org.telegram.telegrambots.bots.commands; package org.telegram.telegrambots.bots.commands;
import org.telegram.telegrambots.api.objects.Chat; import org.telegram.telegrambots.api.objects.Chat;
import org.telegram.telegrambots.api.objects.User;
import org.telegram.telegrambots.bots.AbsSender; import org.telegram.telegrambots.bots.AbsSender;
/** /**
* Representation of a command, which can be executed * Representation of a command, which can be executed
* *
* @author tschulz * @author Timo Schulz (Mit0x2)
*/ */
public abstract class BotCommand { public abstract class BotCommand {
public final static String COMMAND_INIT_CHARACTER = "/"; public final static String COMMAND_INIT_CHARACTER = "/";
@ -69,8 +70,9 @@ public abstract class BotCommand {
* Execute the command * Execute the command
* *
* @param absSender absSender to send messages over * @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 chat the chat, to be able to send replies
* @param arguments passed arguments * @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; 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 { public final class CommandRegistry implements ICommandRegistry {
private final Map<String, BotCommand> commandRegistryMap = new HashMap<>(); private final Map<String, BotCommand> commandRegistryMap = new HashMap<>();
private BiConsumer<AbsSender, Message> defaultConsumer; private BiConsumer<AbsSender, Message> defaultConsumer;
public CommandRegistry() {
}
@Override @Override
public void registerDefaultAction(BiConsumer<AbsSender, Message> defaultConsumer) { public void registerDefaultAction(BiConsumer<AbsSender, Message> defaultConsumer) {
this.defaultConsumer = defaultConsumer; this.defaultConsumer = defaultConsumer;
@ -87,7 +86,7 @@ public final class CommandRegistry implements ICommandRegistry {
if (commandRegistryMap.containsKey(command)) { if (commandRegistryMap.containsKey(command)) {
String[] parameters = Arrays.copyOfRange(commandSplit, 1, commandSplit.length); 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; return true;
} else if (defaultConsumer != null) { } else if (defaultConsumer != null) {
defaultConsumer.accept(absSender, message); defaultConsumer.accept(absSender, message);

View File

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