From c1b7a0cb3fb73810c1d04cd90e29ebc68a8f8ce7 Mon Sep 17 00:00:00 2001 From: skiddgoddamn Date: Mon, 9 Nov 2026 17:22:05 +0300 Subject: [PATCH 1/4] BOT API v10.4 Widgets, ephemeral replies to callback queries, rich message quotes, TON wallet, chat share themes, gifts. See https://core.telegram.org/bots/api-changelog#november-9-2026 Co-Authored-By: Claude Opus 5.5 --- README.md | 6 +- gradle.properties | 2 +- .../StoryAreaPosition.kt => AreaPosition.kt} | 6 +- .../telegrambot/model/ChatFullInfo.java | 18 ++- .../telegrambot/model/ExternalReplyInfo.java | 11 +- .../pengrad/telegrambot/model/Message.java | 25 +++- .../telegrambot/model/MessageEntity.java | 3 +- .../telegrambot/model/PaidMessagesWaived.java | 18 +++ .../pengrad/telegrambot/model/TextQuote.java | 10 +- .../com/pengrad/telegrambot/model/Update.java | 18 ++- .../model/chatsharetheme/ChatShareTheme.kt | 13 +++ .../chatsharetheme/ChatShareThemeBackdrop.kt | 10 ++ .../chatsharetheme/ChatShareThemeBackdrops.kt | 18 +++ .../chatsharetheme/ChatShareThemeEmoji.kt | 26 +++++ .../ChatShareThemeUniqueGift.kt | 8 ++ .../chatsharetheme/ChatShareThemeUnknown.kt | 5 + .../model/chatsharetheme/EmojiType.kt | 13 +++ .../chatsharetheme/EmojiTypeCustomEmoji.kt | 6 + .../model/chatsharetheme/EmojiTypeEmoji.kt | 6 + .../model/chatsharetheme/EmojiTypeUnknown.kt | 5 + .../ephemeral/EphemeralMessageParameters.kt | 21 +++- .../InputSharedWidgetMessageContent.kt | 50 ++++++++ .../request/InputWidgetMessageContent.kt | 76 ++++++++++++ .../model/request/ReplyParameters.java | 7 ++ .../richtext/RichTextTonAddress.kt | 7 ++ .../richmessages/richtext/RichTextType.kt | 1 + .../telegrambot/model/story/StoryArea.kt | 4 +- .../pengrad/telegrambot/model/ton/TonNft.kt | 42 +++++++ .../telegrambot/model/ton/TonNftAttribute.kt | 8 ++ .../telegrambot/model/ton/TonWalletCard.kt | 31 +++++ .../model/ton/TonWalletCardSticker.kt | 9 ++ .../model/ton/TonWalletTransfer.kt | 10 ++ .../model/widget/SharedWidgetQuery.kt | 12 ++ .../telegrambot/model/widget/Widget.kt | 12 ++ .../telegrambot/model/widget/WidgetQuery.kt | 18 +++ .../model/widget/WidgetQueryType.kt | 14 +++ .../model/widget/WidgetQueryTypeData.kt | 8 ++ .../widget/WidgetQueryTypeSentTransaction.kt | 7 ++ .../model/widget/WidgetQueryTypeSignData.kt | 7 ++ .../model/widget/WidgetQueryTypeUnknown.kt | 5 + .../model/widget/WidgetQueryWallet.kt | 10 ++ .../request/DeleteBusinessAccountGift.kt | 18 +++ .../request/GetChatShareThemeBackdrops.kt | 7 ++ .../telegrambot/request/GetUniqueGift.kt | 12 ++ .../telegrambot/request/SendAnimation.kt | 18 +++ .../pengrad/telegrambot/request/SendAudio.kt | 18 +++ .../telegrambot/request/SendContact.kt | 7 ++ .../telegrambot/request/SendDocument.kt | 18 +++ .../telegrambot/request/SendLivePhoto.kt | 63 ++++++++++ .../telegrambot/request/SendLocation.kt | 7 ++ .../telegrambot/request/SendMessage.kt | 6 + .../pengrad/telegrambot/request/SendPhoto.kt | 18 +++ .../telegrambot/request/SendSticker.kt | 18 +++ .../pengrad/telegrambot/request/SendVenue.kt | 14 +++ .../pengrad/telegrambot/request/SendVideo.kt | 18 +++ .../telegrambot/request/SendVideoNote.kt | 18 +++ .../pengrad/telegrambot/request/SendVoice.kt | 18 +++ .../pengrad/telegrambot/request/VerifyChat.kt | 10 ++ .../pengrad/telegrambot/request/VerifyUser.kt | 10 ++ .../request/richmessages/SendRichMessage.kt | 6 + .../request/widget/AnswerWidgetQuery.kt | 21 ++++ .../request/widget/EditMessageWidgetData.kt | 50 ++++++++ .../request/widget/EditSharedWidgetData.kt | 23 ++++ .../request/widget/SendSharedWidget.kt | 53 +++++++++ .../telegrambot/request/widget/SendWidget.kt | 69 +++++++++++ .../GetChatShareThemeBackdropsResponse.kt | 5 + .../response/GetUniqueGiftResponse.kt | 5 + .../pengrad/telegrambot/utility/BotUtils.java | 9 ++ .../utility/gson/ChatShareThemeTypeAdapter.kt | 24 ++++ .../utility/gson/EmojiTypeAdapter.kt | 24 ++++ .../utility/gson/RichTextTypeAdapter.kt | 1 + .../utility/gson/WidgetQueryTypeAdapter.kt | 26 +++++ .../request/AnswerWidgetQueryExtension.kt | 10 ++ .../request/SendSharedWidgetExtension.kt | 23 ++++ .../extension/request/SendWidgetExtension.kt | 23 ++++ .../com/pengrad/telegrambot/BotApi104Test.kt | 109 ++++++++++++++++++ .../java/com/pengrad/telegrambot/ModelTest.kt | 1 + pom.xml | 2 +- 78 files changed, 1349 insertions(+), 19 deletions(-) rename library/src/main/java/com/pengrad/telegrambot/model/{story/area/StoryAreaPosition.kt => AreaPosition.kt} (82%) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareTheme.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrops.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUniqueGift.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUnknown.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiType.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeCustomEmoji.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeEmoji.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeUnknown.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTonAddress.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ton/TonNft.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ton/TonNftAttribute.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCard.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCardSticker.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletTransfer.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/SharedWidgetQuery.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/Widget.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQuery.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryType.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeData.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSentTransaction.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSignData.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeUnknown.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryWallet.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/DeleteBusinessAccountGift.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/GetChatShareThemeBackdrops.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/GetUniqueGift.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/widget/AnswerWidgetQuery.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/widget/EditMessageWidgetData.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/widget/EditSharedWidgetData.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/widget/SendSharedWidget.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/widget/SendWidget.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/response/GetChatShareThemeBackdropsResponse.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/response/GetUniqueGiftResponse.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/gson/ChatShareThemeTypeAdapter.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/gson/EmojiTypeAdapter.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/gson/WidgetQueryTypeAdapter.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/AnswerWidgetQueryExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendSharedWidgetExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendWidgetExtension.kt create mode 100644 library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt diff --git a/README.md b/README.md index 6a6be122a..18553ab81 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![codecov](https://codecov.io/gh/pengrad/java-telegram-bot-api/branch/master/graph/badge.svg)](https://codecov.io/gh/pengrad/java-telegram-bot-api) Java library for interacting with [Telegram Bot API](https://core.telegram.org/bots/api) -- Full support of all Bot API 10.3 methods +- Full support of all Bot API 10.4 methods - Telegram [Passport](https://core.telegram.org/passport) and Decryption API - Bot [Payments](https://core.telegram.org/bots/payments) - [Gaming Platform](https://telegram.org/blog/games) @@ -13,14 +13,14 @@ Java library for interacting with [Telegram Bot API](https://core.telegram.org/b Gradle: ```groovy -implementation 'com.github.pengrad:java-telegram-bot-api:10.3.0' +implementation 'com.github.pengrad:java-telegram-bot-api:10.4.0' ``` Maven: ```xml com.github.pengrad java-telegram-bot-api - 10.3.0 + 10.4.0 ``` [JAR with all dependencies on release page](https://github.com/pengrad/java-telegram-bot-api/releases) diff --git a/gradle.properties b/gradle.properties index fa055e807..513f61422 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.github.pengrad -VERSION_NAME=10.3.0 +VERSION_NAME=10.4.0 POM_DESCRIPTION=Java API for Telegram Bot API POM_URL=https://github.com/pengrad/java-telegram-bot-api/ diff --git a/library/src/main/java/com/pengrad/telegrambot/model/story/area/StoryAreaPosition.kt b/library/src/main/java/com/pengrad/telegrambot/model/AreaPosition.kt similarity index 82% rename from library/src/main/java/com/pengrad/telegrambot/model/story/area/StoryAreaPosition.kt rename to library/src/main/java/com/pengrad/telegrambot/model/AreaPosition.kt index 25ac5a964..12a656520 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/story/area/StoryAreaPosition.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/AreaPosition.kt @@ -1,10 +1,10 @@ -package com.pengrad.telegrambot.model.story.area +package com.pengrad.telegrambot.model -data class StoryAreaPosition( +data class AreaPosition( @get:JvmName("xPercentage") val xPercentage: Double, @get:JvmName("yPercentage") val yPercentage: Double, @get:JvmName("widthPercentage") val widthPercentage: Double, @get:JvmName("heightPercentage") val heightPercentage: Double, @get:JvmName("rotationAngle") val rotationAngle: Double, @get:JvmName("cornerRadiusPercentage") val cornerRadiusPercentage: Double -) \ No newline at end of file +) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java index b1dca42ad..9a31917bf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model; +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareTheme; +import com.pengrad.telegrambot.model.ton.TonWalletCard; import com.google.gson.annotations.SerializedName; import com.pengrad.telegrambot.model.business.BusinessIntro; import com.pengrad.telegrambot.model.business.BusinessLocation; @@ -81,6 +83,8 @@ public enum Type { private Audio first_profile_audio; private User guard_bot; private Community community; + private TonWalletCard ton_wallet_card; + private ChatShareTheme share_theme; public Long id() { return id; @@ -293,6 +297,14 @@ public Community community() { return community; } + public TonWalletCard tonWalletCard() { + return ton_wallet_card; + } + + public ChatShareTheme shareTheme() { + return share_theme; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -350,7 +362,9 @@ public boolean equals(Object o) { Objects.equals(unique_gift_colors, chat.unique_gift_colors) && Objects.equals(first_profile_audio, chat.first_profile_audio) && Objects.equals(guard_bot, chat.guard_bot) && - Objects.equals(community, chat.community); + Objects.equals(community, chat.community) && + Objects.equals(ton_wallet_card, chat.ton_wallet_card) && + Objects.equals(share_theme, chat.share_theme); } @Override @@ -414,6 +428,8 @@ public String toString() { ", first_profile_audio=" + first_profile_audio + ", guard_bot=" + guard_bot + ", community=" + community + + ", ton_wallet_card=" + ton_wallet_card + + ", share_theme=" + share_theme + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ExternalReplyInfo.java b/library/src/main/java/com/pengrad/telegrambot/model/ExternalReplyInfo.java index 5550e48dd..690cb5d37 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ExternalReplyInfo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ExternalReplyInfo.java @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model; +import com.pengrad.telegrambot.model.widget.Widget; import com.pengrad.telegrambot.model.checklist.Checklist; import com.pengrad.telegrambot.model.giveaway.Giveaway; import com.pengrad.telegrambot.model.giveaway.GiveawayWinners; @@ -23,6 +24,7 @@ public class ExternalReplyInfo implements Serializable { private PaidMediaInfo paid_media; private Document document; private LivePhoto live_photo; + private Widget widget; private PhotoSize[] photo; private Sticker sticker; private Story story; @@ -76,6 +78,10 @@ public LivePhoto livePhoto() { return live_photo; } + public Widget widget() { + return widget; + } + public PhotoSize[] photo() { return photo; } @@ -149,12 +155,12 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ExternalReplyInfo that = (ExternalReplyInfo) o; - return Objects.equals(origin, that.origin) && Objects.equals(chat, that.chat) && Objects.equals(message_id, that.message_id) && Objects.equals(link_preview_options, that.link_preview_options) && Objects.equals(animation, that.animation) && Objects.equals(audio, that.audio) && Objects.equals(paid_media, that.paid_media) && Objects.equals(document, that.document) && Objects.equals(live_photo, that.live_photo) && Arrays.equals(photo, that.photo) && Objects.equals(sticker, that.sticker) && Objects.equals(story, that.story) && Objects.equals(video, that.video) && Objects.equals(video_note, that.video_note) && Objects.equals(voice, that.voice) && Objects.equals(has_media_spoiler, that.has_media_spoiler) && Objects.equals(checklist, that.checklist) && Objects.equals(contact, that.contact) && Objects.equals(dice, that.dice) && Objects.equals(game, that.game) && Objects.equals(giveaway, that.giveaway) && Objects.equals(giveaway_winners, that.giveaway_winners) && Objects.equals(invoice, that.invoice) && Objects.equals(location, that.location) && Objects.equals(poll, that.poll) && Objects.equals(venue, that.venue); + return Objects.equals(origin, that.origin) && Objects.equals(chat, that.chat) && Objects.equals(message_id, that.message_id) && Objects.equals(link_preview_options, that.link_preview_options) && Objects.equals(animation, that.animation) && Objects.equals(audio, that.audio) && Objects.equals(paid_media, that.paid_media) && Objects.equals(document, that.document) && Objects.equals(live_photo, that.live_photo) && Objects.equals(widget, that.widget) && Arrays.equals(photo, that.photo) && Objects.equals(sticker, that.sticker) && Objects.equals(story, that.story) && Objects.equals(video, that.video) && Objects.equals(video_note, that.video_note) && Objects.equals(voice, that.voice) && Objects.equals(has_media_spoiler, that.has_media_spoiler) && Objects.equals(checklist, that.checklist) && Objects.equals(contact, that.contact) && Objects.equals(dice, that.dice) && Objects.equals(game, that.game) && Objects.equals(giveaway, that.giveaway) && Objects.equals(giveaway_winners, that.giveaway_winners) && Objects.equals(invoice, that.invoice) && Objects.equals(location, that.location) && Objects.equals(poll, that.poll) && Objects.equals(venue, that.venue); } @Override public int hashCode() { - int result = Objects.hash(origin, chat, message_id, link_preview_options, animation, audio, paid_media, document, live_photo, sticker, story, video, video_note, voice, has_media_spoiler, checklist, contact, dice, game, giveaway, giveaway_winners, invoice, location, poll, venue); + int result = Objects.hash(origin, chat, message_id, link_preview_options, animation, audio, paid_media, document, live_photo, widget, sticker, story, video, video_note, voice, has_media_spoiler, checklist, contact, dice, game, giveaway, giveaway_winners, invoice, location, poll, venue); result = 31 * result + Arrays.hashCode(photo); return result; } @@ -171,6 +177,7 @@ public String toString() { ", paid_media=" + paid_media + ", document=" + document + ", live_photo=" + live_photo + + ", widget=" + widget + ", photo=" + Arrays.toString(photo) + ", sticker=" + sticker + ", story=" + story + diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Message.java b/library/src/main/java/com/pengrad/telegrambot/model/Message.java index 299917ff7..3285d3e56 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model; +import com.pengrad.telegrambot.model.ton.TonWalletTransfer; +import com.pengrad.telegrambot.model.widget.Widget; import com.pengrad.telegrambot.model.chatbackground.ChatBackground; import com.pengrad.telegrambot.model.chatboost.ChatBoostAdded; import com.pengrad.telegrambot.model.chatowner.ChatOwnerChanged; @@ -151,6 +153,9 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private CommunityChatAdded community_chat_added; private CommunityChatJoined community_chat_joined; private CommunityChatRemoved community_chat_removed; + private Widget widget; + private TonWalletTransfer ton_wallet_transfer; + private PaidMessagesWaived paid_messages_waived; public Long messageThreadId() { return message_thread_id; @@ -609,6 +614,18 @@ public CommunityChatRemoved communityChatRemoved() { return community_chat_removed; } + public Widget widget() { + return widget; + } + + public TonWalletTransfer tonWalletTransfer() { + return ton_wallet_transfer; + } + + public PaidMessagesWaived paidMessagesWaived() { + return paid_messages_waived; + } + public User guestBotCallerUser() { return guest_bot_caller_user; } @@ -766,7 +783,10 @@ public boolean equals(Object o) { Objects.equals(guest_query_id, message.guest_query_id) && Objects.equals(community_chat_added, message.community_chat_added) && Objects.equals(community_chat_joined, message.community_chat_joined) && - Objects.equals(community_chat_removed, message.community_chat_removed); + Objects.equals(community_chat_removed, message.community_chat_removed) && + Objects.equals(widget, message.widget) && + Objects.equals(ton_wallet_transfer, message.ton_wallet_transfer) && + Objects.equals(paid_messages_waived, message.paid_messages_waived); } @Override @@ -897,6 +917,9 @@ public String toString() { ", community_chat_added=" + community_chat_added + ", community_chat_joined=" + community_chat_joined + ", community_chat_removed=" + community_chat_removed + + ", widget=" + widget + + ", ton_wallet_transfer=" + ton_wallet_transfer + + ", paid_messages_waived=" + paid_messages_waived + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MessageEntity.java b/library/src/main/java/com/pengrad/telegrambot/model/MessageEntity.java index 9f2e8bbf6..a44338c3e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/MessageEntity.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/MessageEntity.java @@ -12,7 +12,8 @@ public class MessageEntity implements Serializable { public enum Type { mention, hashtag, cashtag, bot_command, url, email, phone_number, bold, italic, code, pre, text_link, - text_mention, underline, strikethrough, spoiler, custom_emoji, blockquote, expandable_blockquote, date_time + text_mention, underline, strikethrough, spoiler, custom_emoji, blockquote, expandable_blockquote, date_time, + ton_address, bank_card_number } private Type type; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java b/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java new file mode 100644 index 000000000..fee99a6a9 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java @@ -0,0 +1,18 @@ +package com.pengrad.telegrambot.model; + +import java.io.Serializable; + +public class PaidMessagesWaived implements Serializable { + private final static long serialVersionUID = 0L; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + return o != null && getClass() == o.getClass(); + } + + @Override + public int hashCode() { + return 1; + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/TextQuote.java b/library/src/main/java/com/pengrad/telegrambot/model/TextQuote.java index 15c410ecf..a7054bd7c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/TextQuote.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/TextQuote.java @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model; +import com.pengrad.telegrambot.model.richmessages.richtext.RichText; import java.io.Serializable; import java.util.Arrays; import java.util.Objects; @@ -10,6 +11,7 @@ public class TextQuote implements Serializable { private String text; private MessageEntity[] entities; + private RichText[] rich_texts; private Integer position; private Boolean is_manual; @@ -21,6 +23,10 @@ public MessageEntity[] entities() { return entities; } + public RichText[] richTexts() { + return rich_texts; + } + public Integer position() { return position; } @@ -35,13 +41,14 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; TextQuote textQuote = (TextQuote) o; - return Objects.equals(text, textQuote.text) && Arrays.equals(entities, textQuote.entities) && Objects.equals(position, textQuote.position) && Objects.equals(is_manual, textQuote.is_manual); + return Objects.equals(text, textQuote.text) && Arrays.equals(entities, textQuote.entities) && Arrays.equals(rich_texts, textQuote.rich_texts) && Objects.equals(position, textQuote.position) && Objects.equals(is_manual, textQuote.is_manual); } @Override public int hashCode() { int result = Objects.hash(text, position, is_manual); result = 31 * result + Arrays.hashCode(entities); + result = 31 * result + Arrays.hashCode(rich_texts); return result; } @@ -50,6 +57,7 @@ public String toString() { return "TextQuote{" + "text='" + text + '\'' + ", entities=" + Arrays.toString(entities) + + ", rich_texts=" + Arrays.toString(rich_texts) + ", position=" + position + ", is_manual=" + is_manual + '}'; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Update.java b/library/src/main/java/com/pengrad/telegrambot/model/Update.java index 669466e9e..3df7a2b30 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Update.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Update.java @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model; +import com.pengrad.telegrambot.model.widget.SharedWidgetQuery; +import com.pengrad.telegrambot.model.widget.WidgetQuery; import com.pengrad.telegrambot.model.business.BusinessConnection; import com.pengrad.telegrambot.model.business.BusinessMessageDeleted; import com.pengrad.telegrambot.model.chatboost.ChatBoostRemoved; @@ -44,6 +46,8 @@ public class Update implements Serializable { private Message guest_message; private BotSubscriptionUpdated subscription; private MessageGenerationStopped stopped_message_generation; + private WidgetQuery widget_query; + private SharedWidgetQuery shared_widget_query; public Integer updateId() { return update_id; @@ -157,6 +161,14 @@ public MessageGenerationStopped stoppedMessageGeneration() { return stopped_message_generation; } + public WidgetQuery widgetQuery() { + return widget_query; + } + + public SharedWidgetQuery sharedWidgetQuery() { + return shared_widget_query; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -189,7 +201,9 @@ public boolean equals(Object o) { Objects.equals(managed_bot, update.managed_bot) && Objects.equals(guest_message, update.guest_message) && Objects.equals(subscription, update.subscription) && - Objects.equals(stopped_message_generation, update.stopped_message_generation); + Objects.equals(stopped_message_generation, update.stopped_message_generation) && + Objects.equals(widget_query, update.widget_query) && + Objects.equals(shared_widget_query, update.shared_widget_query); } @Override @@ -228,6 +242,8 @@ public String toString() { ", guest_message=" + guest_message + ", subscription=" + subscription + ", stopped_message_generation=" + stopped_message_generation + + ", widget_query=" + widget_query + + ", shared_widget_query=" + shared_widget_query + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareTheme.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareTheme.kt new file mode 100644 index 000000000..aac2ef779 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareTheme.kt @@ -0,0 +1,13 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +import java.io.Serializable + +interface ChatShareTheme : Serializable { + val type: String + + companion object { + const val EMOJI = "emoji" + const val UNIQUE_GIFT = "unique_gift" + const val UNKNOWN = "unknown" + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt new file mode 100644 index 000000000..5960889dd --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +import com.pengrad.telegrambot.model.gift.unique.UniqueGiftBackdropColors +import java.io.Serializable + +data class ChatShareThemeBackdrop( + @get:JvmName("id") val id: Int, + @get:JvmName("name") val name: String, + @get:JvmName("colors") val colors: UniqueGiftBackdropColors, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrops.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrops.kt new file mode 100644 index 000000000..352da3ecb --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrops.kt @@ -0,0 +1,18 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +import java.io.Serializable + +data class ChatShareThemeBackdrops( + @get:JvmName("backdrops") val backdrops: Array, +) : Serializable { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ChatShareThemeBackdrops) return false + return backdrops contentEquals other.backdrops + } + + override fun hashCode(): Int = backdrops.contentHashCode() + + override fun toString(): String = "ChatShareThemeBackdrops(backdrops=${backdrops.contentToString()})" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt new file mode 100644 index 000000000..5217bd360 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt @@ -0,0 +1,26 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +data class ChatShareThemeEmoji @JvmOverloads constructor( + @get:JvmName("emojis") val emojis: Array, + @get:JvmName("backgroundBackdropId") val backgroundBackdropId: Int? = null, + override val type: String = ChatShareTheme.EMOJI +) : ChatShareTheme { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is ChatShareThemeEmoji) return false + return emojis contentEquals other.emojis && + backgroundBackdropId == other.backgroundBackdropId && + type == other.type + } + + override fun hashCode(): Int { + var result = emojis.contentHashCode() + result = 31 * result + (backgroundBackdropId ?: 0) + result = 31 * result + type.hashCode() + return result + } + + override fun toString(): String = + "ChatShareThemeEmoji(emojis=${emojis.contentToString()}, backgroundBackdropId=$backgroundBackdropId, type=$type)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUniqueGift.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUniqueGift.kt new file mode 100644 index 000000000..a442a246c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUniqueGift.kt @@ -0,0 +1,8 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +import com.pengrad.telegrambot.model.gift.unique.UniqueGift + +data class ChatShareThemeUniqueGift @JvmOverloads constructor( + @get:JvmName("gift") val gift: UniqueGift, + override val type: String = ChatShareTheme.UNIQUE_GIFT +) : ChatShareTheme diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUnknown.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUnknown.kt new file mode 100644 index 000000000..db91b6850 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeUnknown.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +data class ChatShareThemeUnknown( + override val type: String = ChatShareTheme.UNKNOWN +) : ChatShareTheme diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiType.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiType.kt new file mode 100644 index 000000000..c0a39a3a2 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiType.kt @@ -0,0 +1,13 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +import java.io.Serializable + +interface EmojiType : Serializable { + val type: String + + companion object { + const val EMOJI = "emoji" + const val CUSTOM_EMOJI = "custom_emoji" + const val UNKNOWN = "unknown" + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeCustomEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeCustomEmoji.kt new file mode 100644 index 000000000..c4f36a154 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeCustomEmoji.kt @@ -0,0 +1,6 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +data class EmojiTypeCustomEmoji @JvmOverloads constructor( + @get:JvmName("customEmojiId") val customEmojiId: String, + override val type: String = EmojiType.CUSTOM_EMOJI +) : EmojiType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeEmoji.kt new file mode 100644 index 000000000..57dbccabc --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeEmoji.kt @@ -0,0 +1,6 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +data class EmojiTypeEmoji @JvmOverloads constructor( + @get:JvmName("emoji") val emoji: String, + override val type: String = EmojiType.EMOJI +) : EmojiType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeUnknown.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeUnknown.kt new file mode 100644 index 000000000..8c13ab1a9 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/EmojiTypeUnknown.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model.chatsharetheme + +data class EmojiTypeUnknown( + override val type: String = EmojiType.UNKNOWN +) : EmojiType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt b/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt index 8ee59a2aa..97ace8175 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt @@ -1,7 +1,7 @@ package com.pengrad.telegrambot.model.ephemeral class EphemeralMessageParameters private constructor( - @get:JvmName("receiverUserId") val receiverUserId: Long, + @get:JvmName("receiverUserId") var receiverUserId: Long?, @get:JvmName("callbackQueryId") var callbackQueryId: String?, @get:JvmName("replaceCallbackQueryMessage") var replaceCallbackQueryMessage: Boolean?, ) { @@ -12,6 +12,23 @@ class EphemeralMessageParameters private constructor( replaceCallbackQueryMessage = null ) + companion object { + /** + * Ephemeral reply to a callback query, shown only to the user who pressed the button. + * The bot must still answer the callback query using answerCallbackQuery. + */ + @JvmStatic + fun replyToCallbackQuery(callbackQueryId: String) = EphemeralMessageParameters( + receiverUserId = null, + callbackQueryId = callbackQueryId, + replaceCallbackQueryMessage = null + ) + } + + fun receiverUserId(receiverUserId: Long) = apply { + this.receiverUserId = receiverUserId + } + fun callbackQueryId(callbackQueryId: String) = apply { this.callbackQueryId = callbackQueryId } @@ -30,7 +47,7 @@ class EphemeralMessageParameters private constructor( } override fun hashCode(): Int { - var result = receiverUserId.hashCode() + var result = receiverUserId?.hashCode() ?: 0 result = 31 * result + (callbackQueryId?.hashCode() ?: 0) result = 31 * result + (replaceCallbackQueryMessage?.hashCode() ?: 0) return result diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt new file mode 100644 index 000000000..875f9df2e --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt @@ -0,0 +1,50 @@ +package com.pengrad.telegrambot.model.request + +import com.pengrad.telegrambot.model.MessageEntity + +class InputSharedWidgetMessageContent @JvmOverloads constructor( + @get:JvmName("widgetId") val widgetId: String, + @get:JvmName("chatData") var chatData: String? = null, + @get:JvmName("caption") var caption: String? = null, + @get:JvmName("parseMode") var parseMode: ParseMode? = null, + @get:JvmName("captionEntities") var captionEntities: Array? = null, + @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean? = null, +) : InputMessageContent() { + + fun chatData(chatData: String) = apply { this.chatData = chatData } + + fun caption(caption: String) = apply { this.caption = caption } + + fun parseMode(parseMode: ParseMode) = apply { this.parseMode = parseMode } + + fun captionEntities(vararg captionEntities: MessageEntity) = apply { this.captionEntities = arrayOf(*captionEntities) } + + fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = apply { this.showCaptionAboveMedia = showCaptionAboveMedia } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputSharedWidgetMessageContent + return widgetId == other.widgetId && + chatData == other.chatData && + caption == other.caption && + parseMode == other.parseMode && + captionEntities contentEquals other.captionEntities && + showCaptionAboveMedia == other.showCaptionAboveMedia + } + + override fun hashCode(): Int { + var result = widgetId.hashCode() + result = 31 * result + (chatData?.hashCode() ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + result = 31 * result + (parseMode?.hashCode() ?: 0) + result = 31 * result + (captionEntities?.contentHashCode() ?: 0) + result = 31 * result + (showCaptionAboveMedia?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputSharedWidgetMessageContent(widgetId=$widgetId, chatData=$chatData, caption=$caption, " + + "parseMode=$parseMode, captionEntities=${captionEntities?.contentToString()}, " + + "showCaptionAboveMedia=$showCaptionAboveMedia)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt new file mode 100644 index 000000000..650532665 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt @@ -0,0 +1,76 @@ +package com.pengrad.telegrambot.model.request + +import com.pengrad.telegrambot.model.MessageEntity + +class InputWidgetMessageContent @JvmOverloads constructor( + @get:JvmName("html") val html: String, + @get:JvmName("width") var width: Int? = null, + @get:JvmName("height") var height: Int? = null, + @get:JvmName("publicData") var publicData: String? = null, + @get:JvmName("chatData") var chatData: String? = null, + @get:JvmName("caption") var caption: String? = null, + @get:JvmName("parseMode") var parseMode: ParseMode? = null, + @get:JvmName("captionEntities") var captionEntities: Array? = null, + @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean? = null, + @get:JvmName("allowQueries") var allowQueries: Boolean? = null, + @get:JvmName("isShared") var isShared: Boolean? = null, +) : InputMessageContent() { + + fun width(width: Int) = apply { this.width = width } + + fun height(height: Int) = apply { this.height = height } + + fun publicData(publicData: String) = apply { this.publicData = publicData } + + fun chatData(chatData: String) = apply { this.chatData = chatData } + + fun caption(caption: String) = apply { this.caption = caption } + + fun parseMode(parseMode: ParseMode) = apply { this.parseMode = parseMode } + + fun captionEntities(vararg captionEntities: MessageEntity) = apply { this.captionEntities = arrayOf(*captionEntities) } + + fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = apply { this.showCaptionAboveMedia = showCaptionAboveMedia } + + fun allowQueries(allowQueries: Boolean) = apply { this.allowQueries = allowQueries } + + fun isShared(isShared: Boolean) = apply { this.isShared = isShared } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputWidgetMessageContent + return html == other.html && + width == other.width && + height == other.height && + publicData == other.publicData && + chatData == other.chatData && + caption == other.caption && + parseMode == other.parseMode && + captionEntities contentEquals other.captionEntities && + showCaptionAboveMedia == other.showCaptionAboveMedia && + allowQueries == other.allowQueries && + isShared == other.isShared + } + + override fun hashCode(): Int { + var result = html.hashCode() + result = 31 * result + (width ?: 0) + result = 31 * result + (height ?: 0) + result = 31 * result + (publicData?.hashCode() ?: 0) + result = 31 * result + (chatData?.hashCode() ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + result = 31 * result + (parseMode?.hashCode() ?: 0) + result = 31 * result + (captionEntities?.contentHashCode() ?: 0) + result = 31 * result + (showCaptionAboveMedia?.hashCode() ?: 0) + result = 31 * result + (allowQueries?.hashCode() ?: 0) + result = 31 * result + (isShared?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputWidgetMessageContent(html=$html, width=$width, height=$height, publicData=$publicData, " + + "chatData=$chatData, caption=$caption, parseMode=$parseMode, " + + "captionEntities=${captionEntities?.contentToString()}, showCaptionAboveMedia=$showCaptionAboveMedia, " + + "allowQueries=$allowQueries, isShared=$isShared)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java index 4d0dc8739..716de7bfc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyParameters.java @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request; +import com.pengrad.telegrambot.model.richmessages.richtext.RichText; import com.pengrad.telegrambot.model.MessageEntity; import java.io.Serializable; @@ -15,6 +16,7 @@ public class ReplyParameters implements Serializable { private String quote; private String quote_parse_mode; private MessageEntity[] quote_entities; + private RichText[] quote_rich_texts; private Integer quote_position; private Integer checklist_task_id; private String poll_option_id; @@ -60,6 +62,11 @@ public ReplyParameters quoteEntities(MessageEntity[] quoteEntities) { return this; } + public ReplyParameters quoteRichTexts(RichText... quoteRichTexts) { + this.quote_rich_texts = quoteRichTexts; + return this; + } + public ReplyParameters quotePosition(Integer quotePosition) { this.quote_position = quotePosition; return this; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTonAddress.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTonAddress.kt new file mode 100644 index 000000000..fdcbfafa6 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTonAddress.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.model.richmessages.richtext + +data class RichTextTonAddress @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("address") val address: String, + override val type: String = RichTextType.TON_ADDRESS +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt index 10084a90a..3d738e418 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextType.kt @@ -18,6 +18,7 @@ object RichTextType { const val EMAIL_ADDRESS = "email_address" const val PHONE_NUMBER = "phone_number" const val BANK_CARD_NUMBER = "bank_card_number" + const val TON_ADDRESS = "ton_address" const val MENTION = "mention" const val HASHTAG = "hashtag" const val CASHTAG = "cashtag" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/story/StoryArea.kt b/library/src/main/java/com/pengrad/telegrambot/model/story/StoryArea.kt index 04f0228aa..f170a2944 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/story/StoryArea.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/story/StoryArea.kt @@ -1,10 +1,10 @@ package com.pengrad.telegrambot.model.story -import com.pengrad.telegrambot.model.story.area.StoryAreaPosition +import com.pengrad.telegrambot.model.AreaPosition import com.pengrad.telegrambot.model.story.area.type.StoryAreaType class StoryArea( - @get:JvmName("position") val position: StoryAreaPosition, + @get:JvmName("position") val position: AreaPosition, @get:JvmName("type") val type: StoryAreaType ) { override fun toString(): String { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNft.kt b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNft.kt new file mode 100644 index 000000000..b4621f6d0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNft.kt @@ -0,0 +1,42 @@ +package com.pengrad.telegrambot.model.ton + +import com.pengrad.telegrambot.model.gift.unique.UniqueGift +import java.io.Serializable + +data class TonNft( + @get:JvmName("address") val address: String, + @get:JvmName("collectionAddress") val collectionAddress: String? = null, + @get:JvmName("index") val index: String, + @get:JvmName("name") val name: String, + @get:JvmName("description") val description: String, + @get:JvmName("attributes") val attributes: Array? = null, + @get:JvmName("gift") val gift: UniqueGift? = null, +) : Serializable { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is TonNft) return false + return address == other.address && + collectionAddress == other.collectionAddress && + index == other.index && + name == other.name && + description == other.description && + attributes contentEquals other.attributes && + gift == other.gift + } + + override fun hashCode(): Int { + var result = address.hashCode() + result = 31 * result + (collectionAddress?.hashCode() ?: 0) + result = 31 * result + index.hashCode() + result = 31 * result + name.hashCode() + result = 31 * result + description.hashCode() + result = 31 * result + (attributes?.contentHashCode() ?: 0) + result = 31 * result + (gift?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "TonNft(address=$address, collectionAddress=$collectionAddress, index=$index, name=$name, " + + "description=$description, attributes=${attributes?.contentToString()}, gift=$gift)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNftAttribute.kt b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNftAttribute.kt new file mode 100644 index 000000000..5cb1127a2 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonNftAttribute.kt @@ -0,0 +1,8 @@ +package com.pengrad.telegrambot.model.ton + +import java.io.Serializable + +data class TonNftAttribute( + @get:JvmName("traitType") val traitType: String, + @get:JvmName("value") val value: String, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCard.kt b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCard.kt new file mode 100644 index 000000000..ccc045ccd --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCard.kt @@ -0,0 +1,31 @@ +package com.pengrad.telegrambot.model.ton + +import java.io.Serializable + +data class TonWalletCard( + @get:JvmName("address") val address: String, + @get:JvmName("amount") val amount: String, + @get:JvmName("stickers") val stickers: Array, + @get:JvmName("backgroundNftAddress") val backgroundNftAddress: String? = null, +) : Serializable { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is TonWalletCard) return false + return address == other.address && + amount == other.amount && + stickers contentEquals other.stickers && + backgroundNftAddress == other.backgroundNftAddress + } + + override fun hashCode(): Int { + var result = address.hashCode() + result = 31 * result + amount.hashCode() + result = 31 * result + stickers.contentHashCode() + result = 31 * result + (backgroundNftAddress?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "TonWalletCard(address=$address, amount=$amount, stickers=${stickers.contentToString()}, backgroundNftAddress=$backgroundNftAddress)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCardSticker.kt b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCardSticker.kt new file mode 100644 index 000000000..81c191fc7 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletCardSticker.kt @@ -0,0 +1,9 @@ +package com.pengrad.telegrambot.model.ton + +import com.pengrad.telegrambot.model.AreaPosition +import java.io.Serializable + +data class TonWalletCardSticker( + @get:JvmName("position") val position: AreaPosition, + @get:JvmName("nft") val nft: TonNft, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletTransfer.kt b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletTransfer.kt new file mode 100644 index 000000000..5420171d7 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ton/TonWalletTransfer.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.ton + +import java.io.Serializable + +data class TonWalletTransfer( + @get:JvmName("transactionId") val transactionId: String, + @get:JvmName("peerAddress") val peerAddress: String, + @get:JvmName("amount") val amount: String, + @get:JvmName("comment") val comment: String? = null, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/SharedWidgetQuery.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/SharedWidgetQuery.kt new file mode 100644 index 000000000..295406b91 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/SharedWidgetQuery.kt @@ -0,0 +1,12 @@ +package com.pengrad.telegrambot.model.widget + +import com.pengrad.telegrambot.model.User +import java.io.Serializable + +data class SharedWidgetQuery( + @get:JvmName("id") val id: String, + @get:JvmName("from") val from: User, + @get:JvmName("type") val type: WidgetQueryType, + @get:JvmName("data") val data: String, + @get:JvmName("widgetId") val widgetId: String, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/Widget.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/Widget.kt new file mode 100644 index 000000000..fb10015cc --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/Widget.kt @@ -0,0 +1,12 @@ +package com.pengrad.telegrambot.model.widget + +import java.io.Serializable + +data class Widget( + @get:JvmName("id") val id: String? = null, + @get:JvmName("width") val width: Int? = null, + @get:JvmName("height") val height: Int? = null, + @get:JvmName("html") val html: String, + @get:JvmName("publicData") val publicData: String? = null, + @get:JvmName("chatData") val chatData: String? = null, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQuery.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQuery.kt new file mode 100644 index 000000000..87a6dcb18 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQuery.kt @@ -0,0 +1,18 @@ +package com.pengrad.telegrambot.model.widget + +import com.pengrad.telegrambot.model.Chat +import com.pengrad.telegrambot.model.User +import java.io.Serializable + +data class WidgetQuery( + @get:JvmName("id") val id: String, + @get:JvmName("from") val from: User, + @get:JvmName("chat") val chat: Chat? = null, + @get:JvmName("messageId") val messageId: Int? = null, + @get:JvmName("inlineMessageId") val inlineMessageId: String? = null, + @get:JvmName("chatInstance") val chatInstance: String, + @get:JvmName("chatType") val chatType: String? = null, + @get:JvmName("type") val type: WidgetQueryType, + @get:JvmName("data") val data: String, + @get:JvmName("widgetId") val widgetId: String? = null, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryType.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryType.kt new file mode 100644 index 000000000..5504db4a8 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryType.kt @@ -0,0 +1,14 @@ +package com.pengrad.telegrambot.model.widget + +import java.io.Serializable + +interface WidgetQueryType : Serializable { + val type: String + + companion object { + const val DATA = "data" + const val SIGN_DATA = "sign_data" + const val SENT_TRANSACTION = "sent_transaction" + const val UNKNOWN = "unknown" + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeData.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeData.kt new file mode 100644 index 000000000..b99e657f2 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeData.kt @@ -0,0 +1,8 @@ +package com.pengrad.telegrambot.model.widget + +import com.pengrad.telegrambot.model.ton.TonWalletCard + +data class WidgetQueryTypeData @JvmOverloads constructor( + @get:JvmName("walletCard") val walletCard: TonWalletCard? = null, + override val type: String = WidgetQueryType.DATA +) : WidgetQueryType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSentTransaction.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSentTransaction.kt new file mode 100644 index 000000000..0fc21d49c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSentTransaction.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.model.widget + +data class WidgetQueryTypeSentTransaction @JvmOverloads constructor( + @get:JvmName("wallet") val wallet: WidgetQueryWallet, + @get:JvmName("msgHash") val msgHash: String, + override val type: String = WidgetQueryType.SENT_TRANSACTION +) : WidgetQueryType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSignData.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSignData.kt new file mode 100644 index 000000000..7b2366ae0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeSignData.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.model.widget + +data class WidgetQueryTypeSignData @JvmOverloads constructor( + @get:JvmName("wallet") val wallet: WidgetQueryWallet, + @get:JvmName("signData") val signData: String, + override val type: String = WidgetQueryType.SIGN_DATA +) : WidgetQueryType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeUnknown.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeUnknown.kt new file mode 100644 index 000000000..48a7c690e --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryTypeUnknown.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model.widget + +data class WidgetQueryTypeUnknown( + override val type: String = WidgetQueryType.UNKNOWN +) : WidgetQueryType diff --git a/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryWallet.kt b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryWallet.kt new file mode 100644 index 000000000..a98083119 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/widget/WidgetQueryWallet.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.widget + +import java.io.Serializable + +data class WidgetQueryWallet( + @get:JvmName("address") val address: String, + @get:JvmName("amount") val amount: String, + @get:JvmName("publicKey") val publicKey: String? = null, + @get:JvmName("stateInit") val stateInit: String? = null, +) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/request/DeleteBusinessAccountGift.kt b/library/src/main/java/com/pengrad/telegrambot/request/DeleteBusinessAccountGift.kt new file mode 100644 index 000000000..58b654e1d --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/DeleteBusinessAccountGift.kt @@ -0,0 +1,18 @@ +package com.pengrad.telegrambot.request + +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +/** + * Deletes a regular gift owned by a managed business account without receiving Telegram Stars for it. + * Requires the can_convert_gifts_to_stars business bot right. + */ +class DeleteBusinessAccountGift( + businessConnectionId: String, + ownedGiftId: String +) : KBaseRequest(BaseResponse::class) { + + val businessConnectionId: String by requestParameter(businessConnectionId) + val ownedGiftId: String by requestParameter(ownedGiftId) + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/GetChatShareThemeBackdrops.kt b/library/src/main/java/com/pengrad/telegrambot/request/GetChatShareThemeBackdrops.kt new file mode 100644 index 000000000..4a0ca5a44 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/GetChatShareThemeBackdrops.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.request + +import com.pengrad.telegrambot.response.GetChatShareThemeBackdropsResponse + +class GetChatShareThemeBackdrops : KBaseRequest( + GetChatShareThemeBackdropsResponse::class +) diff --git a/library/src/main/java/com/pengrad/telegrambot/request/GetUniqueGift.kt b/library/src/main/java/com/pengrad/telegrambot/request/GetUniqueGift.kt new file mode 100644 index 000000000..878ce0fac --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/GetUniqueGift.kt @@ -0,0 +1,12 @@ +package com.pengrad.telegrambot.request + +import com.pengrad.telegrambot.response.GetUniqueGiftResponse +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +class GetUniqueGift( + name: String +) : KBaseRequest(GetUniqueGiftResponse::class) { + + val name: String by requestParameter(name) + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt index b2015867f..414241922 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt @@ -34,6 +34,12 @@ class SendAnimation private constructor( animationUrl = animationUrl ) + constructor(animationUrl: String) : this( + chatId = null, + channelUsername = null, + animationUrl = animationUrl + ) + constructor(channelUsername: String, animationUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -47,6 +53,12 @@ class SendAnimation private constructor( animationFile = animationFile ) + constructor(animationFile: File) : this( + chatId = null, + channelUsername = null, + animationFile = animationFile + ) + constructor(channelUsername: String, animationFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -60,6 +72,12 @@ class SendAnimation private constructor( animationBytes = animationBytes ) + constructor(animationBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + animationBytes = animationBytes + ) + constructor(channelUsername: String, animationBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt index 30f44bbdf..9898a7553 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt @@ -33,6 +33,12 @@ class SendAudio private constructor( audioUrl = audioUrl ) + constructor(audioUrl: String) : this( + chatId = null, + channelUsername = null, + audioUrl = audioUrl + ) + constructor(channelUsername: String, audioUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -46,6 +52,12 @@ class SendAudio private constructor( audioFile = audioFile ) + constructor(audioFile: File) : this( + chatId = null, + channelUsername = null, + audioFile = audioFile + ) + constructor(channelUsername: String, audioFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -59,6 +71,12 @@ class SendAudio private constructor( audioBytes = audioBytes ) + constructor(audioBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + audioBytes = audioBytes + ) + constructor(channelUsername: String, audioBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt index aaa1ae88e..7efdbd2cc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt @@ -23,6 +23,13 @@ class SendContact private constructor( firstName = firstName ) + constructor(phoneNumber: String, firstName: String) : this( + chatId = null, + channelUsername = null, + phoneNumber = phoneNumber, + firstName = firstName + ) + constructor(channelUsername: String, phoneNumber: String, firstName: String) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt index f755f0e42..97d092cca 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt @@ -34,6 +34,12 @@ class SendDocument private constructor( documentUrl = documentUrl ) + constructor(documentUrl: String) : this( + chatId = null, + channelUsername = null, + documentUrl = documentUrl + ) + constructor(channelUsername: String, documentUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -47,6 +53,12 @@ class SendDocument private constructor( documentFile = documentFile ) + constructor(documentFile: File) : this( + chatId = null, + channelUsername = null, + documentFile = documentFile + ) + constructor(channelUsername: String, documentFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -60,6 +72,12 @@ class SendDocument private constructor( documentBytes = documentBytes ) + constructor(documentBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + documentBytes = documentBytes + ) + constructor(channelUsername: String, documentBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt index db0632a96..1404cd0b2 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt @@ -38,6 +38,13 @@ class SendLivePhoto private constructor( photoId = photoId, ) + constructor(livePhotoId: String, photoId: String) : this( + chatId = null, + channelUsername = null, + livePhotoId = livePhotoId, + photoId = photoId, + ) + constructor(channelUsername: String, livePhotoId: String, photoId: String) : this( chatId = null, channelUsername = channelUsername, @@ -52,6 +59,13 @@ class SendLivePhoto private constructor( photoFile = photoFile, ) + constructor(livePhotoId: String, photoFile: File) : this( + chatId = null, + channelUsername = null, + livePhotoId = livePhotoId, + photoFile = photoFile, + ) + constructor(channelUsername: String, livePhotoId: String, photoFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -66,6 +80,13 @@ class SendLivePhoto private constructor( photoBytes = photoBytes, ) + constructor(livePhotoId: String, photoBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + livePhotoId = livePhotoId, + photoBytes = photoBytes, + ) + constructor(channelUsername: String, livePhotoId: String, photoBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, @@ -80,6 +101,13 @@ class SendLivePhoto private constructor( photoId = photoId, ) + constructor(livePhotoFile: File, photoId: String) : this( + chatId = null, + channelUsername = null, + livePhotoFile = livePhotoFile, + photoId = photoId, + ) + constructor(channelUsername: String, livePhotoFile: File, photoId: String) : this( chatId = null, channelUsername = channelUsername, @@ -94,6 +122,13 @@ class SendLivePhoto private constructor( photoFile = photoFile, ) + constructor(livePhotoFile: File, photoFile: File) : this( + chatId = null, + channelUsername = null, + livePhotoFile = livePhotoFile, + photoFile = photoFile, + ) + constructor(channelUsername: String, livePhotoFile: File, photoFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -108,6 +143,13 @@ class SendLivePhoto private constructor( photoBytes = photoBytes, ) + constructor(livePhotoFile: File, photoBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + livePhotoFile = livePhotoFile, + photoBytes = photoBytes, + ) + constructor(channelUsername: String, livePhotoFile: File, photoBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, @@ -122,6 +164,13 @@ class SendLivePhoto private constructor( photoId = photoId, ) + constructor(livePhotoBytes: ByteArray, photoId: String) : this( + chatId = null, + channelUsername = null, + livePhotoBytes = livePhotoBytes, + photoId = photoId, + ) + constructor(channelUsername: String, livePhotoBytes: ByteArray, photoId: String) : this( chatId = null, channelUsername = channelUsername, @@ -136,6 +185,13 @@ class SendLivePhoto private constructor( photoFile = photoFile, ) + constructor(livePhotoBytes: ByteArray, photoFile: File) : this( + chatId = null, + channelUsername = null, + livePhotoBytes = livePhotoBytes, + photoFile = photoFile, + ) + constructor(channelUsername: String, livePhotoBytes: ByteArray, photoFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -150,6 +206,13 @@ class SendLivePhoto private constructor( photoBytes = photoBytes, ) + constructor(livePhotoBytes: ByteArray, photoBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + livePhotoBytes = livePhotoBytes, + photoBytes = photoBytes, + ) + constructor(channelUsername: String, livePhotoBytes: ByteArray, photoBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt index be7ed73b6..095f53f18 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt @@ -23,6 +23,13 @@ class SendLocation private constructor( longitude = longitude ) + constructor(latitude: Float, longitude: Float) : this( + chatId = null, + channelUsername = null, + latitude = latitude, + longitude = longitude + ) + constructor(channelUsername: String, latitude: Float, longitude: Float) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt index aca955d4d..a8fd68171 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt @@ -24,6 +24,12 @@ class SendMessage private constructor( text = text ) + constructor(text: String) : this( + chatId = null, + channelUsername = null, + text = text + ) + constructor(channelUsername: String, text: String) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt index 031fd37d4..904b045f8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt @@ -33,6 +33,12 @@ class SendPhoto private constructor( photoUrl = photoUrl ) + constructor(photoUrl: String) : this( + chatId = null, + channelUsername = null, + photoUrl = photoUrl + ) + constructor(channelUsername: String, photoUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -46,6 +52,12 @@ class SendPhoto private constructor( photoFile = photoFile ) + constructor(photoFile: File) : this( + chatId = null, + channelUsername = null, + photoFile = photoFile + ) + constructor(channelUsername: String, photoFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -59,6 +71,12 @@ class SendPhoto private constructor( photoBytes = photoBytes ) + constructor(photoBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + photoBytes = photoBytes + ) + constructor(channelUsername: String, photoBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt index a2a266ab0..8e4cc9ea8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt @@ -31,6 +31,12 @@ class SendSticker private constructor( stickerUrl = stickerUrl ) + constructor(stickerUrl: String) : this( + chatId = null, + channelUsername = null, + stickerUrl = stickerUrl + ) + constructor(channelUsername: String, stickerUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -44,6 +50,12 @@ class SendSticker private constructor( stickerFile = stickerFile ) + constructor(stickerFile: File) : this( + chatId = null, + channelUsername = null, + stickerFile = stickerFile + ) + constructor(channelUsername: String, stickerFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -57,6 +69,12 @@ class SendSticker private constructor( stickerBytes = stickerBytes ) + constructor(stickerBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + stickerBytes = stickerBytes + ) + constructor(channelUsername: String, stickerBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt index c69aaac36..eb87ae0f3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt @@ -33,6 +33,20 @@ class SendVenue private constructor( address = address ) + constructor( + latitude: Float, + longitude: Float, + title: String, + address: String + ) : this( + chatId = null, + channelUsername = null, + latitude = latitude, + longitude = longitude, + title = title, + address = address + ) + constructor( channelUsername: String, latitude: Float, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt index 05470774b..67e795361 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt @@ -33,6 +33,12 @@ class SendVideo private constructor( videoUrl = videoUrl ) + constructor(videoUrl: String) : this( + chatId = null, + channelUsername = null, + videoUrl = videoUrl + ) + constructor(channelUsername: String, videoUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -46,6 +52,12 @@ class SendVideo private constructor( videoFile = videoFile ) + constructor(videoFile: File) : this( + chatId = null, + channelUsername = null, + videoFile = videoFile + ) + constructor(channelUsername: String, videoFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -59,6 +71,12 @@ class SendVideo private constructor( videoBytes = videoBytes ) + constructor(videoBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + videoBytes = videoBytes + ) + constructor(channelUsername: String, videoBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt index 4957fd739..5ff7c63e8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt @@ -31,6 +31,12 @@ class SendVideoNote private constructor( videoNoteUrl = videoNoteUrl ) + constructor(videoNoteUrl: String) : this( + chatId = null, + channelUsername = null, + videoNoteUrl = videoNoteUrl + ) + constructor(channelUsername: String, videoNoteUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -44,6 +50,12 @@ class SendVideoNote private constructor( videoNoteFile = videoNoteFile ) + constructor(videoNoteFile: File) : this( + chatId = null, + channelUsername = null, + videoNoteFile = videoNoteFile + ) + constructor(channelUsername: String, videoNoteFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -57,6 +69,12 @@ class SendVideoNote private constructor( videoNoteBytes = videoNoteBytes ) + constructor(videoNoteBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + videoNoteBytes = videoNoteBytes + ) + constructor(channelUsername: String, videoNoteBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt index a504d604e..c257a3dc4 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt @@ -33,6 +33,12 @@ class SendVoice private constructor( voiceUrl = voiceUrl ) + constructor(voiceUrl: String) : this( + chatId = null, + channelUsername = null, + voiceUrl = voiceUrl + ) + constructor(channelUsername: String, voiceUrl: String) : this( chatId = null, channelUsername = channelUsername, @@ -46,6 +52,12 @@ class SendVoice private constructor( voiceFile = voiceFile ) + constructor(voiceFile: File) : this( + chatId = null, + channelUsername = null, + voiceFile = voiceFile + ) + constructor(channelUsername: String, voiceFile: File) : this( chatId = null, channelUsername = channelUsername, @@ -59,6 +71,12 @@ class SendVoice private constructor( voiceBytes = voiceBytes ) + constructor(voiceBytes: ByteArray) : this( + chatId = null, + channelUsername = null, + voiceBytes = voiceBytes + ) + constructor(channelUsername: String, voiceBytes: ByteArray) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/VerifyChat.kt b/library/src/main/java/com/pengrad/telegrambot/request/VerifyChat.kt index 2ecedead2..ba6b27bdf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/VerifyChat.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/VerifyChat.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.response.BaseResponse import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -23,7 +25,15 @@ class VerifyChat private constructor( val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") var customDescription: String? by optionalRequestParameter() + var customDescriptionParseMode: ParseMode? by optionalRequestParameter() + var customDescriptionEntities: List? by optionalRequestParameter() fun customDescription(customDescription: String) = applySelf { this.customDescription = customDescription } + fun customDescriptionParseMode(customDescriptionParseMode: ParseMode) = applySelf { this.customDescriptionParseMode = customDescriptionParseMode } + + fun customDescriptionEntities(customDescriptionEntities: List) = applySelf { this.customDescriptionEntities = customDescriptionEntities } + + fun customDescriptionEntities(vararg customDescriptionEntities: MessageEntity) = customDescriptionEntities(customDescriptionEntities.toList()) + } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/VerifyUser.kt b/library/src/main/java/com/pengrad/telegrambot/request/VerifyUser.kt index 11ca62179..84a0d7908 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/VerifyUser.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/VerifyUser.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.response.BaseResponse import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -10,7 +12,15 @@ class VerifyUser( val userId: Long by requestParameter(userId) var customDescription: String? by optionalRequestParameter() + var customDescriptionParseMode: ParseMode? by optionalRequestParameter() + var customDescriptionEntities: List? by optionalRequestParameter() fun customDescription(customDescription: String) = applySelf { this.customDescription = customDescription } + fun customDescriptionParseMode(customDescriptionParseMode: ParseMode) = applySelf { this.customDescriptionParseMode = customDescriptionParseMode } + + fun customDescriptionEntities(customDescriptionEntities: List) = applySelf { this.customDescriptionEntities = customDescriptionEntities } + + fun customDescriptionEntities(vararg customDescriptionEntities: MessageEntity) = customDescriptionEntities(customDescriptionEntities.toList()) + } \ No newline at end of file diff --git a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt index 845b5a1b3..c96d0b00d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessage.kt @@ -23,6 +23,12 @@ class SendRichMessage private constructor( richMessage = richMessage ) + constructor(richMessage: InputRichMessage) : this( + chatId = null, + channelUsername = null, + richMessage = richMessage + ) + constructor(channelUsername: String, richMessage: InputRichMessage) : this( chatId = null, channelUsername = channelUsername, diff --git a/library/src/main/java/com/pengrad/telegrambot/request/widget/AnswerWidgetQuery.kt b/library/src/main/java/com/pengrad/telegrambot/request/widget/AnswerWidgetQuery.kt new file mode 100644 index 000000000..14e4e88ec --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/widget/AnswerWidgetQuery.kt @@ -0,0 +1,21 @@ +package com.pengrad.telegrambot.request.widget + +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +/** + * Answers a query from a widget. The query must be answered within 15 seconds. + */ +class AnswerWidgetQuery( + widgetQueryId: String +) : KBaseRequest(BaseResponse::class) { + + val widgetQueryId: String by requestParameter(widgetQueryId) + + var data: String? by optionalRequestParameter() + + fun data(data: String) = applySelf { this.data = data } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/widget/EditMessageWidgetData.kt b/library/src/main/java/com/pengrad/telegrambot/request/widget/EditMessageWidgetData.kt new file mode 100644 index 000000000..bcbbdfa02 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/widget/EditMessageWidgetData.kt @@ -0,0 +1,50 @@ +package com.pengrad.telegrambot.request.widget + +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter + +/** + * Edits data of a widget in a message sent by the bot or via the bot (for inline bots). + */ +class EditMessageWidgetData private constructor( + chatId: Long?, + channelUsername: String?, + messageId: Int?, + inlineMessageId: String? +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, messageId: Int) : this( + chatId = chatId, + channelUsername = null, + messageId = messageId, + inlineMessageId = null + ) + + constructor(channelUsername: String, messageId: Int) : this( + chatId = null, + channelUsername = channelUsername, + messageId = messageId, + inlineMessageId = null + ) + + constructor(inlineMessageId: String) : this( + chatId = null, + channelUsername = null, + messageId = null, + inlineMessageId = inlineMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val messageId: Int? by optionalRequestParameter(messageId) + val inlineMessageId: String? by optionalRequestParameter(inlineMessageId) + + var publicData: String? by optionalRequestParameter() + var chatData: String? by optionalRequestParameter() + + fun publicData(publicData: String) = applySelf { this.publicData = publicData } + + fun chatData(chatData: String) = applySelf { this.chatData = chatData } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/widget/EditSharedWidgetData.kt b/library/src/main/java/com/pengrad/telegrambot/request/widget/EditSharedWidgetData.kt new file mode 100644 index 000000000..ce83fe54b --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/widget/EditSharedWidgetData.kt @@ -0,0 +1,23 @@ +package com.pengrad.telegrambot.request.widget + +import com.pengrad.telegrambot.request.KBaseRequest +import com.pengrad.telegrambot.response.BaseResponse +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +/** + * Edits public data of a shared widget created by the bot. Pass an empty string to remove the public data. + */ +class EditSharedWidgetData( + widgetId: String, + publicData: String +) : KBaseRequest(BaseResponse::class) { + + val widgetId: String by requestParameter(widgetId) + val publicData: String by requestParameter(publicData) + + var cacheTime: Int? by optionalRequestParameter() + + fun cacheTime(cacheTime: Int) = applySelf { this.cacheTime = cacheTime } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/widget/SendSharedWidget.kt b/library/src/main/java/com/pengrad/telegrambot/request/widget/SendSharedWidget.kt new file mode 100644 index 000000000..5fcaca505 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/widget/SendSharedWidget.kt @@ -0,0 +1,53 @@ +package com.pengrad.telegrambot.request.widget + +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.request.AbstractSendRequest +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +/** + * Sends again a shared widget created by the bot. + */ +class SendSharedWidget private constructor( + chatId: Long? = null, + channelUsername: String? = null, + + widgetId: String +) : AbstractSendRequest( + chatId = chatId, + channelUsername = channelUsername, +) { + + constructor(chatId: Long, widgetId: String) : this( + chatId = chatId, + channelUsername = null, + widgetId = widgetId + ) + + constructor(channelUsername: String, widgetId: String) : this( + chatId = null, + channelUsername = channelUsername, + widgetId = widgetId + ) + + val widgetId: String by requestParameter(widgetId) + + var chatData: String? by optionalRequestParameter() + var caption: String? by optionalRequestParameter() + var parseMode: ParseMode? by optionalRequestParameter() + var captionEntities: List? by optionalRequestParameter() + var showCaptionAboveMedia: Boolean? by optionalRequestParameter() + + fun chatData(chatData: String) = applySelf { this.chatData = chatData } + + fun caption(caption: String) = applySelf { this.caption = caption } + + fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } + + fun captionEntities(captionEntities: List) = applySelf { this.captionEntities = captionEntities } + + fun captionEntities(vararg captionEntities: MessageEntity) = captionEntities(captionEntities.toList()) + + fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = applySelf { this.showCaptionAboveMedia = showCaptionAboveMedia } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/widget/SendWidget.kt b/library/src/main/java/com/pengrad/telegrambot/request/widget/SendWidget.kt new file mode 100644 index 000000000..a2582b511 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/widget/SendWidget.kt @@ -0,0 +1,69 @@ +package com.pengrad.telegrambot.request.widget + +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.request.AbstractSendRequest +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter +import com.pengrad.telegrambot.utility.kotlin.requestParameter + +/** + * Sends a message with an HTML widget. HTML must be 1-32768 bytes and must not exceed 4096 bytes + * when compressed by zlib with the maximum compression level. + */ +class SendWidget private constructor( + chatId: Long? = null, + channelUsername: String? = null, + + html: String +) : AbstractSendRequest( + chatId = chatId, + channelUsername = channelUsername, +) { + + constructor(chatId: Long, html: String) : this( + chatId = chatId, + channelUsername = null, + html = html + ) + + constructor(channelUsername: String, html: String) : this( + chatId = null, + channelUsername = channelUsername, + html = html + ) + + val html: String by requestParameter(html) + + var width: Int? by optionalRequestParameter() + var height: Int? by optionalRequestParameter() + var publicData: String? by optionalRequestParameter() + var chatData: String? by optionalRequestParameter() + var caption: String? by optionalRequestParameter() + var parseMode: ParseMode? by optionalRequestParameter() + var captionEntities: List? by optionalRequestParameter() + var showCaptionAboveMedia: Boolean? by optionalRequestParameter() + var allowQueries: Boolean? by optionalRequestParameter() + var isShared: Boolean? by optionalRequestParameter() + + fun width(width: Int) = applySelf { this.width = width } + + fun height(height: Int) = applySelf { this.height = height } + + fun publicData(publicData: String) = applySelf { this.publicData = publicData } + + fun chatData(chatData: String) = applySelf { this.chatData = chatData } + + fun caption(caption: String) = applySelf { this.caption = caption } + + fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } + + fun captionEntities(captionEntities: List) = applySelf { this.captionEntities = captionEntities } + + fun captionEntities(vararg captionEntities: MessageEntity) = captionEntities(captionEntities.toList()) + + fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = applySelf { this.showCaptionAboveMedia = showCaptionAboveMedia } + + fun allowQueries(allowQueries: Boolean) = applySelf { this.allowQueries = allowQueries } + + fun isShared(isShared: Boolean) = applySelf { this.isShared = isShared } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/response/GetChatShareThemeBackdropsResponse.kt b/library/src/main/java/com/pengrad/telegrambot/response/GetChatShareThemeBackdropsResponse.kt new file mode 100644 index 000000000..ab20619fa --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/response/GetChatShareThemeBackdropsResponse.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.response + +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareThemeBackdrops + +data class GetChatShareThemeBackdropsResponse(val result: ChatShareThemeBackdrops) : BaseResponse() diff --git a/library/src/main/java/com/pengrad/telegrambot/response/GetUniqueGiftResponse.kt b/library/src/main/java/com/pengrad/telegrambot/response/GetUniqueGiftResponse.kt new file mode 100644 index 000000000..0cdae2d02 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/response/GetUniqueGiftResponse.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.response + +import com.pengrad.telegrambot.model.gift.unique.UniqueGift + +data class GetUniqueGiftResponse(val result: UniqueGift) : BaseResponse() diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/BotUtils.java b/library/src/main/java/com/pengrad/telegrambot/utility/BotUtils.java index 640786b4e..4b17833e8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/BotUtils.java +++ b/library/src/main/java/com/pengrad/telegrambot/utility/BotUtils.java @@ -1,5 +1,11 @@ package com.pengrad.telegrambot.utility; +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareTheme; +import com.pengrad.telegrambot.model.chatsharetheme.EmojiType; +import com.pengrad.telegrambot.model.widget.WidgetQueryType; +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareTheme; +import com.pengrad.telegrambot.model.chatsharetheme.EmojiType; +import com.pengrad.telegrambot.model.widget.WidgetQueryType; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -44,6 +50,9 @@ private BotUtils() {} .registerTypeAdapter(OwnedGift.class, new OwnedGiftTypeAdapter()) .registerTypeAdapter(RichText.class, RichTextTypeAdapter.INSTANCE) .registerTypeAdapter(RichBlock.class, RichBlockTypeAdapter.INSTANCE) + .registerTypeAdapter(WidgetQueryType.class, WidgetQueryTypeAdapter.INSTANCE) + .registerTypeAdapter(ChatShareTheme.class, ChatShareThemeTypeAdapter.INSTANCE) + .registerTypeAdapter(EmojiType.class, EmojiTypeAdapter.INSTANCE) .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create(); diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/ChatShareThemeTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/ChatShareThemeTypeAdapter.kt new file mode 100644 index 000000000..b0f69c069 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/ChatShareThemeTypeAdapter.kt @@ -0,0 +1,24 @@ +package com.pengrad.telegrambot.utility.gson + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import com.google.gson.JsonParseException +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareTheme +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareThemeEmoji +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareThemeUniqueGift +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareThemeUnknown +import java.lang.reflect.Type + +object ChatShareThemeTypeAdapter : JsonDeserializer { + + @Throws(JsonParseException::class) + override fun deserialize(element: JsonElement, type: Type, context: JsonDeserializationContext): ChatShareTheme { + val obj = element.asJsonObject + return when (obj.getAsJsonPrimitive("type")?.asString) { + ChatShareTheme.EMOJI -> context.deserialize(obj, ChatShareThemeEmoji::class.java) + ChatShareTheme.UNIQUE_GIFT -> context.deserialize(obj, ChatShareThemeUniqueGift::class.java) + else -> ChatShareThemeUnknown() + } + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/EmojiTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/EmojiTypeAdapter.kt new file mode 100644 index 000000000..196dea00c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/EmojiTypeAdapter.kt @@ -0,0 +1,24 @@ +package com.pengrad.telegrambot.utility.gson + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonDeserializer +import com.google.gson.JsonElement +import com.google.gson.JsonParseException +import com.pengrad.telegrambot.model.chatsharetheme.EmojiType +import com.pengrad.telegrambot.model.chatsharetheme.EmojiTypeCustomEmoji +import com.pengrad.telegrambot.model.chatsharetheme.EmojiTypeEmoji +import com.pengrad.telegrambot.model.chatsharetheme.EmojiTypeUnknown +import java.lang.reflect.Type + +object EmojiTypeAdapter : JsonDeserializer { + + @Throws(JsonParseException::class) + override fun deserialize(element: JsonElement, type: Type, context: JsonDeserializationContext): EmojiType { + val obj = element.asJsonObject + return when (obj.getAsJsonPrimitive("type")?.asString) { + EmojiType.EMOJI -> context.deserialize(obj, EmojiTypeEmoji::class.java) + EmojiType.CUSTOM_EMOJI -> context.deserialize(obj, EmojiTypeCustomEmoji::class.java) + else -> EmojiTypeUnknown() + } + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt index 040ac8139..96352dd6d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichTextTypeAdapter.kt @@ -31,6 +31,7 @@ object RichTextTypeAdapter : JsonDeserializer, JsonSerializer { + + @Throws(JsonParseException::class) + override fun deserialize(element: JsonElement, type: Type, context: JsonDeserializationContext): WidgetQueryType { + val obj = element.asJsonObject + return when (obj.getAsJsonPrimitive("type")?.asString) { + WidgetQueryType.DATA -> context.deserialize(obj, WidgetQueryTypeData::class.java) + WidgetQueryType.SIGN_DATA -> context.deserialize(obj, WidgetQueryTypeSignData::class.java) + WidgetQueryType.SENT_TRANSACTION -> context.deserialize(obj, WidgetQueryTypeSentTransaction::class.java) + else -> WidgetQueryTypeUnknown() + } + } +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/AnswerWidgetQueryExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/AnswerWidgetQueryExtension.kt new file mode 100644 index 000000000..444e39be8 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/AnswerWidgetQueryExtension.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.widget.AnswerWidgetQuery +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.answerWidgetQuery( + widgetQueryId: String, + modifier: AnswerWidgetQuery.() -> Unit = {} +) = this.execute(AnswerWidgetQuery(widgetQueryId), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendSharedWidgetExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendSharedWidgetExtension.kt new file mode 100644 index 000000000..b73e3b211 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendSharedWidgetExtension.kt @@ -0,0 +1,23 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.widget.SendSharedWidget +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.sendSharedWidget( + chatId: Long, + widgetId: String, + modifier: SendSharedWidget.() -> Unit = {} +) = this.execute(SendSharedWidget( + chatId = chatId, + widgetId = widgetId +), modifier) + +inline fun TelegramAware.sendSharedWidget( + channelUsername: String, + widgetId: String, + modifier: SendSharedWidget.() -> Unit = {} +) = this.execute(SendSharedWidget( + channelUsername = channelUsername, + widgetId = widgetId +), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendWidgetExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendWidgetExtension.kt new file mode 100644 index 000000000..037e4f916 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/SendWidgetExtension.kt @@ -0,0 +1,23 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.widget.SendWidget +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.sendWidget( + chatId: Long, + html: String, + modifier: SendWidget.() -> Unit = {} +) = this.execute(SendWidget( + chatId = chatId, + html = html +), modifier) + +inline fun TelegramAware.sendWidget( + channelUsername: String, + html: String, + modifier: SendWidget.() -> Unit = {} +) = this.execute(SendWidget( + channelUsername = channelUsername, + html = html +), modifier) diff --git a/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt b/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt new file mode 100644 index 000000000..dbcc6824d --- /dev/null +++ b/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt @@ -0,0 +1,109 @@ +package com.pengrad.telegrambot + +import com.pengrad.telegrambot.model.chatsharetheme.ChatShareThemeEmoji +import com.pengrad.telegrambot.model.chatsharetheme.EmojiTypeCustomEmoji +import com.pengrad.telegrambot.model.chatsharetheme.EmojiTypeEmoji +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters +import com.pengrad.telegrambot.model.request.ReplyParameters +import com.pengrad.telegrambot.model.richmessages.richtext.RichTextPlain +import com.pengrad.telegrambot.model.widget.WidgetQueryTypeData +import com.pengrad.telegrambot.model.widget.WidgetQueryTypeSentTransaction +import com.pengrad.telegrambot.model.widget.WidgetQueryTypeUnknown +import com.pengrad.telegrambot.request.SendMessage +import com.pengrad.telegrambot.request.widget.AnswerWidgetQuery +import com.pengrad.telegrambot.request.widget.EditMessageWidgetData +import com.pengrad.telegrambot.request.widget.EditSharedWidgetData +import com.pengrad.telegrambot.request.widget.SendWidget +import com.pengrad.telegrambot.utility.BotUtils +import org.junit.Assert.* +import org.junit.Test + +class BotApi104Test { + + @Test + fun widgetQueryUpdate() { + val u = BotUtils.parseUpdate( + """{"update_id":1,"widget_query":{"id":"q","from":{"id":5,"is_bot":false,"first_name":"A"}, + "chat_instance":"ci","type":{"type":"data"},"data":"go","widget_id":"w"}, + "shared_widget_query":{"id":"s","from":{"id":5,"is_bot":false,"first_name":"A"}, + "type":{"type":"sent_transaction","wallet":{"address":"a","amount":"1"},"msg_hash":"h"},"data":"d","widget_id":"w"}}""" + ) + assertTrue(u.widgetQuery().type is WidgetQueryTypeData) + assertEquals("go", u.widgetQuery().data) + val t = u.sharedWidgetQuery().type as WidgetQueryTypeSentTransaction + assertEquals("h", t.msgHash) + } + + @Test + fun unknownWidgetQueryType() { + val u = BotUtils.parseUpdate( + """{"update_id":1,"widget_query":{"id":"q","from":{"id":5,"is_bot":false,"first_name":"A"}, + "chat_instance":"ci","type":{"type":"future"},"data":"go"}}""" + ) + assertTrue(u.widgetQuery().type is WidgetQueryTypeUnknown) + } + + @Test + fun messageFields() { + val u = BotUtils.parseUpdate( + """{"update_id":1,"message":{"message_id":1,"date":1,"chat":{"id":1,"type":"private"}, + "widget":{"html":"x","public_data":"p"}, + "ton_wallet_transfer":{"transaction_id":"t","peer_address":"a","amount":"-5"}, + "paid_messages_waived":{}}}""" + ) + val m = u.message() + assertEquals("x", m.widget().html) + assertEquals("p", m.widget().publicData) + assertEquals("-5", m.tonWalletTransfer().amount) + assertNotNull(m.paidMessagesWaived()) + } + + @Test + fun shareThemeAndTonCard() { + val chat = BotUtils.fromJson( + """{"id":1,"type":"private","ton_wallet_card":{"address":"a","amount":"1","stickers":[ + {"position":{"x_percentage":1.0,"y_percentage":2.0,"width_percentage":3.0,"height_percentage":4.0, + "rotation_angle":5.0,"corner_radius_percentage":6.0},"nft":{"address":"n","index":"1","name":"nm","description":"d"}}]}, + "share_theme":{"type":"emoji","emojis":[{"type":"emoji","emoji":"x"},{"type":"custom_emoji","custom_emoji_id":"c"}], + "background_backdrop_id":7}}""", + com.pengrad.telegrambot.model.ChatFullInfo::class.java + ) + assertEquals(1, chat.tonWalletCard().stickers.size) + assertEquals(2.0, chat.tonWalletCard().stickers[0].position.yPercentage, 0.0) + val theme = chat.shareTheme() as ChatShareThemeEmoji + assertEquals(EmojiTypeEmoji("x"), theme.emojis[0]) + assertEquals(EmojiTypeCustomEmoji("c"), theme.emojis[1]) + assertEquals(7, theme.backgroundBackdropId) + } + + @Test + fun quoteRichTexts() { + val q = BotUtils.fromJson( + """{"text":"","rich_texts":["a",{"type":"ton_address","text":"b","address":"UQ"}],"position":0}""", + com.pengrad.telegrambot.model.TextQuote::class.java + ) + assertEquals(2, q.richTexts().size) + val json = BotUtils.toJson(ReplyParameters(1).quoteRichTexts(RichTextPlain("a"))) + assertTrue(json, json.contains("quote_rich_texts")) + } + + @Test + fun requestParameters() { + val w = SendWidget(1L, "

").width(300).isShared(true).allowQueries(true) + assertEquals(1L, w.parameters["chat_id"]) + assertEquals("

", w.parameters["html"]) + assertEquals(true, w.parameters["is_shared"]) + assertEquals("d", AnswerWidgetQuery("q").data("d").parameters["data"]) + assertEquals("i", EditMessageWidgetData("i").parameters["inline_message_id"]) + assertEquals(10, EditSharedWidgetData("w", "p").cacheTime(10).parameters["cache_time"]) + } + + @Test + fun ephemeralReplyWithoutChat() { + val r = SendMessage("hi").ephemeralMessageParameters(EphemeralMessageParameters.replyToCallbackQuery("cb")) + assertFalse(r.parameters.containsKey("chat_id")) + val p = r.parameters["ephemeral_message_parameters"] as EphemeralMessageParameters + assertNull(p.receiverUserId) + assertEquals("cb", p.callbackQueryId) + } +} diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt index d848bf0d7..5f8d864e1 100644 --- a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt +++ b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt @@ -97,6 +97,7 @@ class ModelTest { verifierApi.withIgnoredFields("general_forum_topic_hidden") verifierApi.withIgnoredFields("general_forum_topic_unhidden") verifierApi.withIgnoredFields("community_chat_removed") + verifierApi.withIgnoredFields("paid_messages_waived") } if (c == InlineKeyboardButton::class.java || c == RichMessageButton::class.java) { diff --git a/pom.xml b/pom.xml index 4bc141524..d144a416f 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 com.github.pengrad java-telegram-bot-api - 10.3.0 + 10.4.0 JavaTelegramBotApi Java API for Telegram Bot API https://github.com/pengrad/java-telegram-bot-api/ From f7850af64a746660b32ed42b5fdb55cac14ff30b Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Mon, 9 Nov 2026 17:36:57 +0100 Subject: [PATCH 2/4] Added Kotlin extensions for editMessageWidgetData and editSharedWidgetData Co-Authored-By: Claude Opus 5.5 --- .../request/EditMessageWidgetDataExtension.kt | 22 +++++++++++++++++++ .../request/EditSharedWidgetDataExtension.kt | 11 ++++++++++ 2 files changed, 33 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditMessageWidgetDataExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditSharedWidgetDataExtension.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditMessageWidgetDataExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditMessageWidgetDataExtension.kt new file mode 100644 index 000000000..eb11783ee --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditMessageWidgetDataExtension.kt @@ -0,0 +1,22 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.widget.EditMessageWidgetData +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editMessageWidgetData( + chatId: Long, + messageId: Int, + modifier: EditMessageWidgetData.() -> Unit = {} +) = this.execute(EditMessageWidgetData(chatId, messageId), modifier) + +inline fun TelegramAware.editMessageWidgetData( + channelUsername: String, + messageId: Int, + modifier: EditMessageWidgetData.() -> Unit = {} +) = this.execute(EditMessageWidgetData(channelUsername, messageId), modifier) + +inline fun TelegramAware.editMessageWidgetData( + inlineMessageId: String, + modifier: EditMessageWidgetData.() -> Unit = {} +) = this.execute(EditMessageWidgetData(inlineMessageId), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditSharedWidgetDataExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditSharedWidgetDataExtension.kt new file mode 100644 index 000000000..cb358d362 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditSharedWidgetDataExtension.kt @@ -0,0 +1,11 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.widget.EditSharedWidgetData +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editSharedWidgetData( + widgetId: String, + publicData: String, + modifier: EditSharedWidgetData.() -> Unit = {} +) = this.execute(EditSharedWidgetData(widgetId, publicData), modifier) From 004f875f8025338ed45fedc4ad0fda4530a4f0de Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Mon, 9 Nov 2026 17:38:36 +0100 Subject: [PATCH 3/4] Use Long for chat share theme backdrop identifiers Co-Authored-By: Claude Opus 5.5 --- .../model/chatsharetheme/ChatShareThemeBackdrop.kt | 2 +- .../telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt | 4 ++-- .../src/test/java/com/pengrad/telegrambot/BotApi104Test.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt index 5960889dd..ce2326818 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeBackdrop.kt @@ -4,7 +4,7 @@ import com.pengrad.telegrambot.model.gift.unique.UniqueGiftBackdropColors import java.io.Serializable data class ChatShareThemeBackdrop( - @get:JvmName("id") val id: Int, + @get:JvmName("id") val id: Long, @get:JvmName("name") val name: String, @get:JvmName("colors") val colors: UniqueGiftBackdropColors, ) : Serializable diff --git a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt index 5217bd360..7d0876aff 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/chatsharetheme/ChatShareThemeEmoji.kt @@ -2,7 +2,7 @@ package com.pengrad.telegrambot.model.chatsharetheme data class ChatShareThemeEmoji @JvmOverloads constructor( @get:JvmName("emojis") val emojis: Array, - @get:JvmName("backgroundBackdropId") val backgroundBackdropId: Int? = null, + @get:JvmName("backgroundBackdropId") val backgroundBackdropId: Long? = null, override val type: String = ChatShareTheme.EMOJI ) : ChatShareTheme { @@ -16,7 +16,7 @@ data class ChatShareThemeEmoji @JvmOverloads constructor( override fun hashCode(): Int { var result = emojis.contentHashCode() - result = 31 * result + (backgroundBackdropId ?: 0) + result = 31 * result + (backgroundBackdropId?.hashCode() ?: 0) result = 31 * result + type.hashCode() return result } diff --git a/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt b/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt index dbcc6824d..30043d494 100644 --- a/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt +++ b/library/src/test/java/com/pengrad/telegrambot/BotApi104Test.kt @@ -73,7 +73,7 @@ class BotApi104Test { val theme = chat.shareTheme() as ChatShareThemeEmoji assertEquals(EmojiTypeEmoji("x"), theme.emojis[0]) assertEquals(EmojiTypeCustomEmoji("c"), theme.emojis[1]) - assertEquals(7, theme.backgroundBackdropId) + assertEquals(7L, theme.backgroundBackdropId) } @Test From fd98806d2a7d722f0683b5f4e518920cac05c614 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Mon, 9 Nov 2026 17:43:15 +0100 Subject: [PATCH 4/4] Align PaidMessagesWaived and widget Input classes with project conventions Co-Authored-By: Claude Opus 5.5 --- .../telegrambot/model/PaidMessagesWaived.java | 18 ---------- .../telegrambot/model/PaidMessagesWaived.kt | 13 +++++++ .../InputSharedWidgetMessageContent.kt | 21 +++++++---- .../request/InputWidgetMessageContent.kt | 36 +++++++++++++------ 4 files changed, 53 insertions(+), 35 deletions(-) delete mode 100644 library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java b/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java deleted file mode 100644 index fee99a6a9..000000000 --- a/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.pengrad.telegrambot.model; - -import java.io.Serializable; - -public class PaidMessagesWaived implements Serializable { - private final static long serialVersionUID = 0L; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - return o != null && getClass() == o.getClass(); - } - - @Override - public int hashCode() { - return 1; - } -} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.kt b/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.kt new file mode 100644 index 000000000..74301e3ef --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/PaidMessagesWaived.kt @@ -0,0 +1,13 @@ +package com.pengrad.telegrambot.model + +import java.io.Serializable + +class PaidMessagesWaived : Serializable { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + return other != null && javaClass == other.javaClass + } + + override fun hashCode(): Int = 1 +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt index 875f9df2e..ef1a27869 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputSharedWidgetMessageContent.kt @@ -2,15 +2,24 @@ package com.pengrad.telegrambot.model.request import com.pengrad.telegrambot.model.MessageEntity -class InputSharedWidgetMessageContent @JvmOverloads constructor( +class InputSharedWidgetMessageContent private constructor( @get:JvmName("widgetId") val widgetId: String, - @get:JvmName("chatData") var chatData: String? = null, - @get:JvmName("caption") var caption: String? = null, - @get:JvmName("parseMode") var parseMode: ParseMode? = null, - @get:JvmName("captionEntities") var captionEntities: Array? = null, - @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean? = null, + @get:JvmName("chatData") var chatData: String?, + @get:JvmName("caption") var caption: String?, + @get:JvmName("parseMode") var parseMode: ParseMode?, + @get:JvmName("captionEntities") var captionEntities: Array?, + @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean?, ) : InputMessageContent() { + constructor(widgetId: String) : this( + widgetId = widgetId, + chatData = null, + caption = null, + parseMode = null, + captionEntities = null, + showCaptionAboveMedia = null, + ) + fun chatData(chatData: String) = apply { this.chatData = chatData } fun caption(caption: String) = apply { this.caption = caption } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt index 650532665..ae3865d63 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputWidgetMessageContent.kt @@ -2,20 +2,34 @@ package com.pengrad.telegrambot.model.request import com.pengrad.telegrambot.model.MessageEntity -class InputWidgetMessageContent @JvmOverloads constructor( +class InputWidgetMessageContent private constructor( @get:JvmName("html") val html: String, - @get:JvmName("width") var width: Int? = null, - @get:JvmName("height") var height: Int? = null, - @get:JvmName("publicData") var publicData: String? = null, - @get:JvmName("chatData") var chatData: String? = null, - @get:JvmName("caption") var caption: String? = null, - @get:JvmName("parseMode") var parseMode: ParseMode? = null, - @get:JvmName("captionEntities") var captionEntities: Array? = null, - @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean? = null, - @get:JvmName("allowQueries") var allowQueries: Boolean? = null, - @get:JvmName("isShared") var isShared: Boolean? = null, + @get:JvmName("width") var width: Int?, + @get:JvmName("height") var height: Int?, + @get:JvmName("publicData") var publicData: String?, + @get:JvmName("chatData") var chatData: String?, + @get:JvmName("caption") var caption: String?, + @get:JvmName("parseMode") var parseMode: ParseMode?, + @get:JvmName("captionEntities") var captionEntities: Array?, + @get:JvmName("showCaptionAboveMedia") var showCaptionAboveMedia: Boolean?, + @get:JvmName("allowQueries") var allowQueries: Boolean?, + @get:JvmName("isShared") var isShared: Boolean?, ) : InputMessageContent() { + constructor(html: String) : this( + html = html, + width = null, + height = null, + publicData = null, + chatData = null, + caption = null, + parseMode = null, + captionEntities = null, + showCaptionAboveMedia = null, + allowQueries = null, + isShared = null, + ) + fun width(width: Int) = apply { this.width = width } fun height(height: Int) = apply { this.height = height }