├── assets ├── logo.ai ├── logo.png ├── logo-bg.ai ├── logo-bg.png └── logo-bg.svg ├── jtelegrambotapi-core ├── uml.zip └── src │ └── main │ └── java │ └── com │ └── jtelegram │ └── api │ ├── message │ ├── games │ │ ├── CallbackGame.java │ │ ├── GameHighScore.java │ │ ├── Animation.java │ │ └── Game.java │ ├── media │ │ ├── DuratableMedium.java │ │ ├── MimeableMedium.java │ │ ├── ThumbableMedium.java │ │ ├── PhotoSize.java │ │ ├── SendableMedium.java │ │ ├── Location.java │ │ ├── Voice.java │ │ ├── Contact.java │ │ ├── VideoNote.java │ │ ├── FileMedium.java │ │ ├── Document.java │ │ ├── Venue.java │ │ ├── Video.java │ │ ├── Animation.java │ │ ├── VisualFileMedium.java │ │ └── Audio.java │ ├── sticker │ │ ├── MaskPoint.java │ │ ├── MaskPosition.java │ │ ├── StickerSet.java │ │ └── Sticker.java │ ├── input │ │ ├── media │ │ │ ├── InputMediaType.java │ │ │ ├── PhotoInputMedia.java │ │ │ ├── DocumentInputMedia.java │ │ │ ├── AnimationInputMedia.java │ │ │ ├── InputMedia.java │ │ │ ├── VideoInputMedia.java │ │ │ ├── AnimatedInputMedia.java │ │ │ ├── AudioInputMedia.java │ │ │ └── ThumbableInputMedia.java │ │ └── file │ │ │ ├── ExternalInputFile.java │ │ │ ├── LocalInputFile.java │ │ │ ├── IdInputFile.java │ │ │ └── InputFile.java │ ├── keyboard │ │ ├── KeyboardButton.java │ │ ├── ReplyKeyboardMarkup.java │ │ └── ReplyKeyboardRow.java │ ├── impl │ │ ├── service │ │ │ ├── NewChatTitleMessage.java │ │ │ ├── MigrateToChatIdMessage.java │ │ │ ├── DeleteChatPhotoMessage.java │ │ │ ├── GroupChatCreatedMessage.java │ │ │ ├── MigrateFromChatIdMessage.java │ │ │ ├── ChannelChatCreatedMessage.java │ │ │ ├── SupergroupChatCreatedMessage.java │ │ │ ├── LeftChatMemberMessage.java │ │ │ ├── PinnedMessageMessage.java │ │ │ ├── NewChatMembersMessage.java │ │ │ ├── NewChatPhotoMessage.java │ │ │ ├── ServiceMessage.java │ │ │ └── UserLoggedInMessage.java │ │ ├── VenueMessage.java │ │ ├── ContactMessage.java │ │ ├── InvoiceMessage.java │ │ ├── StickerMessage.java │ │ ├── AnimationMessage.java │ │ ├── SuccessfulPaymentMessage.java │ │ ├── GameMessage.java │ │ ├── VoiceMessage.java │ │ ├── VideoNoteMessage.java │ │ ├── LocationMessage.java │ │ ├── AudioMessage.java │ │ ├── DocumentMessage.java │ │ └── TextMessage.java │ ├── entity │ │ ├── TextLinkMessageEntity.java │ │ ├── TextMentionMessageEntity.java │ │ └── MessageEntityType.java │ ├── payments │ │ ├── LabeledPrice.java │ │ ├── ShippingOption.java │ │ ├── OrderInfo.java │ │ ├── ShippingQuery.java │ │ ├── ShippingAddress.java │ │ ├── PreCheckoutQuery.java │ │ ├── SuccessfulPayment.java │ │ └── Invoice.java │ └── CaptionableMessage.java │ ├── inline │ ├── input │ │ ├── InputMessageContent.java │ │ ├── InputLocationMessageContent.java │ │ ├── InputContactMessageContent.java │ │ ├── InputVenueMessageContent.java │ │ └── InputTextMessageContent.java │ ├── InlineQuery.java │ ├── keyboard │ │ ├── InlineKeyboardMarkup.java │ │ ├── InlineKeyboardButton.java │ │ └── InlineKeyboardRow.java │ ├── result │ │ ├── ChosenInlineResult.java │ │ ├── framework │ │ │ ├── ThumbableInlineResult.java │ │ │ └── DimensionalThumbableInlineResult.java │ │ ├── InlineResultGame.java │ │ ├── cached │ │ │ ├── InlineCachedResultSticker.java │ │ │ ├── InlineCachedResultAudio.java │ │ │ ├── InlineCachedResultGif.java │ │ │ ├── InlineCachedResultVideo.java │ │ │ ├── InlineCachedResultMpegGif.java │ │ │ ├── InlineCachedResultVoice.java │ │ │ └── InlineCachedResultDocument.java │ │ ├── InlineResultContact.java │ │ ├── InlineResultArticle.java │ │ ├── InlineResultLocation.java │ │ └── InlineResultVoice.java │ └── CallbackQuery.java │ ├── requests │ ├── message │ │ ├── framework │ │ │ ├── ReplyMarkup.java │ │ │ ├── ParseMode.java │ │ │ └── req │ │ │ │ ├── UserAdminChatRequest.java │ │ │ │ ├── UpdatableChatRequest.java │ │ │ │ ├── InputFileMessageUpdate.java │ │ │ │ ├── SendableChatRequest.java │ │ │ │ ├── SendableInputFileInlineRequest.java │ │ │ │ ├── InputFileMessageRequest.java │ │ │ │ ├── SendableMessageRequest.java │ │ │ │ ├── EditMessageRequest.java │ │ │ │ └── SendableInlineRequest.java │ │ ├── StopMessageLiveLocation.java │ │ └── send │ │ │ ├── SendGame.java │ │ │ ├── SendContact.java │ │ │ └── SendLocation.java │ ├── framework │ │ ├── BotRequest.java │ │ └── ResponseParameters.java │ ├── webhooks │ │ ├── WebhookInfo.java │ │ ├── DeleteWebhook.java │ │ └── GetWebhookInfo.java │ ├── chat │ │ ├── admin │ │ │ ├── DeleteChatPhoto.java │ │ │ ├── UnpinChatMessage.java │ │ │ ├── ExportChatInviteLink.java │ │ │ ├── UnbanChatMember.java │ │ │ ├── KickChatMember.java │ │ │ ├── DeleteChatStickerSet.java │ │ │ ├── SetChatTitle.java │ │ │ ├── SetChatDescription.java │ │ │ ├── PinChatMessage.java │ │ │ ├── SetChatStickerSet.java │ │ │ ├── SetChatPhoto.java │ │ │ └── RestrictChatMember.java │ │ ├── LeaveChat.java │ │ ├── GetChat.java │ │ ├── GetChatMembersCount.java │ │ ├── GetChatAdministrators.java │ │ ├── SendChatAction.java │ │ └── GetChatMember.java │ ├── GetMe.java │ ├── GetFile.java │ ├── sticker │ │ ├── GetStickerSet.java │ │ ├── DeleteSticker.java │ │ ├── UploadStickerFile.java │ │ └── SetStickerPosition.java │ ├── payment │ │ └── AnswerPreCheckoutQuery.java │ ├── GetUserProfilePhotos.java │ ├── inline │ │ └── AnswerCallbackQuery.java │ ├── GetUpdates.java │ └── game │ │ └── GetGameHighScores.java │ ├── events │ ├── EventHandler.java │ ├── message │ │ ├── InvoiceMessageEvent.java │ │ ├── AnimationMessageEvent.java │ │ ├── GameMessageEvent.java │ │ ├── TextMessageEvent.java │ │ ├── AudioMessageEvent.java │ │ ├── PhotoMessageEvent.java │ │ ├── VenueMessageEvent.java │ │ ├── VideoMessageEvent.java │ │ ├── VoiceMessageEvent.java │ │ ├── ContactMessageEvent.java │ │ ├── StickerMessageEvent.java │ │ ├── DocumentMessageEvent.java │ │ ├── LocationMessageEvent.java │ │ ├── VideoNoteMessageEvent.java │ │ ├── ServiceMessageEvent.java │ │ ├── MessageEvent.java │ │ └── edit │ │ │ ├── CaptionEditEvent.java │ │ │ └── TextMessageEditEvent.java │ ├── Event.java │ ├── chat │ │ ├── ChatPhotoDeletedEvent.java │ │ ├── NewChatTitleEvent.java │ │ ├── ChatMigratedToChatEvent.java │ │ ├── GroupChatCreatedEvent.java │ │ ├── ChatMemberLeftEvent.java │ │ ├── PinnedMessageEvent.java │ │ ├── ChatMigratedFromChatEvent.java │ │ ├── UserLoggedInEvent.java │ │ ├── NewChatPhotoEvent.java │ │ └── ChatMemberJoinedEvent.java │ ├── inline │ │ ├── keyboard │ │ │ └── CallbackQueryEvent.java │ │ ├── InlineQueryEvent.java │ │ └── ChosenInlineResultEvent.java │ ├── channel │ │ ├── ChannelPostEvent.java │ │ └── ChannelPostEditEvent.java │ ├── payment │ │ ├── PreCheckoutQueryEvent.java │ │ ├── ShippingQueryEvent.java │ │ └── SuccessfulPaymentEvent.java │ └── location │ │ └── LocationUpdateEvent.java │ ├── chat │ ├── ChatMemberStatus.java │ ├── ChannelChat.java │ ├── GroupChat.java │ ├── ChatPhoto.java │ ├── ChatAction.java │ ├── SupergroupChat.java │ ├── type │ │ ├── MultiMemberChat.java │ │ └── LargeChat.java │ ├── PrivateChat.java │ ├── ChatType.java │ ├── id │ │ ├── LongChatId.java │ │ ├── StringChatId.java │ │ └── ChatId.java │ └── ChatMember.java │ ├── ex │ ├── EventException.java │ ├── MessageBasedException.java │ ├── TelegramException.java │ ├── TelegramApiException.java │ ├── NetworkException.java │ ├── InvalidResponseException.java │ └── handler │ │ └── ErrorLogger.java │ ├── TelegramFile.java │ ├── user │ ├── UserProfilePhotos.java │ └── User.java │ ├── util │ ├── ExceptionThreadFactory.java │ └── LowercaseEnumAdapter.java │ ├── commands │ ├── CommandHandler.java │ ├── filters │ │ ├── CommandFilter.java │ │ ├── MentionFilter.java │ │ ├── RegexFilter.java │ │ ├── RootFilter.java │ │ └── TextFilter.java │ └── Command.java │ └── update │ └── UpdateProvider.java ├── jtelegrambotapi-test └── src │ └── main │ ├── resources │ └── test-photo.jpg │ └── java │ └── com │ └── jtelegram │ └── api │ └── test │ ├── AbstractTestModule.java │ ├── TestModule.java │ ├── ResourceTestModule.java │ └── message │ ├── LocationMessageTest.java │ └── VenueTest.java ├── jtelegrambotapi-menus ├── src │ └── main │ │ └── java │ │ └── com │ │ └── jtelegram │ │ └── api │ │ └── menu │ │ ├── MenuViewer.java │ │ ├── MenuRow.java │ │ ├── MenuButton.java │ │ ├── SimpleMenu.java │ │ ├── SimpleMenuButton.java │ │ └── events │ │ └── UnregisteredMenuInteractionEvent.java └── pom.xml ├── jtelegrambotapi-webhooks ├── src │ └── main │ │ └── java │ │ └── com │ │ └── jtelegram │ │ └── api │ │ └── webhooks │ │ └── FailBindingException.java └── pom.xml ├── .github ├── workflows │ ├── ci.yml │ └── release.yml └── settings.xml ├── ktelegrambotapi └── src │ └── main │ └── kotlin │ └── com │ └── jtelegram │ └── api │ └── kotlin │ ├── util │ └── TextBuilder.kt │ ├── TelegramBotRegistry.kt │ ├── KTelegramBot.kt │ ├── commands │ └── CommandRegistry.kt │ ├── events │ ├── EventRegistry.kt │ └── inline │ │ └── InlineQueryEvent.kt │ └── TelegramBot.kt ├── .gitignore ├── LICENSE └── README.md /assets/logo.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/assets/logo.ai -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/assets/logo.png -------------------------------------------------------------------------------- /assets/logo-bg.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/assets/logo-bg.ai -------------------------------------------------------------------------------- /assets/logo-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/assets/logo-bg.png -------------------------------------------------------------------------------- /jtelegrambotapi-core/uml.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/jtelegrambotapi-core/uml.zip -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/games/CallbackGame.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.games; 2 | 3 | public class CallbackGame { 4 | } 5 | -------------------------------------------------------------------------------- /jtelegrambotapi-test/src/main/resources/test-photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jTelegram/jTelegramBotAPI/HEAD/jtelegrambotapi-test/src/main/resources/test-photo.jpg -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/input/InputMessageContent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.input; 2 | 3 | public abstract class InputMessageContent { 4 | } 5 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/ReplyMarkup.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework; 2 | 3 | public interface ReplyMarkup { 4 | } 5 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/EventHandler.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events; 2 | 3 | public interface EventHandler { 4 | void onEvent(E event); 5 | } 6 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/DuratableMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | public interface DuratableMedium { 4 | long getDuration(); 5 | } 6 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/MimeableMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | public interface MimeableMedium { 4 | String getMimeType(); 5 | } 6 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/sticker/MaskPoint.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.sticker; 2 | 3 | public enum MaskPoint { 4 | FOREHEAD, 5 | EYES, 6 | MOUTH, 7 | CHIN 8 | } 9 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChatMemberStatus.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | public enum ChatMemberStatus { 4 | CREATOR, 5 | ADMINISTRATOR, 6 | MEMBER, 7 | RESTRICTED, 8 | LEFT, 9 | KICKED 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/InputMediaType.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | public enum InputMediaType { 4 | PHOTO, 5 | VIDEO, 6 | ANIMATION, 7 | DOCUMENT, 8 | AUDIO 9 | } 10 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/ThumbableMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | /** 4 | * Implementing classes contain a thumbnail 5 | */ 6 | public interface ThumbableMedium { 7 | PhotoSize getThumbnail(); 8 | } 9 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChannelChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import com.jtelegram.api.chat.type.LargeChat; 4 | import lombok.ToString; 5 | 6 | @ToString(callSuper = true) 7 | public class ChannelChat extends LargeChat { 8 | } 9 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/GroupChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import com.jtelegram.api.chat.type.MultiMemberChat; 4 | import lombok.ToString; 5 | 6 | @ToString(callSuper = true) 7 | public class GroupChat extends MultiMemberChat { 8 | } 9 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/MenuViewer.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu; 2 | 3 | import com.jtelegram.api.ex.TelegramException; 4 | 5 | import java.util.function.Consumer; 6 | 7 | public interface MenuViewer { 8 | void sendMenu(Menu menu); 9 | } 10 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/PhotoSize.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class PhotoSize extends VisualFileMedium { 9 | } 10 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChatPhoto.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString 8 | public class ChatPhoto { 9 | private String smallFileId; 10 | private String bigFileId; 11 | } 12 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/EventException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | import lombok.ToString; 4 | 5 | @ToString(callSuper = true) 6 | public class EventException extends MessageBasedException { 7 | public EventException(String message) { 8 | super(message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-webhooks/src/main/java/com/jtelegram/api/webhooks/FailBindingException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.webhooks; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @AllArgsConstructor 7 | @Getter 8 | public class FailBindingException extends RuntimeException { 9 | private Throwable cause; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/SendableMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.ToString; 4 | 5 | /** 6 | * Generally all types of medium (other than text) 7 | * that can be sent as a telegram message. 8 | */ 9 | @ToString 10 | public abstract class SendableMedium { 11 | } 12 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChatAction.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | public enum ChatAction { 4 | TYPING, 5 | UPLOAD_PHOTO, 6 | RECORD_VIDEO, 7 | UPLOAD_VIDEO, 8 | UPLOAD_AUDIO, 9 | UPLOAD_DOCUMENT, 10 | FIND_LOCATION, 11 | RECORD_VIDEO_NOTE, 12 | UPLOAD_VIDEO_NOTE 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Location.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class Location extends SendableMedium { 9 | private float longitude; 10 | private float latitude; 11 | } 12 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/keyboard/KeyboardButton.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.keyboard; 2 | 3 | import lombok.*; 4 | 5 | @Getter 6 | @ToString 7 | @Builder 8 | public class KeyboardButton { 9 | private String text; 10 | private Boolean requestContact; 11 | private Boolean requestLocation; 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/NewChatTitleMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class NewChatTitleMessage extends ServiceMessage { 9 | private String newChatTitle; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/MigrateToChatIdMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class MigrateToChatIdMessage extends ServiceMessage { 9 | private long migrateToChatId; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/DeleteChatPhotoMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class DeleteChatPhotoMessage extends ServiceMessage { 9 | private boolean deleteChatPhoto; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/GroupChatCreatedMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class GroupChatCreatedMessage extends ServiceMessage { 9 | private boolean groupChatCreated; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/MigrateFromChatIdMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class MigrateFromChatIdMessage extends ServiceMessage { 9 | private long migrateFromChatId; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/ChannelChatCreatedMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class ChannelChatCreatedMessage extends ServiceMessage { 9 | private boolean channelChatCreated; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/SupergroupChatCreatedMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class SupergroupChatCreatedMessage extends ServiceMessage { 9 | private boolean supergroupChatCreated; 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Voice.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class Voice extends FileMedium implements MimeableMedium, DuratableMedium { 9 | private long duration; 10 | private String mimeType; 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 'pull_request' 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v1 12 | 13 | - name: Set up JDK 11 14 | uses: actions/setup-java@v1 15 | with: 16 | java-version: 11.0.5 17 | 18 | - name: Build and Test jTelegram 19 | run: mvn clean test 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/MessageBasedException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | public abstract class MessageBasedException extends TelegramException { 4 | public MessageBasedException(String message) { 5 | super(message); 6 | } 7 | 8 | @Override 9 | public String getDescription() { 10 | return getMessage(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/SupergroupChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import com.jtelegram.api.chat.type.LargeChat; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class SupergroupChat extends LargeChat { 10 | private String stickerSetName; 11 | private boolean canSetStickerSet; 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/type/MultiMemberChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat.type; 2 | 3 | import com.jtelegram.api.chat.Chat; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class MultiMemberChat extends Chat { 10 | private String title; 11 | private boolean allMembersAreAdministrators; 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/LeftChatMemberMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class LeftChatMemberMessage extends ServiceMessage { 10 | private User leftChatMember; 11 | } 12 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/PinnedMessageMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class PinnedMessageMessage extends ServiceMessage { 10 | private Message pinnedMessage; 11 | } 12 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/ParseMode.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework; 2 | 3 | import lombok.Getter; 4 | import lombok.RequiredArgsConstructor; 5 | 6 | 7 | @Getter 8 | @RequiredArgsConstructor 9 | public enum ParseMode { 10 | NONE(""), 11 | MARKDOWN("Markdown"), 12 | HTML("HTML"); 13 | private final String mode; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/entity/TextLinkMessageEntity.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.entity; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class TextLinkMessageEntity extends MessageEntity { 11 | 12 | private String url; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/PrivateChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class PrivateChat extends Chat { 9 | private String firstName; 10 | private String lastName; 11 | 12 | public String getFullName() { 13 | return firstName + " " + lastName; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/type/LargeChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat.type; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class LargeChat extends MultiMemberChat { 10 | private String description; 11 | private String inviteLink; 12 | private Message pinnedMessage; 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/TelegramFile.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString 10 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 11 | public class TelegramFile { 12 | private String fileId; 13 | private int fileSize; 14 | private String filePath; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/InvoiceMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.InvoiceMessage; 5 | 6 | public class InvoiceMessageEvent extends MessageEvent { 7 | public InvoiceMessageEvent(TelegramBot bot, InvoiceMessage message) { 8 | super(bot, message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/NewChatMembersMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class NewChatMembersMessage extends ServiceMessage { 12 | private List newChatMembers; 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/sticker/MaskPosition.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.sticker; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString 9 | @EqualsAndHashCode 10 | public class MaskPosition { 11 | private MaskPoint point; 12 | private float xShift; 13 | private float yShift; 14 | private float scale; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Contact.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class Contact extends SendableMedium { 9 | private String phoneNumber; 10 | private String firstName; 11 | private String lastName; 12 | private long userId; 13 | private String vcard; 14 | } 15 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/util/TextBuilder.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin.util 2 | 3 | import com.jtelegram.api.util.TextBuilder 4 | 5 | fun textBuilder(init: KTextBuilder.() -> Unit): KTextBuilder { 6 | val builder = KTextBuilder() 7 | builder.init() 8 | return builder 9 | } 10 | 11 | class KTextBuilder: TextBuilder() { 12 | operator fun String.unaryPlus() { 13 | plain(this) 14 | } 15 | } -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/input/InputLocationMessageContent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.input; 2 | 3 | import lombok.Builder; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @Builder 9 | @ToString 10 | public class InputLocationMessageContent extends InputMessageContent { 11 | private Float latitude; 12 | private Float longitude; 13 | private Integer livePeriod; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/NewChatPhotoMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import com.jtelegram.api.message.media.PhotoSize; 4 | import lombok.Getter; 5 | 6 | import java.util.List; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class NewChatPhotoMessage extends ServiceMessage { 12 | private List newChatPhoto; 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/AnimationMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.AnimationMessage; 5 | 6 | public class AnimationMessageEvent extends MessageEvent { 7 | public AnimationMessageEvent(TelegramBot bot, AnimationMessage message) { 8 | super(bot, message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/MenuRow.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu; 2 | 3 | import lombok.*; 4 | 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | @Getter 9 | @Setter 10 | @AllArgsConstructor 11 | public class MenuRow { 12 | private List buttons; 13 | 14 | public static MenuRow from(MenuButton... buttons) { 15 | return new MenuRow(Arrays.asList(buttons)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/TelegramException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString 8 | public abstract class TelegramException extends RuntimeException { 9 | public TelegramException() { 10 | } 11 | 12 | public TelegramException(String message) { 13 | super(message); 14 | } 15 | 16 | public abstract String getDescription(); 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/LabeledPrice.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Builder; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @Builder 9 | @ToString 10 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 11 | public class LabeledPrice { 12 | private final String label; 13 | private final Integer amount; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/framework/BotRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.framework; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Getter; 6 | 7 | /** 8 | * Useful pair for when inserted into the request queue 9 | */ 10 | @AllArgsConstructor 11 | @Getter 12 | public class BotRequest { 13 | private TelegramBot bot; 14 | private TelegramRequest request; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/MenuButton.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu; 2 | 3 | import com.jtelegram.api.events.inline.keyboard.CallbackQueryEvent; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | public abstract class MenuButton { 8 | @Getter 9 | @Setter 10 | private Menu menu; 11 | 12 | public abstract String getLabel(); 13 | 14 | 15 | public abstract boolean onPress(CallbackQueryEvent event); 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/entity/TextMentionMessageEntity.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.entity; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class TextMentionMessageEntity extends MessageEntity { 12 | 13 | private User user; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/input/InputContactMessageContent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.input; 2 | 3 | import lombok.Builder; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @Builder 9 | @ToString 10 | public class InputContactMessageContent extends InputMessageContent { 11 | private String phoneNumber; 12 | private String firstName; 13 | private String lastName; 14 | private String vcard; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/ServiceMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import lombok.ToString; 5 | 6 | /** 7 | * Sharable class between all service messages 8 | */ 9 | @ToString(callSuper = true) 10 | public abstract class ServiceMessage extends Message { 11 | @Override 12 | public Object getContent() { 13 | return null; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/VideoNote.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class VideoNote extends FileMedium implements DuratableMedium, ThumbableMedium { 10 | private long duration; 11 | @SerializedName("thumb") 12 | private PhotoSize thumbnail; 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-test/src/main/java/com/jtelegram/api/test/AbstractTestModule.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.test; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.test.TestModule; 5 | import lombok.AccessLevel; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Getter; 8 | 9 | @Getter 10 | @AllArgsConstructor(access = AccessLevel.PROTECTED) 11 | public abstract class AbstractTestModule implements TestModule { 12 | protected TelegramBot bot; 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/GameMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.GameMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class GameMessageEvent extends MessageEvent { 9 | public GameMessageEvent(TelegramBot bot, GameMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/TextMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.message.impl.TextMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class TextMessageEvent extends MessageEvent { 9 | public TextMessageEvent(TelegramBot bot, TextMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/ShippingOption.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.Builder; 4 | import lombok.RequiredArgsConstructor; 5 | import lombok.ToString; 6 | 7 | import java.util.List; 8 | 9 | @RequiredArgsConstructor 10 | @ToString 11 | @Builder 12 | public class ShippingOption { 13 | private final String id; 14 | private final String title; 15 | private final List prices; 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/AudioMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.AudioMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class AudioMessageEvent extends MessageEvent { 9 | public AudioMessageEvent(TelegramBot bot, AudioMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/PhotoMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.PhotoMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class PhotoMessageEvent extends MessageEvent { 9 | public PhotoMessageEvent(TelegramBot bot, PhotoMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/VenueMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.VenueMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class VenueMessageEvent extends MessageEvent { 9 | public VenueMessageEvent(TelegramBot bot, VenueMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/VideoMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.message.impl.VideoMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class VideoMessageEvent extends MessageEvent { 9 | public VideoMessageEvent(TelegramBot bot, VideoMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/VoiceMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.VoiceMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class VoiceMessageEvent extends MessageEvent { 9 | public VoiceMessageEvent(TelegramBot bot, VoiceMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/FileMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | /** 7 | * This class serves as a common extension of 8 | * all mediums sent by file (audio, image, etc.). 9 | * 10 | */ 11 | @Getter 12 | @ToString(callSuper = true) 13 | public abstract class FileMedium extends SendableMedium { 14 | private String fileId; 15 | private long fileSize; 16 | } 17 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/TelegramBotRegistry.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin 2 | 3 | import com.jtelegram.api.TelegramBotRegistry 4 | import com.jtelegram.api.requests.GetMe 5 | 6 | suspend fun TelegramBotRegistry.registerBot(key: String): KTelegramBot { 7 | val bot = KTelegramBot(this, key) 8 | 9 | bot.botInfo = bot.execute(GetMe.builder().build()) 10 | 11 | bots.add(bot) 12 | updateProvider.listenFor(bot) 13 | 14 | return bot 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/ContactMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.ContactMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class ContactMessageEvent extends MessageEvent { 9 | public ContactMessageEvent(TelegramBot bot, ContactMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/StickerMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.StickerMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class StickerMessageEvent extends MessageEvent { 9 | public StickerMessageEvent(TelegramBot bot, StickerMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/DocumentMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.DocumentMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class DocumentMessageEvent extends MessageEvent { 9 | public DocumentMessageEvent(TelegramBot bot, DocumentMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/LocationMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.message.impl.LocationMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class LocationMessageEvent extends MessageEvent { 9 | public LocationMessageEvent(TelegramBot bot, LocationMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/KTelegramBot.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin 2 | 3 | import com.jtelegram.api.TelegramBot 4 | import com.jtelegram.api.TelegramBotRegistry 5 | import kotlinx.coroutines.CoroutineScope 6 | import kotlinx.coroutines.asCoroutineDispatcher 7 | 8 | class KTelegramBot constructor(registry: TelegramBotRegistry?, apiKey: String?) : TelegramBot(registry, apiKey) { 9 | val coroutineScope = CoroutineScope(eventRegistry.threadPool.asCoroutineDispatcher()) 10 | } -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/VideoNoteMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.message.impl.VideoNoteMessage; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public class VideoNoteMessageEvent extends MessageEvent { 9 | public VideoNoteMessageEvent(TelegramBot bot, VideoNoteMessage message) { 10 | super(bot, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/VenueMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.media.Venue; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class VenueMessage extends Message { 11 | private Venue venue; 12 | 13 | @Override 14 | public Venue getContent() { 15 | return venue; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Document.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class Document extends FileMedium implements MimeableMedium, ThumbableMedium { 10 | @SerializedName("thumb") 11 | private PhotoSize thumbnail; 12 | private String fileName; 13 | private String mimeType; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/OrderInfo.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.RequiredArgsConstructor; 5 | import lombok.ToString; 6 | 7 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 8 | @ToString 9 | public class OrderInfo { 10 | private final String name; 11 | private final String phoneNumber; 12 | private final String email; 13 | private final ShippingAddress shippingAddress; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/file/ExternalInputFile.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.file; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.net.URL; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString 11 | @AllArgsConstructor 12 | public class ExternalInputFile implements InputFile { 13 | private URL data; 14 | 15 | @Override 16 | public String getIdentifier() { 17 | return null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/ContactMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.media.Contact; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class ContactMessage extends Message { 11 | private Contact contact; 12 | 13 | @Override 14 | public Contact getContent() { 15 | return contact; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/InvoiceMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.payments.Invoice; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class InvoiceMessage extends Message { 11 | private Invoice invoice; 12 | 13 | @Override 14 | public Invoice getContent() { 15 | return invoice; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/StickerMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.sticker.Sticker; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class StickerMessage extends Message { 11 | private Sticker sticker; 12 | 13 | @Override 14 | public Sticker getContent() { 15 | return sticker; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Venue.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString(callSuper = true) 8 | public class Venue extends SendableMedium { 9 | private Location location; 10 | private String title; 11 | private String address; 12 | private String foursquareId; 13 | private String foursquareType; 14 | 15 | public String getName() { 16 | return title; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Video.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class Video extends VisualFileMedium implements DuratableMedium, MimeableMedium, ThumbableMedium { 10 | private long duration; 11 | @SerializedName("thumb") 12 | private PhotoSize thumbnail; 13 | private String mimeType; 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/ServiceMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.message.impl.service.ServiceMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import lombok.ToString; 6 | 7 | @ToString(callSuper = true) 8 | public abstract class ServiceMessageEvent extends MessageEvent { 9 | protected ServiceMessageEvent(TelegramBot bot, T originMessage) { 10 | super(bot, originMessage); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/InlineQuery.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline; 2 | 3 | import com.jtelegram.api.user.User; 4 | import com.jtelegram.api.message.media.Location; 5 | import lombok.*; 6 | 7 | @Getter 8 | @ToString 9 | @EqualsAndHashCode(of = "id") 10 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 11 | public class InlineQuery { 12 | private String id; 13 | private User from; 14 | private Location location; 15 | private String query; 16 | private String offset; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/games/GameHighScore.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.games; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.AccessLevel; 5 | import lombok.Getter; 6 | import lombok.RequiredArgsConstructor; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString 11 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 12 | public class GameHighScore { 13 | private final Integer position; 14 | private final User user; 15 | private final Integer score; 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/AnimationMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.media.Animation; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class AnimationMessage extends Message { 11 | private Animation animation; 12 | 13 | @Override 14 | public Animation getContent() { 15 | return animation; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/Event.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import lombok.AccessLevel; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @ToString 10 | @AllArgsConstructor(access = AccessLevel.PROTECTED) 11 | public abstract class Event { 12 | @Getter 13 | private final TelegramBot bot; 14 | 15 | public Class getType() { 16 | return getClass(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/input/InputVenueMessageContent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.input; 2 | 3 | import lombok.Builder; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @Builder 9 | @ToString 10 | public class InputVenueMessageContent extends InputMessageContent { 11 | private Float latitude; 12 | private Float longtitude; 13 | private String title; 14 | private String address; 15 | private String foursquareId; 16 | private String foursquareType; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/keyboard/InlineKeyboardMarkup.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.keyboard; 2 | 3 | import com.jtelegram.api.requests.message.framework.ReplyMarkup; 4 | import lombok.Builder; 5 | import lombok.Getter; 6 | import lombok.Singular; 7 | 8 | import java.util.List; 9 | import lombok.ToString; 10 | 11 | @Getter 12 | @Builder 13 | @ToString 14 | public class InlineKeyboardMarkup implements ReplyMarkup { 15 | @Singular("keyboard") 16 | private List inlineKeyboard; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Animation.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class Animation extends VisualFileMedium implements DuratableMedium, 10 | MimeableMedium, ThumbableMedium { 11 | private long duration; 12 | @SerializedName("thumb") 13 | private PhotoSize thumbnail; 14 | private String mimeType; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/sticker/StickerSet.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.sticker; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.util.List; 9 | 10 | @Getter 11 | @ToString 12 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 13 | public class StickerSet { 14 | private String name; 15 | private String title; 16 | private boolean containsMasks; 17 | private List stickers; 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChatType.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | public enum ChatType { 7 | PRIVATE(PrivateChat.class), 8 | GROUP(GroupChat.class), 9 | SUPERGROUP(SupergroupChat.class), 10 | CHANNEL(ChannelChat.class); 11 | 12 | @Getter 13 | private Class representingClass; 14 | 15 | ChatType(Class representingClass) { 16 | this.representingClass = representingClass; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/keyboard/ReplyKeyboardMarkup.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.keyboard; 2 | 3 | import com.jtelegram.api.requests.message.framework.ReplyMarkup; 4 | import lombok.*; 5 | 6 | import java.util.List; 7 | 8 | @Builder 9 | @Getter 10 | @ToString 11 | public class ReplyKeyboardMarkup implements ReplyMarkup { 12 | @Singular 13 | private List rows; 14 | private Boolean resizeKeyboard; 15 | private Boolean oneTimeKeyboard; 16 | private Boolean selective; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/VisualFileMedium.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | /** 7 | * Similar to File medium, this type itself does 8 | * not exist in the Telegram API however it holds 9 | * the shared width / height fields of videos and 10 | * photos. 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public abstract class VisualFileMedium extends FileMedium { 15 | private int width; 16 | private int height; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/TelegramApiException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | import com.jtelegram.api.requests.framework.ResponseParameters; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString 9 | public class TelegramApiException extends TelegramException { 10 | private int errorCode; 11 | private String description; 12 | private ResponseParameters parameters; 13 | 14 | @Override 15 | public String getMessage() { 16 | return description; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/ShippingQuery.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.AccessLevel; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 9 | @ToString 10 | public class ShippingQuery { 11 | private final String id; 12 | private final User from; 13 | private final String invoicePayload; 14 | private final ShippingAddress shippingAddress; 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/id/LongChatId.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat.id; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.RequiredArgsConstructor; 5 | 6 | @EqualsAndHashCode(of = "chatId") 7 | @RequiredArgsConstructor 8 | public class LongChatId implements ChatId { 9 | private final long chatId; 10 | 11 | @Override 12 | public Long getId() { 13 | return chatId; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return String.valueOf(chatId); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/media/Audio.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.media; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Getter; 5 | import lombok.ToString; 6 | 7 | @Getter 8 | @ToString(callSuper = true) 9 | public class Audio extends FileMedium implements DuratableMedium, MimeableMedium { 10 | private long duration; 11 | private String performer; 12 | private String title; 13 | private String mimeType; 14 | @SerializedName("thumb") 15 | private PhotoSize thumbnail; 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/NetworkException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | import java.io.IOException; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class NetworkException extends MessageBasedException { 11 | private final IOException underlyingException; 12 | 13 | public NetworkException(IOException underlyingException) { 14 | super(underlyingException.getMessage()); 15 | this.underlyingException = underlyingException; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/result/ChosenInlineResult.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.result; 2 | 3 | import com.jtelegram.api.message.media.Location; 4 | import com.jtelegram.api.user.User; 5 | import lombok.*; 6 | 7 | @Getter 8 | @ToString 9 | @EqualsAndHashCode(of = "resultId") 10 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 11 | public class ChosenInlineResult { 12 | private String resultId; 13 | private User from; 14 | private String query; 15 | private Location location; 16 | private String inlineMessageId; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/MessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.Message; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @ToString(callSuper = true) 10 | public class MessageEvent extends Event { 11 | @Getter 12 | private T message; 13 | 14 | public MessageEvent(TelegramBot bot, T message) { 15 | super(bot); 16 | this.message = message; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/PhotoInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.requests.message.framework.ParseMode; 5 | import lombok.Builder; 6 | import lombok.ToString; 7 | 8 | @ToString(callSuper = true) 9 | public class PhotoInputMedia extends InputMedia { 10 | @Builder 11 | protected PhotoInputMedia(InputFile media, String caption, ParseMode parseMode) { 12 | super(InputMediaType.PHOTO, media, caption, parseMode); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/SuccessfulPaymentMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.payments.SuccessfulPayment; 4 | import com.jtelegram.api.message.Message; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public class SuccessfulPaymentMessage extends Message { 11 | private SuccessfulPayment successfulPayment; 12 | 13 | @Override 14 | public SuccessfulPayment getContent() { 15 | return successfulPayment; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-test/src/main/java/com/jtelegram/api/test/TestModule.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.test; 2 | 3 | import com.jtelegram.api.commands.Command; 4 | 5 | public interface TestModule { 6 | /** 7 | * Validate if the test can be performed in these conditions (args and type of chat) 8 | * @param command The command being run 9 | * @return null if the test can be performed in these conditions, otherwise error message 10 | */ 11 | String validate(Command command); 12 | 13 | void handle(String[] args, Command command) throws Exception; 14 | 15 | String getName(); 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/ChatPhotoDeletedEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.message.ServiceMessageEvent; 5 | import com.jtelegram.api.message.impl.service.DeleteChatPhotoMessage; 6 | import lombok.ToString; 7 | 8 | @ToString(callSuper = true) 9 | public class ChatPhotoDeletedEvent extends ServiceMessageEvent { 10 | public ChatPhotoDeletedEvent(TelegramBot bot, DeleteChatPhotoMessage originMessage) { 11 | super(bot, originMessage); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/id/StringChatId.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat.id; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.RequiredArgsConstructor; 5 | 6 | @EqualsAndHashCode(of = "chatId") 7 | @RequiredArgsConstructor 8 | public class StringChatId implements ChatId { 9 | private final String chatId; 10 | //TODO: Explain in javadocs that the username HAS an @ 11 | 12 | @Override 13 | public String getId() { 14 | return chatId; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return chatId; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/inline/keyboard/CallbackQueryEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.inline.keyboard; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.inline.CallbackQuery; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class CallbackQueryEvent extends Event { 12 | private CallbackQuery query; 13 | 14 | public CallbackQueryEvent(TelegramBot bot, CallbackQuery query) { 15 | super(bot); 16 | this.query = query; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/ShippingAddress.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Builder; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @Builder 9 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 10 | @ToString 11 | public class ShippingAddress { 12 | private final String country_code; 13 | private final String state; 14 | private final String city; 15 | private final String streetLine1; 16 | private final String streetLine2; 17 | private final String postCode; 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/edit/CaptionEditEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message.edit; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.CaptionableMessage; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @ToString(callSuper = true) 10 | public class CaptionEditEvent extends Event { 11 | @Getter 12 | private CaptionableMessage message; 13 | 14 | public CaptionEditEvent(TelegramBot bot, CaptionableMessage message) { 15 | super(bot); 16 | this.message = message; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/service/UserLoggedInMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl.service; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | /** 7 | * When a user logs in using a login widget, 8 | * the bot is given permission to chat with 9 | * them. This message is sent as a notification 10 | * that this has happened. 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class UserLoggedInMessage extends ServiceMessage { 15 | /** 16 | * The domain of the website on which the user logged in 17 | */ 18 | private String connectedWebsite; 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/webhooks/WebhookInfo.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.webhooks; 2 | 3 | import com.jtelegram.api.update.UpdateType; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | import java.util.List; 9 | 10 | @Getter 11 | @ToString 12 | @EqualsAndHashCode(of = "url") 13 | public class WebhookInfo { 14 | private String url; 15 | private boolean hasCustomCertificate; 16 | private int pendingUpdateCount; 17 | private long lastErrorDate; 18 | private Integer maxConnections; 19 | private List allowedUpdates; 20 | } 21 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/channel/ChannelPostEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.channel; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.Message; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * When a message to a channel has been posted 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class ChannelPostEvent extends Event { 15 | private Message post; 16 | 17 | public ChannelPostEvent(TelegramBot bot, Message post) { 18 | super(bot); 19 | this.post = post; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/message/edit/TextMessageEditEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.message.edit; 2 | 3 | import com.jtelegram.api.message.impl.TextMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import com.jtelegram.api.events.Event; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @ToString(callSuper = true) 10 | public class TextMessageEditEvent extends Event { 11 | @Getter 12 | private TextMessage newMessage; 13 | 14 | public TextMessageEditEvent(TelegramBot bot, TextMessage newMessage) { 15 | super(bot); 16 | this.newMessage = newMessage; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/keyboard/InlineKeyboardButton.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.keyboard; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.jtelegram.api.message.games.CallbackGame; 5 | import lombok.*; 6 | 7 | @Getter 8 | @ToString 9 | @Builder 10 | public class InlineKeyboardButton { 11 | @SerializedName("text") 12 | private String label; 13 | private String url; 14 | private String callbackData; 15 | private String switchInlineQuery; 16 | private String switchInlineQueryCurrentChat; 17 | private CallbackGame callbackGame; 18 | private Boolean pay; 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/channel/ChannelPostEditEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.channel; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.Message; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * When a channel post has been edited 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class ChannelPostEditEvent extends Event { 15 | private Message post; 16 | 17 | public ChannelPostEditEvent(TelegramBot bot, Message post) { 18 | super(bot); 19 | this.post = post; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/inline/InlineQueryEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.inline; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.inline.InlineQuery; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * When an inline query is sent to the bot 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class InlineQueryEvent extends Event { 15 | private InlineQuery query; 16 | 17 | public InlineQueryEvent(TelegramBot bot, InlineQuery query) { 18 | super(bot); 19 | this.query = query; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/user/UserProfilePhotos.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.user; 2 | 3 | import com.jtelegram.api.message.media.PhotoSize; 4 | import lombok.AccessLevel; 5 | import lombok.Getter; 6 | import lombok.NoArgsConstructor; 7 | import lombok.ToString; 8 | 9 | import java.util.List; 10 | 11 | @Getter 12 | @ToString 13 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 14 | public class UserProfilePhotos { 15 | private int totalCount; 16 | /** 17 | * List of users profile pictures 18 | * each list containing up to 4 different 19 | * sizes 20 | */ 21 | private List> photos; 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/games/Animation.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.games; 2 | 3 | import com.jtelegram.api.message.media.PhotoSize; 4 | import lombok.AccessLevel; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | import lombok.RequiredArgsConstructor; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @Builder 12 | @ToString 13 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 14 | public class Animation { 15 | private final String fileId; 16 | private final PhotoSize thumb; 17 | private final String fileName; 18 | private final String mimeType; 19 | private final Integer fileSize; 20 | } 21 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/payment/PreCheckoutQueryEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.payment; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.payments.PreCheckoutQuery; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class PreCheckoutQueryEvent extends Event { 12 | private PreCheckoutQuery checkoutQuery; 13 | 14 | public PreCheckoutQueryEvent(TelegramBot bot, PreCheckoutQuery checkoutQuery) { 15 | super(bot); 16 | this.checkoutQuery = checkoutQuery; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/payment/ShippingQueryEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.payment; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.message.payments.ShippingQuery; 6 | import lombok.ToString; 7 | 8 | /** 9 | * When a new shipping query is received 10 | */ 11 | @ToString(callSuper = true) 12 | public class ShippingQueryEvent extends Event { 13 | private ShippingQuery shippingQuery; 14 | 15 | public ShippingQueryEvent(TelegramBot bot, ShippingQuery shippingQuery) { 16 | super(bot); 17 | this.shippingQuery = shippingQuery; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/webhooks/DeleteWebhook.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.webhooks; 2 | 3 | import com.jtelegram.api.ex.TelegramException; 4 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 5 | import lombok.Builder; 6 | 7 | import java.util.function.Consumer; 8 | 9 | public class DeleteWebhook extends UpdateTelegramRequest { 10 | @Builder 11 | private DeleteWebhook(Consumer errorHandler, Runnable callback) { 12 | super("deleteWebhook", errorHandler, callback); 13 | } 14 | 15 | @Override 16 | protected boolean isValid() { 17 | return true; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/PreCheckoutQuery.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.AccessLevel; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 9 | @ToString 10 | public class PreCheckoutQuery { 11 | private final String id; 12 | private final User from; 13 | private final String currency; 14 | private final Integer totalAmount; 15 | private final String invoicePayload; 16 | private final String shippingOptionId; 17 | private final OrderInfo orderInfo; 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/SuccessfulPayment.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.RequiredArgsConstructor; 5 | import lombok.ToString; 6 | 7 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 8 | @ToString 9 | public class SuccessfulPayment { 10 | private final String currency; 11 | private final Integer totalAmount; 12 | private final String invoicePayload; 13 | private final String shippingOptionId; 14 | private final OrderInfo orderInfo; 15 | private final String telegramPaymentChargeId; 16 | private final String providerPaymentChargeId; 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/payments/Invoice.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.payments; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.Builder; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.util.Currency; 9 | 10 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 11 | @Builder 12 | @ToString 13 | public class Invoice { 14 | private final String title; 15 | private final String description; 16 | private final String startParameter; 17 | // We should really use java's currency api... 18 | private final Currency currency; 19 | private final Integer totalAmount; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ 2 | .idea/ 3 | *.iml 4 | 5 | # Java 6 | *.class 7 | *.jar 8 | 9 | # Others 10 | target/ 11 | **/src/main/delombok/ 12 | dependency-reduced-pom.xml 13 | 14 | # Windows 15 | Thumbs.db 16 | ehthumbs.db 17 | Desktop.ini 18 | $RECYCLE.BIN/ 19 | 20 | # Linux 21 | .* 22 | !.gitattributes 23 | !.gitignore 24 | 25 | # OSX 26 | .DS_Store 27 | .AppleDouble 28 | .LSOverride 29 | ._* 30 | .DocumentRevisions-V100 31 | .fseventsd 32 | .Spotlight-V100 33 | .TemporaryItems 34 | .Trashes 35 | .VolumeIcon.icns 36 | .com.apple.timemachine.donotpresent 37 | .AppleDB 38 | .AppleDesktop 39 | Network Trash Folder 40 | Temporary Items 41 | .apdisk 42 | infer-out/ 43 | 44 | # Ignore travis 45 | !.github/ 46 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/util/ExceptionThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.util; 2 | 3 | import java.util.concurrent.Executors; 4 | import java.util.concurrent.ThreadFactory; 5 | 6 | // When you are using an ExecutorService 7 | // you should still expect EXCEPTIONS TO 8 | // PRINT 9 | public class ExceptionThreadFactory implements ThreadFactory { 10 | private final ThreadFactory factory = Executors.defaultThreadFactory(); 11 | 12 | @Override 13 | public Thread newThread(Runnable r) { 14 | Thread thread = factory.newThread(r); 15 | thread.setUncaughtExceptionHandler((t, e) -> e.printStackTrace()); 16 | return thread; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/GameMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.games.Game; 5 | import com.jtelegram.api.requests.message.edit.EditTextMessage; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class GameMessage extends Message { 12 | private Game game; 13 | 14 | @Override 15 | public Game getContent() { 16 | return game; 17 | } 18 | 19 | public EditTextMessage.EditTextMessageBuilder toEditTextRequest() { 20 | return EditTextMessage.forMessage(this); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/DeleteChatPhoto.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 6 | import lombok.Builder; 7 | import lombok.ToString; 8 | 9 | import java.util.function.Consumer; 10 | 11 | @ToString 12 | public class DeleteChatPhoto extends UpdatableChatRequest { 13 | @Builder 14 | public DeleteChatPhoto(Consumer errorHandler, Runnable callback, ChatId chatId) { 15 | super("deleteChatPhoto", errorHandler, callback, chatId); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/DocumentInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.requests.message.framework.ParseMode; 6 | import lombok.Builder; 7 | import lombok.ToString; 8 | 9 | @ToString(callSuper = true) 10 | public class DocumentInputMedia extends ThumbableInputMedia { 11 | @Builder 12 | public DocumentInputMedia(InputFile media, String caption, ParseMode parseMode, LocalInputFile thumbnail) { 13 | super(InputMediaType.DOCUMENT, media, caption, parseMode, thumbnail); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/LeaveChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class LeaveChat extends UpdatableChatRequest { 15 | @Builder 16 | public LeaveChat(Consumer errorHandler, Runnable callback, ChatId chatId) { 17 | super("leaveChat", errorHandler, callback, chatId); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/webhooks/GetWebhookInfo.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.webhooks; 2 | 3 | import com.jtelegram.api.ex.TelegramException; 4 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 5 | import lombok.Builder; 6 | 7 | import java.util.function.Consumer; 8 | 9 | public class GetWebhookInfo extends QueryTelegramRequest { 10 | @Builder 11 | private GetWebhookInfo(Consumer callback, Consumer errorHandler) { 12 | super("getWebhookInfo", WebhookInfo.class, callback, errorHandler); 13 | } 14 | 15 | @Override 16 | protected boolean isValid() { 17 | return true; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/NewChatTitleEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.events.message.ServiceMessageEvent; 4 | import com.jtelegram.api.message.impl.service.NewChatTitleMessage; 5 | import com.jtelegram.api.TelegramBot; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class NewChatTitleEvent extends ServiceMessageEvent { 12 | private String newTitle; 13 | 14 | public NewChatTitleEvent(TelegramBot bot, NewChatTitleMessage originMessage) { 15 | super(bot, originMessage); 16 | this.newTitle = originMessage.getNewChatTitle(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/inline/ChosenInlineResultEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.inline; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.inline.result.ChosenInlineResult; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | /** 10 | * When a user has selected their inline result 11 | */ 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class ChosenInlineResultEvent extends Event { 15 | private ChosenInlineResult chosenResult; 16 | 17 | public ChosenInlineResultEvent(TelegramBot bot, ChosenInlineResult chosenResult) { 18 | super(bot); 19 | this.chosenResult = chosenResult; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/CallbackQuery.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline; 2 | 3 | import com.jtelegram.api.user.User; 4 | import com.jtelegram.api.message.Message; 5 | import lombok.AccessLevel; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.NoArgsConstructor; 9 | import lombok.ToString; 10 | 11 | @Getter 12 | @ToString 13 | @EqualsAndHashCode(of = "id") 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | public class CallbackQuery { 16 | private String id; 17 | private User from; 18 | private Message message; 19 | private String inlineMessageId; 20 | private String chatInstance; 21 | private String data; 22 | private String gameShortName; 23 | } 24 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/result/framework/ThumbableInlineResult.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.result.framework; 2 | 3 | import com.jtelegram.api.inline.keyboard.InlineKeyboardMarkup; 4 | import com.jtelegram.api.inline.input.InputMessageContent; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public abstract class ThumbableInlineResult extends InlineResult { 11 | private String thumbUrl; 12 | 13 | protected ThumbableInlineResult(String id, InlineKeyboardMarkup replyMarkup, InputMessageContent inputMessageContent, String thumbUrl) { 14 | super(id, replyMarkup, inputMessageContent); 15 | this.thumbUrl = thumbUrl; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/UnpinChatMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class UnpinChatMessage extends UpdatableChatRequest { 15 | @Builder 16 | public UnpinChatMessage(Consumer errorHandler, Runnable callback, ChatId chatId) { 17 | super("unpinChatMessage", errorHandler, callback, chatId); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/ExportChatInviteLink.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.requests.message.framework.req.SendableChatRequest; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import lombok.Builder; 7 | import lombok.ToString; 8 | 9 | import java.util.function.Consumer; 10 | 11 | @ToString 12 | public class ExportChatInviteLink extends SendableChatRequest { 13 | @Builder 14 | protected ExportChatInviteLink(Consumer callback, Consumer errorHandler, ChatId chatId) { 15 | super("exportChatInviteLink", String.class, callback, errorHandler, chatId); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/framework/ResponseParameters.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.framework; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | @Getter 7 | @ToString 8 | public class ResponseParameters { 9 | // in the case that the group the bot 10 | // is trying to send a message to has 11 | // upgraded to a supergroup, the new 12 | // chat id provided should be used 13 | // instead 14 | // TODO find a way to handle this 15 | private long migrateToChatId; 16 | // if the bot has been spamming the 17 | // telegram server, this is the time 18 | // in seconds the bot should wait until 19 | // it makes its next request 20 | private int retryAfter = -1; 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/games/Game.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.games; 2 | 3 | import com.jtelegram.api.message.media.PhotoSize; 4 | import com.jtelegram.api.message.entity.MessageEntity; 5 | import lombok.AccessLevel; 6 | import lombok.Getter; 7 | import lombok.RequiredArgsConstructor; 8 | import lombok.ToString; 9 | 10 | import java.util.List; 11 | 12 | @Getter 13 | @ToString 14 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 15 | public class Game { 16 | private final String title; 17 | private final String description; 18 | private final List photo; 19 | private final String text; 20 | private final List textEntities; 21 | private final Animation animation; 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/GetMe.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests; 2 | 3 | import com.jtelegram.api.ex.TelegramException; 4 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 5 | import com.jtelegram.api.user.User; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class GetMe extends QueryTelegramRequest { 15 | @Builder 16 | public GetMe(Consumer callback, Consumer errorHandler) { 17 | super("getMe", User.class, callback, errorHandler); 18 | } 19 | 20 | @Override 21 | protected boolean isValid() { 22 | return true; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/UnbanChatMember.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UserAdminChatRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class UnbanChatMember extends UserAdminChatRequest { 15 | @Builder 16 | public UnbanChatMember(Consumer errorHandler, Runnable callback, ChatId chatId, Long userId) { 17 | super("unbanChatMember", errorHandler, callback, chatId, userId); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/location/LocationUpdateEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.location; 2 | 3 | import com.jtelegram.api.message.impl.LocationMessage; 4 | import com.jtelegram.api.TelegramBot; 5 | import com.jtelegram.api.events.Event; 6 | import com.jtelegram.api.message.media.Location; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class LocationUpdateEvent extends Event { 13 | private Location location; 14 | private LocationMessage message; 15 | 16 | public LocationUpdateEvent(TelegramBot bot, LocationMessage message) { 17 | super(bot); 18 | this.location = message.getLocation(); 19 | this.message = message; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/ChatMigratedToChatEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.chat.Chat; 5 | import com.jtelegram.api.events.message.ServiceMessageEvent; 6 | import com.jtelegram.api.message.impl.service.MigrateToChatIdMessage; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class ChatMigratedToChatEvent extends ServiceMessageEvent { 13 | private Chat newChat; 14 | 15 | public ChatMigratedToChatEvent(TelegramBot bot, MigrateToChatIdMessage originMessage) { 16 | super(bot, originMessage); 17 | this.newChat = originMessage.getChat(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/GroupChatCreatedEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.chat.Chat; 4 | import com.jtelegram.api.TelegramBot; 5 | import com.jtelegram.api.events.message.ServiceMessageEvent; 6 | import com.jtelegram.api.message.impl.service.GroupChatCreatedMessage; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class GroupChatCreatedEvent extends ServiceMessageEvent { 13 | private Chat newChat; 14 | 15 | public GroupChatCreatedEvent(TelegramBot bot, GroupChatCreatedMessage originMessage) { 16 | super(bot, originMessage); 17 | this.newChat = originMessage.getChat(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/ChatMemberLeftEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.message.ServiceMessageEvent; 5 | import com.jtelegram.api.user.User; 6 | import com.jtelegram.api.message.impl.service.LeftChatMemberMessage; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class ChatMemberLeftEvent extends ServiceMessageEvent { 13 | private User leftMember; 14 | 15 | public ChatMemberLeftEvent(TelegramBot bot, LeftChatMemberMessage originMessage) { 16 | super(bot, originMessage); 17 | this.leftMember = originMessage.getLeftChatMember(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-test/src/main/java/com/jtelegram/api/test/ResourceTestModule.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.test; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import lombok.Getter; 5 | 6 | import java.io.File; 7 | import java.io.InputStream; 8 | 9 | @Getter 10 | public abstract class ResourceTestModule extends AbstractTestModule { 11 | private String resourceName; 12 | 13 | protected ResourceTestModule(TelegramBot bot, String resourceName) { 14 | super(bot); 15 | this.resourceName = resourceName; 16 | } 17 | 18 | public File getResourceFile() { 19 | return new File("test-resources", resourceName); 20 | } 21 | 22 | public InputStream getResourceStream() { 23 | return getClass().getResourceAsStream(resourceName); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/PinnedMessageEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.events.message.ServiceMessageEvent; 4 | import com.jtelegram.api.TelegramBot; 5 | import com.jtelegram.api.message.Message; 6 | import com.jtelegram.api.message.impl.service.PinnedMessageMessage; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class PinnedMessageEvent extends ServiceMessageEvent { 13 | private Message pinnedMessage; 14 | 15 | public PinnedMessageEvent(TelegramBot bot, PinnedMessageMessage originMessage) { 16 | super(bot, originMessage); 17 | this.pinnedMessage = originMessage.getPinnedMessage(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/ChatMigratedFromChatEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.chat.Chat; 5 | import com.jtelegram.api.events.message.ServiceMessageEvent; 6 | import com.jtelegram.api.message.impl.service.MigrateFromChatIdMessage; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class ChatMigratedFromChatEvent extends ServiceMessageEvent { 13 | private Chat newChat; 14 | 15 | public ChatMigratedFromChatEvent(TelegramBot bot, MigrateFromChatIdMessage originMessage) { 16 | super(bot, originMessage); 17 | this.newChat = originMessage.getChat(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/payment/SuccessfulPaymentEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.payment; 2 | 3 | import com.jtelegram.api.events.message.MessageEvent; 4 | import com.jtelegram.api.message.impl.SuccessfulPaymentMessage; 5 | import com.jtelegram.api.message.payments.SuccessfulPayment; 6 | import com.jtelegram.api.TelegramBot; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class SuccessfulPaymentEvent extends MessageEvent { 13 | private SuccessfulPayment payment; 14 | 15 | public SuccessfulPaymentEvent(TelegramBot bot, SuccessfulPaymentMessage message) { 16 | super(bot, message); 17 | this.payment = message.getSuccessfulPayment(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/UserLoggedInEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.message.ServiceMessageEvent; 5 | import com.jtelegram.api.message.impl.service.UserLoggedInMessage; 6 | import lombok.ToString; 7 | 8 | /** 9 | * When the user logs in from a website 10 | * (and most of the time, a new chat is instantiated) 11 | * 12 | * At this point, it is guaranteed that the bot can 13 | * send messages to the user. 14 | */ 15 | @ToString(callSuper = true) 16 | public class UserLoggedInEvent extends ServiceMessageEvent { 17 | public UserLoggedInEvent(TelegramBot bot, UserLoggedInMessage originMessage) { 18 | super(bot, originMessage); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/AnimationInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.requests.message.framework.ParseMode; 6 | import lombok.Builder; 7 | import lombok.ToString; 8 | 9 | @ToString(callSuper = true) 10 | public class AnimationInputMedia extends AnimatedInputMedia { 11 | @Builder 12 | public AnimationInputMedia(InputFile media, String caption, ParseMode parseMode, 13 | LocalInputFile thumbnail, int width, int height, long duration) { 14 | super(InputMediaType.ANIMATION, media, caption, parseMode, thumbnail, width, height, duration); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/NewChatPhotoEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.message.ServiceMessageEvent; 5 | import com.jtelegram.api.message.impl.service.NewChatPhotoMessage; 6 | import com.jtelegram.api.message.media.PhotoSize; 7 | import java.util.List; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | @Getter 12 | @ToString(callSuper = true) 13 | public class NewChatPhotoEvent extends ServiceMessageEvent { 14 | private List newChatPhoto; 15 | 16 | public NewChatPhotoEvent(TelegramBot bot, NewChatPhotoMessage originMessage) { 17 | super(bot, originMessage); 18 | this.newChatPhoto = originMessage.getNewChatPhoto(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/events/chat/ChatMemberJoinedEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.events.chat; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.message.ServiceMessageEvent; 5 | import com.jtelegram.api.message.impl.service.NewChatMembersMessage; 6 | import com.jtelegram.api.user.User; 7 | import lombok.Getter; 8 | 9 | import java.util.List; 10 | import lombok.ToString; 11 | 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class ChatMemberJoinedEvent extends ServiceMessageEvent { 15 | private List newMembers; 16 | 17 | public ChatMemberJoinedEvent(TelegramBot bot, NewChatMembersMessage originMessage) { 18 | super(bot, originMessage); 19 | this.newMembers = originMessage.getNewChatMembers(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/keyboard/ReplyKeyboardRow.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.keyboard; 2 | 3 | import com.google.gson.*; 4 | import lombok.*; 5 | 6 | import java.lang.reflect.Type; 7 | import java.util.List; 8 | 9 | @Builder 10 | @Getter 11 | @ToString 12 | public class ReplyKeyboardRow { 13 | @Singular 14 | private List buttons; 15 | 16 | public static class Serializer implements JsonSerializer { 17 | @Override 18 | public JsonElement serialize(ReplyKeyboardRow replyKeyboardRow, Type type, JsonSerializationContext context) { 19 | JsonArray array = new JsonArray(); 20 | replyKeyboardRow.buttons.forEach((e) -> array.add(context.serialize(e))); 21 | return array; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/CommandHandler.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands; 2 | 3 | import com.jtelegram.api.commands.filters.CommandFilter; 4 | import com.jtelegram.api.events.message.TextMessageEvent; 5 | 6 | public interface CommandHandler extends CommandFilter { 7 | 8 | /** 9 | * Runs this command. 10 | * 11 | * @param event The event containing the command 12 | * @param command The command being run 13 | */ 14 | void onCommand(TextMessageEvent event, Command command); 15 | 16 | @Override 17 | default boolean test(TextMessageEvent event, Command command) { 18 | try { 19 | onCommand(event, command); 20 | } catch (Exception ex) { 21 | ex.printStackTrace(); 22 | } 23 | return true; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/UserAdminChatRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import lombok.Getter; 6 | 7 | import java.util.function.Consumer; 8 | 9 | @Getter 10 | public class UserAdminChatRequest extends UpdatableChatRequest { 11 | private final Long userId; 12 | 13 | public UserAdminChatRequest(String endPoint, Consumer errorHandler, Runnable callback, ChatId chatId, Long userId) { 14 | super(endPoint, errorHandler, callback, chatId); 15 | this.userId = userId; 16 | } 17 | 18 | @Override 19 | protected boolean isValid() { 20 | return super.isValid() && userId != null; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/InputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.requests.message.framework.ParseMode; 5 | import lombok.AccessLevel; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.Collections; 11 | import java.util.List; 12 | 13 | @Getter 14 | @ToString 15 | @AllArgsConstructor(access = AccessLevel.PROTECTED) 16 | public abstract class InputMedia { 17 | private final InputMediaType type; 18 | private InputFile media; 19 | private String caption; 20 | private ParseMode parseMode; 21 | 22 | public List getAllMedia() { 23 | return Collections.singletonList(media); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/file/LocalInputFile.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.file; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.io.File; 7 | import lombok.ToString; 8 | import okhttp3.MultipartBody; 9 | import okhttp3.RequestBody; 10 | 11 | @Getter 12 | @ToString 13 | @AllArgsConstructor 14 | public class LocalInputFile implements InputFile { 15 | private File data; 16 | 17 | @Override 18 | public String getIdentifier() { 19 | return data.getName(); 20 | } 21 | 22 | @Override 23 | public void attachTo(MultipartBody.Builder builder) { 24 | String identifier = getIdentifier(); 25 | builder.addFormDataPart(identifier, identifier, RequestBody.create(InputFileRequest.OCTET_STREAM_TYPE, data)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/file/IdInputFile.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.file; 2 | 3 | import com.jtelegram.api.message.media.FileMedium; 4 | import lombok.AccessLevel; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString 11 | @AllArgsConstructor(access = AccessLevel.PRIVATE) 12 | public class IdInputFile implements InputFile { 13 | // this is the id 14 | private String data; 15 | 16 | @Override 17 | public String getIdentifier() { 18 | return null; 19 | } 20 | 21 | public static IdInputFile of(String data) { 22 | return new IdInputFile(data); 23 | } 24 | 25 | public static IdInputFile of(FileMedium medium) { 26 | return new IdInputFile(medium.getFileId()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/CaptionableMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message; 2 | 3 | import com.jtelegram.api.message.entity.MessageEntity; 4 | import lombok.Getter; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | import lombok.ToString; 9 | 10 | @ToString(callSuper = true) 11 | public abstract class CaptionableMessage extends Message { 12 | @Getter 13 | private String caption; 14 | private transient boolean entitiesUpdated = false; 15 | private List captionEntities = new ArrayList<>(); 16 | 17 | public List getCaptionEntities() { 18 | if (!entitiesUpdated) { 19 | captionEntities.forEach((e) -> e.updateContent(caption)); 20 | entitiesUpdated = true; 21 | } 22 | 23 | return captionEntities; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/KickChatMember.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UserAdminChatRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class KickChatMember extends UserAdminChatRequest { 15 | private final Long untilDate; 16 | 17 | @Builder 18 | public KickChatMember(Consumer errorHandler, Runnable callback, ChatId chatId, Long userId, Long untilDate) { 19 | super("kickChatMember", errorHandler, callback, chatId, userId); 20 | this.untilDate = untilDate; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/UpdatableChatRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 6 | import lombok.Getter; 7 | 8 | import java.util.function.Consumer; 9 | 10 | @Getter 11 | public class UpdatableChatRequest extends UpdateTelegramRequest { 12 | private final ChatId chatId; 13 | 14 | public UpdatableChatRequest(String endPoint, Consumer errorHandler, Runnable callback, ChatId chatId) { 15 | super(endPoint, errorHandler, callback); 16 | this.chatId = chatId; 17 | } 18 | 19 | @Override 20 | protected boolean isValid() { 21 | return chatId != null; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/commands/CommandRegistry.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin.commands 2 | 3 | import com.jtelegram.api.commands.Command 4 | import com.jtelegram.api.commands.filters.CommandFilter 5 | import com.jtelegram.api.events.message.TextMessageEvent 6 | import com.jtelegram.api.kotlin.BotContext 7 | import com.jtelegram.api.kotlin.KTelegramBot 8 | import kotlinx.coroutines.launch 9 | 10 | fun suspendCommand(filter: suspend BotContext.(TextMessageEvent, Command) -> Unit) = CommandFilter { event, command -> 11 | val bot = event.bot 12 | 13 | if (bot !is KTelegramBot) { 14 | throw IllegalStateException("Suspending command filters can only be used with KTelegramBots!") 15 | } 16 | 17 | bot.coroutineScope.launch { 18 | filter.invoke(BotContext(bot), event, command) 19 | } 20 | 21 | true 22 | } 23 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/update/UpdateProvider.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.update; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | 5 | /** 6 | * Listens for requests from Telegram's servers 7 | * for one or more bots. The provider is owned 8 | * by a registry and should call the registerUpdate() 9 | * method in the bot registry when an update is received 10 | * 11 | * The update provider is expected to be given 12 | * the owning registry in the constructor to 13 | * do so. 14 | */ 15 | public interface UpdateProvider { 16 | /** 17 | * Begin listening for updates for this bot 18 | * @param bot The bot instance 19 | */ 20 | void listenFor(TelegramBot bot); 21 | 22 | /** 23 | * Stop listening for updates for this bot 24 | * @param bot The bot instance 25 | */ 26 | void stopListening(TelegramBot bot); 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/filters/CommandFilter.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands.filters; 2 | 3 | import com.jtelegram.api.commands.Command; 4 | import com.jtelegram.api.events.message.TextMessageEvent; 5 | 6 | /** 7 | * Filters messages out according for if they match certain 8 | * test criteria, as defined by the implementing sub-class. 9 | */ 10 | public interface CommandFilter { 11 | 12 | /** 13 | * Checks to see if the given event and command test to be {@code true} 14 | * according to this filter. 15 | * 16 | * @param event The event to be tested 17 | * @param command The command data executed in this event 18 | * 19 | * @return True if and only if this filter allows this event and 20 | * command combination to go ahead. 21 | */ 22 | boolean test(TextMessageEvent event, Command command); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/ex/InvalidResponseException.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.ex; 2 | 3 | import lombok.Getter; 4 | import lombok.ToString; 5 | 6 | /** 7 | * This exception is called when the API returns 8 | * a non-JSON response 9 | */ 10 | @ToString(callSuper = true) 11 | @Getter 12 | public class InvalidResponseException extends MessageBasedException { 13 | /** 14 | * A description of the error which could contain 15 | * sensitive information (e.g. message contents) 16 | * 17 | * Separate from getMessage() in order to avoid 18 | * unnecessary logging of sensitive data 19 | */ 20 | private String sensitiveMessage; 21 | 22 | public InvalidResponseException(String message, String sensitiveAddition) { 23 | super(message); 24 | this.sensitiveMessage = message + " SENSITIVE: " + sensitiveAddition; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/events/EventRegistry.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin.events 2 | 3 | import com.jtelegram.api.events.Event 4 | import com.jtelegram.api.events.EventRegistry 5 | import com.jtelegram.api.kotlin.BotContext 6 | import com.jtelegram.api.kotlin.KTelegramBot 7 | import kotlinx.coroutines.launch 8 | import kotlin.reflect.KClass 9 | 10 | typealias KEventListener = suspend BotContext.(E) -> Unit 11 | 12 | fun EventRegistry.on(eventType: KClass, listener: KEventListener) { 13 | val bot = this.bot 14 | 15 | if (bot !is KTelegramBot) { 16 | throw IllegalStateException("Suspending listeners can only be used with KTelegramBots!") 17 | } 18 | 19 | registerEvent(eventType.java) { event -> 20 | bot.coroutineScope.launch { 21 | listener.invoke(BotContext(bot), event) 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/GetFile.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests; 2 | 3 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 4 | import com.jtelegram.api.TelegramFile; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class GetFile extends QueryTelegramRequest { 15 | private String fileId; 16 | 17 | @Builder 18 | protected GetFile(Consumer callback, Consumer errorHandler, String fileId) { 19 | super("getFile", TelegramFile.class, callback, errorHandler); 20 | this.fileId = fileId; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return fileId != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/VoiceMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.CaptionableMessage; 4 | import com.jtelegram.api.message.media.Voice; 5 | import com.jtelegram.api.requests.message.edit.EditMessageCaption; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class VoiceMessage extends CaptionableMessage { 12 | private Voice voice; 13 | 14 | @Override 15 | public Voice getContent() { 16 | return voice; 17 | } 18 | 19 | /** 20 | * Creates a request builder for editing the caption of this message. 21 | * 22 | * @return the request builder 23 | */ 24 | public EditMessageCaption.EditMessageCaptionBuilder toEditCaptionRequest() { 25 | return EditMessageCaption.forMessage(this); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/util/LowercaseEnumAdapter.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.util; 2 | 3 | import com.google.gson.TypeAdapter; 4 | import com.google.gson.stream.JsonReader; 5 | import com.google.gson.stream.JsonWriter; 6 | import lombok.RequiredArgsConstructor; 7 | 8 | import java.io.IOException; 9 | 10 | /** 11 | * Merely just lower case the enum's value 12 | */ 13 | @RequiredArgsConstructor 14 | public class LowercaseEnumAdapter> extends TypeAdapter { 15 | private final Class enumClass; 16 | 17 | @Override 18 | public void write(JsonWriter jsonWriter, T anEnum) throws IOException { 19 | jsonWriter.value(anEnum.name().toLowerCase()); 20 | } 21 | 22 | @Override 23 | public T read(JsonReader jsonReader) throws IOException { 24 | return Enum.valueOf(enumClass, jsonReader.nextString().toUpperCase()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/result/framework/DimensionalThumbableInlineResult.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.result.framework; 2 | 3 | import com.jtelegram.api.inline.input.InputMessageContent; 4 | import com.jtelegram.api.inline.keyboard.InlineKeyboardMarkup; 5 | import lombok.Getter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @ToString(callSuper = true) 10 | public abstract class DimensionalThumbableInlineResult extends ThumbableInlineResult { 11 | private Integer thumbWidth; 12 | private Integer thumbHeight; 13 | 14 | protected DimensionalThumbableInlineResult(String id, InlineKeyboardMarkup replyMarkup, InputMessageContent inputMessageContent, String thumbUrl, Integer thumbWidth, Integer thumbHeight) { 15 | super(id, replyMarkup, inputMessageContent, thumbUrl); 16 | this.thumbWidth = thumbWidth; 17 | this.thumbHeight = thumbHeight; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/GetChat.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.Chat; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class GetChat extends QueryTelegramRequest { 16 | private ChatId chatId; 17 | 18 | @Builder 19 | protected GetChat(Consumer callback, Consumer errorHandler, ChatId chatId) { 20 | super("getChat", Chat.class, callback, errorHandler); 21 | this.chatId = chatId; 22 | } 23 | 24 | @Override 25 | protected boolean isValid() { 26 | return chatId != null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/DeleteChatStickerSet.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class DeleteChatStickerSet extends UpdateTelegramRequest { 15 | private ChatId chatId; 16 | 17 | @Builder 18 | public DeleteChatStickerSet(Consumer errorHandler, Runnable callback, ChatId chatId) { 19 | super("deleteChatStickerSet", errorHandler, callback); 20 | this.chatId = chatId; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return chatId != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/chat/ChatMember.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.chat; 2 | 3 | import com.jtelegram.api.user.User; 4 | import lombok.*; 5 | 6 | @Getter 7 | @ToString 8 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 9 | @EqualsAndHashCode(of = "user") 10 | public class ChatMember { 11 | private User user; 12 | private ChatMemberStatus status; 13 | private boolean canBeEdited; 14 | private boolean canChangeInfo; 15 | private boolean canPostMessages; 16 | private boolean canEditMessages; 17 | private boolean canDeleteMessages; 18 | private boolean canInviteUsers; 19 | private boolean canRestrictMembers; 20 | private boolean canPinMessages; 21 | private boolean canPromoteMembers; 22 | private boolean canSendMessages; 23 | private boolean canSendMediaMessages; 24 | private boolean canSendOtherMessages; 25 | private boolean canAddWebPagePreviews; 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/VideoNoteMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.CaptionableMessage; 4 | import com.jtelegram.api.message.media.VideoNote; 5 | import com.jtelegram.api.requests.message.edit.EditMessageCaption; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class VideoNoteMessage extends CaptionableMessage { 12 | private VideoNote videoNote; 13 | 14 | @Override 15 | public VideoNote getContent() { 16 | return videoNote; 17 | } 18 | 19 | /** 20 | * Creates a request builder for editing the caption of this message. 21 | * 22 | * @return the request builder 23 | */ 24 | public EditMessageCaption.EditMessageCaptionBuilder toEditCaptionRequest() { 25 | return EditMessageCaption.forMessage(this); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/sticker/GetStickerSet.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.sticker; 2 | 3 | import com.jtelegram.api.ex.TelegramException; 4 | import com.jtelegram.api.message.sticker.StickerSet; 5 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class GetStickerSet extends QueryTelegramRequest { 15 | private String name; 16 | 17 | @Builder 18 | protected GetStickerSet(Consumer callback, Consumer errorHandler, String name) { 19 | super("getStickerSet", StickerSet.class, callback, errorHandler); 20 | this.name = name; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return name != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/SimpleMenu.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | 8 | import java.util.ArrayList; 9 | import java.util.Arrays; 10 | import java.util.List; 11 | 12 | public class SimpleMenu extends Menu { 13 | @Getter 14 | private final List rows; 15 | 16 | @Builder 17 | private SimpleMenu(TelegramBot bot) { 18 | super(bot); 19 | rows = new ArrayList<>(); 20 | } 21 | 22 | @Override 23 | public void handleException(TelegramException exception) { 24 | //ignored 25 | } 26 | 27 | public void addRow(MenuRow... rows) { 28 | this.rows.addAll(Arrays.asList(rows)); 29 | } 30 | 31 | public void setRow(int index, MenuRow row) { 32 | this.rows.set(index, row); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/LocationMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.Message; 4 | import com.jtelegram.api.message.media.Location; 5 | import com.jtelegram.api.requests.message.edit.EditMessageLiveLocation; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public class LocationMessage extends Message { 12 | private Location location; 13 | 14 | @Override 15 | public Location getContent() { 16 | return location; 17 | } 18 | 19 | /** 20 | * Creates a request builder for editing the location represented by this message. 21 | * 22 | * @return the request builder 23 | */ 24 | public EditMessageLiveLocation.EditMessageLiveLocationBuilder toEditLiveLocationRequest() { 25 | return EditMessageLiveLocation.forMessage(this); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/GetChatMembersCount.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class GetChatMembersCount extends QueryTelegramRequest { 15 | private ChatId chatId; 16 | 17 | @Builder 18 | protected GetChatMembersCount(Consumer callback, Consumer errorHandler, ChatId chatId) { 19 | super("getChatMembersCount", Integer.class, callback, errorHandler); 20 | this.chatId = chatId; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return chatId != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/SetChatTitle.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class SetChatTitle extends UpdatableChatRequest { 15 | private final String title; 16 | 17 | @Builder 18 | public SetChatTitle(Consumer errorHandler, Runnable callback, ChatId chatId, String title) { 19 | super("setChatTitle", errorHandler, callback, chatId); 20 | this.title = title; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return super.isValid() && title != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.github/settings.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | github 8 | 9 | 10 | 11 | 12 | github 13 | 14 | 15 | github 16 | GitHub jTelegram Apache Maven Packages 17 | https://maven.pkg.github.com/jTelegram/jTelegramBotAPI 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | github 26 | ${github.user} 27 | ${github.password} 28 | 29 | 30 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/VideoInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.requests.message.framework.ParseMode; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class VideoInputMedia extends AnimatedInputMedia { 13 | private boolean supportsStreaming; 14 | 15 | @Builder 16 | public VideoInputMedia(InputFile media, String caption, ParseMode parseMode, LocalInputFile thumbnail, 17 | int width, int height, long duration, boolean supportsStreaming) { 18 | super(InputMediaType.VIDEO, media, caption, parseMode, thumbnail, width, height, duration); 19 | this.supportsStreaming = supportsStreaming; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/Command.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands; 2 | 3 | import com.jtelegram.api.chat.Chat; 4 | import com.jtelegram.api.message.impl.TextMessage; 5 | import com.jtelegram.api.user.User; 6 | import lombok.AccessLevel; 7 | import lombok.Getter; 8 | import lombok.RequiredArgsConstructor; 9 | import lombok.ToString; 10 | 11 | import java.util.List; 12 | 13 | @RequiredArgsConstructor(access = AccessLevel.PROTECTED) 14 | @Getter 15 | @ToString 16 | public class Command { 17 | private final String baseCommand; 18 | private final boolean mentioned; 19 | private final List args; 20 | private final TextMessage baseMessage; 21 | 22 | public String getArgsAsText() { 23 | return String.join(" ", args); 24 | } 25 | 26 | public Chat getChat() { 27 | return baseMessage.getChat(); 28 | } 29 | 30 | public User getSender() { 31 | return baseMessage.getSender(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/SimpleMenuButton.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu; 2 | 3 | import com.jtelegram.api.events.inline.keyboard.CallbackQueryEvent; 4 | import lombok.Builder; 5 | 6 | import java.util.function.BiFunction; 7 | 8 | public class SimpleMenuButton extends MenuButton { 9 | private String label; 10 | private BiFunction onPress; 11 | 12 | @Builder 13 | private SimpleMenuButton(String label, BiFunction onPress) { 14 | this.label = label; 15 | this.onPress = onPress; 16 | } 17 | 18 | @Override 19 | public String getLabel() { 20 | return label; 21 | } 22 | 23 | public void setLabel(String label) { 24 | this.label = label; 25 | } 26 | 27 | 28 | @Override 29 | public boolean onPress(CallbackQueryEvent event) { 30 | return onPress.apply(this, event); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/AnimatedInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.requests.message.framework.ParseMode; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | public abstract class AnimatedInputMedia extends ThumbableInputMedia { 12 | private int width; 13 | private int height; 14 | private long duration; 15 | 16 | protected AnimatedInputMedia(InputMediaType type, InputFile media, String caption, ParseMode parseMode, LocalInputFile thumbnail, 17 | int width, int height, long duration) { 18 | super(type, media, caption, parseMode, thumbnail); 19 | this.width = width; 20 | this.height = height; 21 | this.duration = duration; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/GetChatAdministrators.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.ChatMember; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class GetChatAdministrators extends QueryTelegramRequest { 16 | private ChatId chatId; 17 | 18 | @Builder 19 | public GetChatAdministrators(Consumer callback, Consumer errorHandler, ChatId chatId) { 20 | super("getChatAdministrators", ChatMember[].class, callback, errorHandler); 21 | this.chatId = chatId; 22 | } 23 | 24 | @Override 25 | protected boolean isValid() { 26 | return chatId != null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/filters/MentionFilter.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands.filters; 2 | 3 | import com.jtelegram.api.chat.ChatType; 4 | import com.jtelegram.api.commands.Command; 5 | import com.jtelegram.api.events.message.TextMessageEvent; 6 | 7 | /** 8 | * A {@link CommandFilter} testing if the bot was mentioned in 9 | * the command. 10 | */ 11 | public class MentionFilter extends AbstractCommandFilter { 12 | 13 | /** 14 | * Creates a MentionFilter with given children. 15 | * 16 | * @param children The children filters, which will be checked in order 17 | * if this filter tests to be {@code true} 18 | */ 19 | public MentionFilter(CommandFilter... children) { 20 | super(children); 21 | } 22 | 23 | @Override 24 | protected boolean preTest(TextMessageEvent event, Command command) { 25 | return event.getMessage().getChat().getType() == ChatType.PRIVATE || command.isMentioned(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/result/InlineResultGame.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.result; 2 | 3 | import com.jtelegram.api.inline.keyboard.InlineKeyboardMarkup; 4 | import com.jtelegram.api.inline.result.framework.InlineResult; 5 | import com.jtelegram.api.inline.input.InputMessageContent; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString(callSuper = true) 11 | // this class is the only one which doesn't 12 | // allow for input message content, so it's 13 | // handled like the outlier that it is. 14 | public class InlineResultGame extends InlineResult { 15 | private String gameShortName; 16 | 17 | public InlineResultGame(String id, InlineKeyboardMarkup replyMarkup, String gameShortName) { 18 | super(id, replyMarkup, null); 19 | this.gameShortName = gameShortName; 20 | } 21 | 22 | @Override 23 | public InputMessageContent getInputMessageContent() { 24 | throw new UnsupportedOperationException(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/InputFileMessageUpdate.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.message.input.file.InputFileRequest; 4 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 5 | import com.jtelegram.api.TelegramBot; 6 | import com.jtelegram.api.ex.TelegramException; 7 | import okhttp3.Request; 8 | 9 | import java.util.function.Consumer; 10 | 11 | public abstract class InputFileMessageUpdate extends UpdateTelegramRequest implements InputFileRequest { 12 | protected InputFileMessageUpdate(String endPoint, Consumer errorHandler, Runnable callback) { 13 | super(endPoint, errorHandler, callback); 14 | } 15 | 16 | @Override 17 | public Request.Builder build(TelegramBot bot) { 18 | return getBuilder(bot); 19 | } 20 | 21 | @Override 22 | public Request.Builder superBuild(TelegramBot bot) { 23 | return super.build(bot); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/sticker/Sticker.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.sticker; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.message.media.PhotoSize; 6 | import com.jtelegram.api.message.media.VisualFileMedium; 7 | import com.jtelegram.api.message.input.file.InputFile; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | @Getter 12 | @ToString(callSuper = true) 13 | public class Sticker extends VisualFileMedium { 14 | private PhotoSize thumb; 15 | private String emoji; 16 | @SerializedName("set_name") 17 | private String owningSet; 18 | private MaskPosition maskPosition; 19 | 20 | // verifies that if the input file 21 | // is local, that it is below 512 kb 22 | public static boolean verifySize(InputFile file) { 23 | return (!(file instanceof LocalInputFile) || ((LocalInputFile) file).getData().getTotalSpace() <= 512_000L); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/SetChatDescription.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class SetChatDescription extends UpdatableChatRequest { 15 | private final String description; 16 | 17 | @Builder 18 | public SetChatDescription( Consumer errorHandler, Runnable callback, ChatId chatId, String description) { 19 | super("setChatDescription", errorHandler, callback, chatId); 20 | this.description = description; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return super.isValid() && description != null && description.length() < 256; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/SendableChatRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @EqualsAndHashCode(callSuper = true) 14 | public class SendableChatRequest extends QueryTelegramRequest { 15 | @Setter 16 | private ChatId chatId; 17 | 18 | protected SendableChatRequest(String endPoint, Class callbackType, Consumer callback, Consumer errorHandler, ChatId chatId) { 19 | super(endPoint, callbackType, callback, errorHandler); 20 | this.chatId = chatId; 21 | } 22 | 23 | @Override 24 | protected boolean isValid() { 25 | return chatId != null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2017 jTelegram.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/input/InputTextMessageContent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.input; 2 | 3 | import com.jtelegram.api.requests.message.framework.ParseMode; 4 | import com.jtelegram.api.util.TextBuilder; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | @Getter 10 | @ToString 11 | @Builder 12 | public class InputTextMessageContent extends InputMessageContent { 13 | private String messageText; 14 | private ParseMode parseMode; 15 | private Boolean disableWebPagePreview; 16 | 17 | public static class InputTextMessageContentBuilder { 18 | public InputTextMessageContentBuilder messageText(TextBuilder builder) { 19 | this.parseMode = ParseMode.HTML; 20 | this.messageText = builder.toHtml(); 21 | return this; 22 | } 23 | 24 | public InputTextMessageContentBuilder messageText(String str) { 25 | this.messageText = str; 26 | return this; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/result/cached/InlineCachedResultSticker.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.result.cached; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.jtelegram.api.inline.keyboard.InlineKeyboardMarkup; 5 | import com.jtelegram.api.inline.result.framework.InlineResult; 6 | import com.jtelegram.api.message.input.file.IdInputFile; 7 | import com.jtelegram.api.inline.input.InputMessageContent; 8 | import lombok.Builder; 9 | import lombok.Getter; 10 | import lombok.ToString; 11 | 12 | @Getter 13 | @ToString(callSuper = true) 14 | public class InlineCachedResultSticker extends InlineResult implements InlineResult.Cached { 15 | @SerializedName("sticker_file_id") 16 | private IdInputFile fileId; 17 | 18 | @Builder 19 | private InlineCachedResultSticker(String id, InlineKeyboardMarkup replyMarkup, InputMessageContent inputMessageContent, IdInputFile fileId) { 20 | super(id, replyMarkup, inputMessageContent); 21 | this.fileId = fileId; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/inline/keyboard/InlineKeyboardRow.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.inline.keyboard; 2 | 3 | import com.google.gson.JsonArray; 4 | import com.google.gson.JsonElement; 5 | import com.google.gson.JsonSerializationContext; 6 | import com.google.gson.JsonSerializer; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.Singular; 10 | 11 | import java.lang.reflect.Type; 12 | import java.util.List; 13 | import lombok.ToString; 14 | 15 | @Getter 16 | @Builder 17 | @ToString 18 | public class InlineKeyboardRow { 19 | @Singular 20 | private List buttons; 21 | 22 | public static class Serializer implements JsonSerializer { 23 | @Override 24 | public JsonElement serialize(InlineKeyboardRow row, Type type, JsonSerializationContext context) { 25 | JsonArray array = new JsonArray(); 26 | row.buttons.forEach((e) -> array.add(context.serialize(e))); 27 | return array; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/SendChatAction.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.ChatAction; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class SendChatAction extends UpdateTelegramRequest { 16 | private ChatId chatId; 17 | private ChatAction action; 18 | 19 | @Builder 20 | public SendChatAction(Consumer errorHandler, Runnable callback, ChatId chatId, ChatAction action) { 21 | super("sendChatAction", errorHandler, callback); 22 | this.chatId = chatId; 23 | this.action = action; 24 | } 25 | 26 | @Override 27 | protected boolean isValid() { 28 | return chatId != null && action != null; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/input/media/AudioInputMedia.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.input.media; 2 | 3 | import com.jtelegram.api.message.input.file.InputFile; 4 | import com.jtelegram.api.message.input.file.LocalInputFile; 5 | import com.jtelegram.api.requests.message.framework.ParseMode; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class AudioInputMedia extends ThumbableInputMedia { 13 | private long duration; 14 | private String performer; 15 | private String title; 16 | 17 | @Builder 18 | public AudioInputMedia(InputFile media, String caption, ParseMode parseMode, 19 | LocalInputFile thumbnail, long duration, String performer, 20 | String title) { 21 | super(InputMediaType.AUDIO, media, caption, parseMode, thumbnail); 22 | this.duration = duration; 23 | this.performer = performer; 24 | this.title = title; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/StopMessageLiveLocation.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.message.Message; 6 | import com.jtelegram.api.requests.message.framework.req.SendableInlineRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class StopMessageLiveLocation extends SendableInlineRequest { 16 | @Builder 17 | protected StopMessageLiveLocation(Class callbackType, Consumer callback, Consumer errorHandler, ChatId chatId, Integer messageId, String inlineMessageId) { 18 | super("stopMessageLiveLocation", callbackType, callback, errorHandler, chatId, messageId, inlineMessageId); 19 | } 20 | 21 | @Override 22 | protected boolean isValid() { 23 | return super.isValid(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/GetChatMember.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat; 2 | 3 | import com.jtelegram.api.chat.ChatMember; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class GetChatMember extends QueryTelegramRequest { 16 | private ChatId chatId; 17 | private Long userId; 18 | 19 | @Builder 20 | protected GetChatMember(Consumer callback, Consumer errorHandler, ChatId chatId, Long userId) { 21 | super("getChatMember", ChatMember.class, callback, errorHandler); 22 | this.chatId = chatId; 23 | this.userId = userId; 24 | } 25 | 26 | @Override 27 | protected boolean isValid() { 28 | return chatId != null && userId != null; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/SendableInputFileInlineRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.message.input.file.InputFileRequest; 7 | import okhttp3.Request; 8 | 9 | import java.util.function.Consumer; 10 | 11 | public abstract class SendableInputFileInlineRequest extends SendableInlineRequest implements InputFileRequest { 12 | public SendableInputFileInlineRequest(String endPoint, Class callbackType, Consumer callback, Consumer errorHandler, 13 | ChatId chatId, Integer messageId, String inlineMessageId) { 14 | super(endPoint, callbackType, callback, errorHandler, chatId, messageId, inlineMessageId); 15 | } 16 | 17 | @Override 18 | public Request.Builder superBuild(TelegramBot bot) { 19 | return super.build(bot); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/PinChatMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.requests.message.framework.req.UpdatableChatRequest; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class PinChatMessage extends UpdatableChatRequest { 15 | private final Integer messageId; 16 | private final Boolean disableNotification; 17 | 18 | @Builder 19 | public PinChatMessage(Consumer errorHandler, Runnable callback, ChatId chatId, Integer messageId, Boolean disableNotification) { 20 | super("pinChatMessage", errorHandler, callback, chatId); 21 | this.messageId = messageId; 22 | this.disableNotification = disableNotification; 23 | } 24 | 25 | @Override 26 | protected boolean isValid() { 27 | return super.isValid() && messageId != null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/events/inline/InlineQueryEvent.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin.events.inline 2 | 3 | import com.jtelegram.api.events.inline.InlineQueryEvent 4 | import com.jtelegram.api.inline.result.framework.InlineResult 5 | import com.jtelegram.api.kotlin.execute 6 | import com.jtelegram.api.requests.inline.AnswerInlineQuery 7 | 8 | suspend fun InlineQueryEvent.answer ( 9 | results: List, 10 | cacheTime: Int? = null, 11 | isPersonal: Boolean? = null, 12 | nextOffset: String? = null, 13 | switchPmText: String? = null, 14 | switchPmParameter: String? = null 15 | ) { 16 | bot.execute ( 17 | AnswerInlineQuery.builder() 18 | .queryId(query.id) 19 | .results(results) 20 | .cacheTime(cacheTime) 21 | .isPersonal(isPersonal) 22 | .nextOffset(nextOffset) 23 | .switchPmText(switchPmText) 24 | .switchPmParameter(switchPmParameter) 25 | .build() 26 | ) 27 | } -------------------------------------------------------------------------------- /jtelegrambotapi-menus/src/main/java/com/jtelegram/api/menu/events/UnregisteredMenuInteractionEvent.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.menu.events; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.events.Event; 5 | import com.jtelegram.api.events.inline.keyboard.CallbackQueryEvent; 6 | import java.util.UUID; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | @Getter 12 | @ToString(of = {"uuid", "rowIndex", "columnIndex"}) 13 | @EqualsAndHashCode(of = {"uuid", "rowIndex", "columnIndex"}, callSuper = false) 14 | public class UnregisteredMenuInteractionEvent extends Event { 15 | 16 | private final CallbackQueryEvent event; 17 | private final UUID uuid; 18 | private final int rowIndex; 19 | private final int columnIndex; 20 | 21 | public UnregisteredMenuInteractionEvent(TelegramBot bot, CallbackQueryEvent event, UUID uuid, int rowIndex, int columnIndex) { 22 | super(bot); 23 | this.event = event; 24 | this.uuid = uuid; 25 | this.rowIndex = rowIndex; 26 | this.columnIndex = columnIndex; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/SetChatStickerSet.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.function.Consumer; 12 | 13 | @Getter 14 | @ToString 15 | public class SetChatStickerSet extends UpdateTelegramRequest { 16 | private ChatId chatId; 17 | @SerializedName("sticker_set_name") 18 | private String stickerSet; 19 | 20 | @Builder 21 | protected SetChatStickerSet(Consumer errorHandler, Runnable callback, ChatId chatId, String stickerSet) { 22 | super("setChatStickerSet", errorHandler, callback); 23 | this.chatId = chatId; 24 | this.stickerSet = stickerSet; 25 | } 26 | 27 | @Override 28 | protected boolean isValid() { 29 | return chatId != null && stickerSet != null; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/filters/RegexFilter.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands.filters; 2 | 3 | import com.jtelegram.api.commands.Command; 4 | import com.jtelegram.api.events.message.TextMessageEvent; 5 | import java.util.regex.Pattern; 6 | 7 | /** 8 | * A {@link CommandFilter} testing if the command matches 9 | * a certain {@link Pattern regular expression pattern}. 10 | */ 11 | public class RegexFilter extends AbstractCommandFilter { 12 | 13 | private final Pattern pattern; 14 | 15 | /** 16 | * Creates a RegexFilter with given children. 17 | * 18 | * @param pattern The pattern to match against 19 | * @param children The children filters, which will be checked in order 20 | * if this filter tests to be {@code true} 21 | */ 22 | public RegexFilter(Pattern pattern, CommandFilter... children) { 23 | super(children); 24 | this.pattern = pattern; 25 | } 26 | 27 | @Override 28 | protected boolean preTest(TextMessageEvent event, Command command) { 29 | return pattern.matcher(command.getBaseCommand()).matches(); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/payment/AnswerPreCheckoutQuery.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.payment; 2 | 3 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | import lombok.ToString; 8 | 9 | import java.util.function.Consumer; 10 | 11 | @Getter 12 | @ToString 13 | public class AnswerPreCheckoutQuery extends UpdateTelegramRequest { 14 | private String preCheckoutQueryId; 15 | private Boolean ok; 16 | private String errorMessage; 17 | 18 | @Builder 19 | private AnswerPreCheckoutQuery(Consumer errorHandler, Runnable callback, String preCheckoutQueryId, Boolean ok, String errorMessage) { 20 | super("answerPreCheckoutQuery", errorHandler, callback); 21 | this.preCheckoutQueryId = preCheckoutQueryId; 22 | this.ok = ok; 23 | this.errorMessage = errorMessage; 24 | } 25 | 26 | @Override 27 | protected boolean isValid() { 28 | return preCheckoutQueryId != null && ok != null && (ok || errorMessage != null); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/sticker/DeleteSticker.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.sticker; 2 | 3 | import com.jtelegram.api.message.input.file.IdInputFile; 4 | import com.jtelegram.api.message.media.FileMedium; 5 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest; 6 | import com.jtelegram.api.ex.TelegramException; 7 | import com.jtelegram.api.message.sticker.Sticker; 8 | import lombok.Builder; 9 | import lombok.Getter; 10 | import lombok.ToString; 11 | 12 | import java.util.function.Consumer; 13 | 14 | @Getter 15 | @ToString 16 | public class DeleteSticker extends UpdateTelegramRequest { 17 | /** 18 | * File ID of the sticker 19 | * 20 | * @see Sticker 21 | * @see IdInputFile#of(FileMedium) 22 | */ 23 | private IdInputFile sticker; 24 | 25 | @Builder 26 | private DeleteSticker(Consumer errorHandler, Runnable callback, IdInputFile sticker) { 27 | super("deleteStickerFromSet", errorHandler, callback); 28 | this.sticker = sticker; 29 | } 30 | 31 | @Override 32 | protected boolean isValid() { 33 | return sticker != null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /jtelegrambotapi-test/src/main/java/com/jtelegram/api/test/message/LocationMessageTest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.test.message; 2 | 3 | import com.jtelegram.api.TelegramBot; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.commands.Command; 6 | import com.jtelegram.api.requests.message.send.SendLocation; 7 | import com.jtelegram.api.test.AbstractTestModule; 8 | 9 | public class LocationMessageTest extends AbstractTestModule { 10 | public LocationMessageTest(TelegramBot bot) { 11 | super(bot); 12 | } 13 | 14 | @Override 15 | public String validate(Command command) { 16 | return null; 17 | } 18 | 19 | @Override 20 | public void handle(String[] args, Command command) throws Exception { 21 | bot.perform(SendLocation.builder() 22 | .chatId(ChatId.of(command.getBaseMessage().getChat())) 23 | .latitude(0.0f) 24 | .longitude(0.0f) 25 | .errorHandler((err) -> System.out.println("Location test failed due to " + err.getDescription())) 26 | .build()); 27 | } 28 | 29 | @Override 30 | public String getName() { 31 | return "location"; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /jtelegrambotapi-menus/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | com.jtelegram 9 | jtelegrambotapi 10 | 4.0.12 11 | 12 | 13 | jtelegrambotapi-menus 14 | jTelegramBotAPI Menus 15 | 16 | 17 | 18 | com.jtelegram 19 | jtelegrambotapi-core 20 | ${project.version} 21 | 22 | 23 | org.projectlombok 24 | lombok 25 | 26 | 27 | com.google.code.findbugs 28 | jsr305 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/send/SendGame.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.send; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import com.jtelegram.api.chat.id.ChatId; 5 | import com.jtelegram.api.message.Message; 6 | import com.jtelegram.api.ex.TelegramException; 7 | import com.jtelegram.api.inline.keyboard.InlineKeyboardMarkup; 8 | import com.jtelegram.api.requests.message.framework.req.SendableMessageRequest; 9 | import lombok.Builder; 10 | import lombok.Getter; 11 | import lombok.ToString; 12 | 13 | import java.util.function.Consumer; 14 | 15 | @Getter 16 | @ToString 17 | public class SendGame extends SendableMessageRequest { 18 | @SerializedName("game_short_name") 19 | private String gameId; 20 | 21 | @Builder 22 | private SendGame(Consumer callback, Consumer errorHandler, ChatId chatId, Integer replyToMessageId, 23 | Boolean disableNotification, InlineKeyboardMarkup replyMarkup, String gameId) { 24 | super("sendGame", Message.class, callback, errorHandler, chatId, replyToMessageId, disableNotification, replyMarkup); 25 | this.gameId = gameId; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /jtelegrambotapi-webhooks/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | com.jtelegram 9 | jtelegrambotapi 10 | 4.0.12 11 | 12 | 13 | jtelegrambotapi-webhooks 14 | jTelegramBotAPI Webhooks 15 | 16 | 17 | 18 | com.jtelegram 19 | jtelegrambotapi-core 20 | ${project.version} 21 | 22 | 23 | 24 | io.vertx 25 | vertx-core 26 | 27 | 28 | 29 | org.projectlombok 30 | lombok 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/GetUserProfilePhotos.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests; 2 | 3 | import com.jtelegram.api.requests.framework.QueryTelegramRequest; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.user.UserProfilePhotos; 6 | import lombok.Builder; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | import java.util.function.Consumer; 11 | 12 | @Getter 13 | @ToString 14 | public class GetUserProfilePhotos extends QueryTelegramRequest { 15 | private Long userId; 16 | private Integer offset; 17 | private Integer limit; 18 | 19 | @Builder 20 | protected GetUserProfilePhotos(Consumer callback, Consumer errorHandler, Long userId, Integer offset, Integer limit) { 21 | super("getUserProfilePhotos", UserProfilePhotos.class, callback, errorHandler); 22 | this.userId = userId; 23 | this.offset = offset; 24 | this.limit = limit; 25 | } 26 | 27 | @Override 28 | protected boolean isValid() { 29 | return userId != null && (offset == null || offset >= 0) && 30 | (limit == null || limit >= 1 && limit <= 100); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ktelegrambotapi/src/main/kotlin/com/jtelegram/api/kotlin/TelegramBot.kt: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.kotlin 2 | 3 | import com.jtelegram.api.TelegramBot 4 | import com.jtelegram.api.requests.framework.AbstractTelegramRequest 5 | import com.jtelegram.api.requests.framework.QueryTelegramRequest 6 | import com.jtelegram.api.requests.framework.UpdateTelegramRequest 7 | import kotlin.coroutines.Continuation 8 | import kotlin.coroutines.resume 9 | import kotlin.coroutines.resumeWithException 10 | import kotlin.coroutines.suspendCoroutine 11 | 12 | suspend fun TelegramBot.execute(request: QueryTelegramRequest): T = suspendCoroutine { cont -> 13 | request.useContinuationForErrors(cont) 14 | 15 | request.setCallback { 16 | cont.resume(it) 17 | } 18 | 19 | perform(request) 20 | } 21 | 22 | suspend fun TelegramBot.execute(request: UpdateTelegramRequest) = suspendCoroutine { cont -> 23 | request.useContinuationForErrors(cont) 24 | 25 | request.setCallback { 26 | cont.resume(null) 27 | } 28 | 29 | perform(request) 30 | } 31 | 32 | private fun AbstractTelegramRequest.useContinuationForErrors(cont: Continuation) { 33 | setErrorHandler { 34 | cont.resumeWithException(it) 35 | } 36 | } -------------------------------------------------------------------------------- /assets/logo-bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | logo-bg 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/commands/filters/RootFilter.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.commands.filters; 2 | 3 | import com.jtelegram.api.commands.Command; 4 | import com.jtelegram.api.events.message.TextMessageEvent; 5 | 6 | /** 7 | * A {@link CommandFilter} that merely groups filters. 8 | */ 9 | public class RootFilter extends AbstractCommandFilter { 10 | 11 | private static CommandFilter[] combine(CommandFilter first, CommandFilter... remaining) { 12 | CommandFilter[] filters = new CommandFilter[remaining.length + 1]; 13 | filters[0] = first; 14 | System.arraycopy(remaining, 0, filters, 1, remaining.length); 15 | return filters; 16 | } 17 | 18 | /** 19 | * Creates a RootFilter with given children. 20 | * 21 | * @param filter The first filter 22 | * @param children The remaining children filters, which will be checked in order 23 | * if this filter tests to be {@code true} 24 | */ 25 | public RootFilter(CommandFilter filter, CommandFilter... children) { 26 | super(combine(filter, children)); 27 | } 28 | 29 | @Override 30 | protected boolean preTest(TextMessageEvent event, Command command) { 31 | return true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/chat/admin/SetChatPhoto.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.chat.admin; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.ex.TelegramException; 5 | import com.jtelegram.api.message.input.file.InputFile; 6 | import com.jtelegram.api.requests.message.framework.req.InputFileMessageUpdate; 7 | import lombok.Builder; 8 | import lombok.Getter; 9 | import lombok.ToString; 10 | 11 | import java.util.Collections; 12 | import java.util.List; 13 | import java.util.function.Consumer; 14 | 15 | @Getter 16 | @ToString 17 | public class SetChatPhoto extends InputFileMessageUpdate { 18 | private ChatId chatId; 19 | private InputFile photo; 20 | 21 | @Builder 22 | public SetChatPhoto(Consumer errorHandler, Runnable callback, ChatId chatId, InputFile photo) { 23 | super("setChatPhoto", errorHandler, callback); 24 | this.chatId = chatId; 25 | this.photo = photo; 26 | } 27 | 28 | @Override 29 | public List getInputFiles() { 30 | return Collections.singletonList(photo); 31 | } 32 | 33 | @Override 34 | protected boolean isValid() { 35 | return chatId != null && photo != null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/requests/message/framework/req/InputFileMessageRequest.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.requests.message.framework.req; 2 | 3 | import com.jtelegram.api.chat.id.ChatId; 4 | import com.jtelegram.api.TelegramBot; 5 | import com.jtelegram.api.ex.TelegramException; 6 | import com.jtelegram.api.message.input.file.InputFileRequest; 7 | import com.jtelegram.api.requests.message.framework.ReplyMarkup; 8 | import okhttp3.Request; 9 | 10 | import java.util.function.Consumer; 11 | 12 | public abstract class InputFileMessageRequest extends SendableMessageRequest implements InputFileRequest { 13 | protected InputFileMessageRequest(String endPoint, Class callbackType, Consumer callback, Consumer errorHandler, ChatId chatId, Integer replyToMessageId, Boolean disableNotification, ReplyMarkup replyMarkup) { 14 | super(endPoint, callbackType, callback, errorHandler, chatId, replyToMessageId, disableNotification, replyMarkup); 15 | } 16 | 17 | @Override 18 | public Request.Builder build(TelegramBot bot) { 19 | return getBuilder(bot); 20 | } 21 | 22 | @Override 23 | public Request.Builder superBuild(TelegramBot bot) { 24 | return super.build(bot); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /jtelegrambotapi-core/src/main/java/com/jtelegram/api/message/impl/AudioMessage.java: -------------------------------------------------------------------------------- 1 | package com.jtelegram.api.message.impl; 2 | 3 | import com.jtelegram.api.message.CaptionableMessage; 4 | import com.jtelegram.api.message.media.Audio; 5 | import com.jtelegram.api.requests.message.edit.EditMessageCaption; 6 | import com.jtelegram.api.requests.message.edit.EditMessageMedia; 7 | import lombok.Getter; 8 | import lombok.ToString; 9 | 10 | @Getter 11 | @ToString(callSuper = true) 12 | public class AudioMessage extends CaptionableMessage