From ad248cb7aab773e3bfba42b1b2f6ad234d7a3b2e Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 18:11:51 +0200 Subject: [PATCH 01/38] Added the class InputRichMessageMedia and the field media to the class InputRichMessage, allowing bots to explicitly specify media used in markdown or html formatting when sending a rich message. --- .../request/richmessages/InputRichMessage.kt | 8 +++++- .../richmessages/InputRichMessageMedia.kt | 25 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt index ec61a5d2..ad761470 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt @@ -3,6 +3,7 @@ package com.pengrad.telegrambot.model.request.richmessages class InputRichMessage private constructor( @get:JvmName("html") var html: String?, @get:JvmName("markdown") var markdown: String?, + @get:JvmName("media") var media: Array?, @get:JvmName("isRtl") var isRtl: Boolean?, @get:JvmName("skipEntityDetection") var skipEntityDetection: Boolean? ) { @@ -10,6 +11,7 @@ class InputRichMessage private constructor( constructor() : this( html = null, markdown = null, + media = null, isRtl = null, skipEntityDetection = null ) @@ -18,6 +20,8 @@ class InputRichMessage private constructor( fun markdown(markdown: String) = apply { this.markdown = markdown } + fun media(vararg media: InputRichMessageMedia) = apply { this.media = arrayOf(*media) } + fun isRtl(isRtl: Boolean) = apply { this.isRtl = isRtl } fun skipEntityDetection(skipEntityDetection: Boolean) = apply { this.skipEntityDetection = skipEntityDetection } @@ -28,6 +32,7 @@ class InputRichMessage private constructor( other as InputRichMessage return html == other.html && markdown == other.markdown && + media.contentEquals(other.media) && isRtl == other.isRtl && skipEntityDetection == other.skipEntityDetection } @@ -35,11 +40,12 @@ class InputRichMessage private constructor( override fun hashCode(): Int { var result = html?.hashCode() ?: 0 result = 31 * result + (markdown?.hashCode() ?: 0) + result = 31 * result + (media?.contentHashCode() ?: 0) result = 31 * result + (isRtl?.hashCode() ?: 0) result = 31 * result + (skipEntityDetection?.hashCode() ?: 0) return result } override fun toString(): String = - "InputRichMessage(html=$html, markdown=$markdown, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" + "InputRichMessage(html=$html, markdown=$markdown, media=${media?.contentToString()}, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt new file mode 100644 index 00000000..bc958c9f --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessageMedia.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages + +import com.pengrad.telegrambot.model.request.InputMedia + +class InputRichMessageMedia( + @get:JvmName("id") val id: String, + @get:JvmName("media") val media: InputMedia<*> +) { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichMessageMedia + return id == other.id && + media == other.media + } + + override fun hashCode(): Int { + var result = id.hashCode() + result = 31 * result + media.hashCode() + return result + } + + override fun toString(): String = "InputRichMessageMedia(id=$id, media=$media)" +} From c79a5e5d6fc61af7b6e4f4ede1cc1e7ce50810c8 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 18:13:07 +0200 Subject: [PATCH 02/38] Added the class InputMediaVoiceNote, representing a voice message to be sent. --- .../model/request/InputMediaVoiceNote.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt new file mode 100644 index 00000000..49346cba --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMediaVoiceNote.kt @@ -0,0 +1,21 @@ +package com.pengrad.telegrambot.model.request + +import com.pengrad.telegrambot.request.ContentTypes +import java.io.File + +class InputMediaVoiceNote : InputMedia { + + constructor(media: String) : super("voice_note", media) + constructor(media: File) : super("voice_note", media) + constructor(media: ByteArray) : super("voice_note", media) + + private var duration: Int? = null + + fun duration(duration: Int): InputMediaVoiceNote { + this.duration = duration + return this + } + + override fun getDefaultFileName(): String = ContentTypes.VOICE_FILE_NAME + override fun getDefaultContentType(): String = ContentTypes.VOICE_MIME_TYPE +} From 12fd774c511eae1c26db27abf915389b1e8579dc Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 18:39:47 +0200 Subject: [PATCH 03/38] RichText: add serialization support --- .../richmessages/richtext/RichTextAnchor.kt | 9 ++++----- .../richmessages/richtext/RichTextAnchorLink.kt | 9 ++++----- .../richtext/RichTextBankCardNumber.kt | 9 ++++----- .../model/richmessages/richtext/RichTextBold.kt | 9 ++++----- .../richmessages/richtext/RichTextBotCommand.kt | 9 ++++----- .../richmessages/richtext/RichTextCashtag.kt | 9 ++++----- .../model/richmessages/richtext/RichTextCode.kt | 9 ++++----- .../richmessages/richtext/RichTextCustomEmoji.kt | 9 ++++----- .../richmessages/richtext/RichTextDateTime.kt | 9 ++++----- .../richtext/RichTextEmailAddress.kt | 9 ++++----- .../richmessages/richtext/RichTextHashtag.kt | 9 ++++----- .../richmessages/richtext/RichTextItalic.kt | 9 ++++----- .../richmessages/richtext/RichTextMarked.kt | 9 ++++----- .../richtext/RichTextMathematicalExpression.kt | 9 ++++----- .../richmessages/richtext/RichTextMention.kt | 9 ++++----- .../richmessages/richtext/RichTextPhoneNumber.kt | 9 ++++----- .../richmessages/richtext/RichTextReference.kt | 9 ++++----- .../richtext/RichTextReferenceLink.kt | 9 ++++----- .../richmessages/richtext/RichTextSpoiler.kt | 9 ++++----- .../richtext/RichTextStrikethrough.kt | 9 ++++----- .../richmessages/richtext/RichTextSubscript.kt | 9 ++++----- .../richmessages/richtext/RichTextSuperscript.kt | 9 ++++----- .../richmessages/richtext/RichTextTextMention.kt | 9 ++++----- .../richmessages/richtext/RichTextUnderline.kt | 9 ++++----- .../model/richmessages/richtext/RichTextUrl.kt | 9 ++++----- .../utility/gson/RichTextTypeAdapter.kt | 16 +++++++++++++++- 26 files changed, 115 insertions(+), 126 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt index 57a3191c..fca39289 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchor.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextAnchor( - @get:JvmName("name") val name: String -) : RichText { - override val type: String get() = RichTextType.ANCHOR -} +data class RichTextAnchor @JvmOverloads constructor( + @get:JvmName("name") val name: String, + override val type: String = RichTextType.ANCHOR +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt index 15759d4d..1f3bd9b5 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextAnchorLink.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextAnchorLink( +data class RichTextAnchorLink @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("anchorName") val anchorName: String -) : RichText { - override val type: String get() = RichTextType.ANCHOR_LINK -} + @get:JvmName("anchorName") val anchorName: String, + override val type: String = RichTextType.ANCHOR_LINK +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt index e30a640b..9eeaa762 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBankCardNumber.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBankCardNumber( +data class RichTextBankCardNumber @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("bankCardNumber") val bankCardNumber: String -) : RichText { - override val type: String get() = RichTextType.BANK_CARD_NUMBER -} + @get:JvmName("bankCardNumber") val bankCardNumber: String, + override val type: String = RichTextType.BANK_CARD_NUMBER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt index abe83868..b9f0e2f2 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBold.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBold( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.BOLD -} +data class RichTextBold @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.BOLD +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt index 2ccfa481..505788bb 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextBotCommand.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextBotCommand( +data class RichTextBotCommand @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("botCommand") val botCommand: String -) : RichText { - override val type: String get() = RichTextType.BOT_COMMAND -} + @get:JvmName("botCommand") val botCommand: String, + override val type: String = RichTextType.BOT_COMMAND +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt index 2ee11987..b1809dfa 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCashtag.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCashtag( +data class RichTextCashtag @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("cashtag") val cashtag: String -) : RichText { - override val type: String get() = RichTextType.CASHTAG -} + @get:JvmName("cashtag") val cashtag: String, + override val type: String = RichTextType.CASHTAG +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt index a43219bb..f209f229 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCode.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCode( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.CODE -} +data class RichTextCode @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.CODE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt index 6f35924a..6ef3ee4e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextCustomEmoji.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextCustomEmoji( +data class RichTextCustomEmoji @JvmOverloads constructor( @get:JvmName("customEmojiId") val customEmojiId: String, - @get:JvmName("alternativeText") val alternativeText: String -) : RichText { - override val type: String get() = RichTextType.CUSTOM_EMOJI -} + @get:JvmName("alternativeText") val alternativeText: String, + override val type: String = RichTextType.CUSTOM_EMOJI +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt index ff5c1d82..a5b2ea27 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextDateTime.kt @@ -1,9 +1,8 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextDateTime( +data class RichTextDateTime @JvmOverloads constructor( @get:JvmName("text") val text: RichText, @get:JvmName("unixTime") val unixTime: Long, - @get:JvmName("dateTimeFormat") val dateTimeFormat: String -) : RichText { - override val type: String get() = RichTextType.DATE_TIME -} + @get:JvmName("dateTimeFormat") val dateTimeFormat: String, + override val type: String = RichTextType.DATE_TIME +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt index 4acad159..a5715d02 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextEmailAddress.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextEmailAddress( +data class RichTextEmailAddress @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("emailAddress") val emailAddress: String -) : RichText { - override val type: String get() = RichTextType.EMAIL_ADDRESS -} + @get:JvmName("emailAddress") val emailAddress: String, + override val type: String = RichTextType.EMAIL_ADDRESS +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt index ccc8dc23..92159a7f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextHashtag.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextHashtag( +data class RichTextHashtag @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("hashtag") val hashtag: String -) : RichText { - override val type: String get() = RichTextType.HASHTAG -} + @get:JvmName("hashtag") val hashtag: String, + override val type: String = RichTextType.HASHTAG +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt index d8d19b32..858bfeec 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextItalic.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextItalic( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.ITALIC -} +data class RichTextItalic @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.ITALIC +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt index 5e964d97..1c47950a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMarked.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMarked( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.MARKED -} +data class RichTextMarked @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.MARKED +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt index 8cae1cf2..8703c312 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMathematicalExpression.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMathematicalExpression( - @get:JvmName("expression") val expression: String -) : RichText { - override val type: String get() = RichTextType.MATHEMATICAL_EXPRESSION -} +data class RichTextMathematicalExpression @JvmOverloads constructor( + @get:JvmName("expression") val expression: String, + override val type: String = RichTextType.MATHEMATICAL_EXPRESSION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt index d354e098..67562d89 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextMention.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextMention( +data class RichTextMention @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("username") val username: String -) : RichText { - override val type: String get() = RichTextType.MENTION -} + @get:JvmName("username") val username: String, + override val type: String = RichTextType.MENTION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt index 60a5b71b..757bdee0 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextPhoneNumber.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextPhoneNumber( +data class RichTextPhoneNumber @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("phoneNumber") val phoneNumber: String -) : RichText { - override val type: String get() = RichTextType.PHONE_NUMBER -} + @get:JvmName("phoneNumber") val phoneNumber: String, + override val type: String = RichTextType.PHONE_NUMBER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt index 09700dbc..f37a0d20 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReference.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextReference( +data class RichTextReference @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("name") val name: String -) : RichText { - override val type: String get() = RichTextType.REFERENCE -} + @get:JvmName("name") val name: String, + override val type: String = RichTextType.REFERENCE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt index 35f1a3c9..7f5a2c21 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextReferenceLink.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextReferenceLink( +data class RichTextReferenceLink @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("referenceName") val referenceName: String -) : RichText { - override val type: String get() = RichTextType.REFERENCE_LINK -} + @get:JvmName("referenceName") val referenceName: String, + override val type: String = RichTextType.REFERENCE_LINK +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt index e3138bb4..19faf78d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSpoiler.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSpoiler( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SPOILER -} +data class RichTextSpoiler @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SPOILER +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt index 932a2a1f..7817a7dc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextStrikethrough.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextStrikethrough( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.STRIKETHROUGH -} +data class RichTextStrikethrough @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.STRIKETHROUGH +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt index 118ad673..8c3bd322 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSubscript.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSubscript( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SUBSCRIPT -} +data class RichTextSubscript @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SUBSCRIPT +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt index 5118f307..61ca5ac9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextSuperscript.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextSuperscript( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.SUPERSCRIPT -} +data class RichTextSuperscript @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.SUPERSCRIPT +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt index f3d0c640..3d9511bd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextTextMention.kt @@ -2,9 +2,8 @@ package com.pengrad.telegrambot.model.richmessages.richtext import com.pengrad.telegrambot.model.User -data class RichTextTextMention( +data class RichTextTextMention @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("user") val user: User -) : RichText { - override val type: String get() = RichTextType.TEXT_MENTION -} + @get:JvmName("user") val user: User, + override val type: String = RichTextType.TEXT_MENTION +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt index fb0fba3e..5855182e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUnderline.kt @@ -1,7 +1,6 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextUnderline( - @get:JvmName("text") val text: RichText -) : RichText { - override val type: String get() = RichTextType.UNDERLINE -} +data class RichTextUnderline @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + override val type: String = RichTextType.UNDERLINE +) : RichText diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt index 0fda6a55..72ea1cdd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextUrl.kt @@ -1,8 +1,7 @@ package com.pengrad.telegrambot.model.richmessages.richtext -data class RichTextUrl( +data class RichTextUrl @JvmOverloads constructor( @get:JvmName("text") val text: RichText, - @get:JvmName("url") val url: String -) : RichText { - override val type: String get() = RichTextType.URL -} + @get:JvmName("url") val url: String, + override val type: String = RichTextType.URL +) : RichText 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 a7fc3975..4250990b 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 @@ -1,13 +1,17 @@ package com.pengrad.telegrambot.utility.gson +import com.google.gson.JsonArray import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializer import com.google.gson.JsonElement import com.google.gson.JsonParseException +import com.google.gson.JsonPrimitive +import com.google.gson.JsonSerializationContext +import com.google.gson.JsonSerializer import com.pengrad.telegrambot.model.richmessages.richtext.* import java.lang.reflect.Type -object RichTextTypeAdapter : JsonDeserializer { +object RichTextTypeAdapter : JsonDeserializer, JsonSerializer { private val typeMapping = mapOf( RichTextType.BOLD to RichTextBold::class, @@ -57,4 +61,14 @@ object RichTextTypeAdapter : JsonDeserializer { else -> RichTextUnknown(RichTextType.UNKNOWN) } } + + override fun serialize(src: RichText, type: Type, context: JsonSerializationContext): JsonElement { + return when (src) { + is RichTextPlain -> JsonPrimitive(src.text) + is RichTextArray -> JsonArray().apply { + src.elements.forEach { add(context.serialize(it, RichText::class.java)) } + } + else -> context.serialize(src, src.javaClass) + } + } } From ba69b168bb1d237f397a0278ebd9baeb1d19c7a3 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 18:43:05 +0200 Subject: [PATCH 04/38] Added the classes InputRichBlockListItem, InputRichBlockParagraph, InputRichBlockSectionHeading, InputRichBlockPreformatted, InputRichBlockFooter, InputRichBlockDivider, InputRichBlockMathematicalExpression, InputRichBlockAnchor, InputRichBlockList, InputRichBlockBlockQuotation, InputRichBlockPullQuotation, InputRichBlockCollage, InputRichBlockSlideshow, InputRichBlockTable, InputRichBlockDetails, InputRichBlockMap, InputRichBlockAnimation, InputRichBlockAudio, InputRichBlockPhoto, InputRichBlockVideo, InputRichBlockVoiceNote and InputRichBlockThinking, which represent different types of blocks available to format an outgoing rich message. --- .../richmessages/richblock/InputRichBlock.kt | 5 ++ .../richblock/InputRichBlockAnchor.kt | 25 +++++++++ .../richblock/InputRichBlockAnimation.kt | 38 +++++++++++++ .../richblock/InputRichBlockAudio.kt | 38 +++++++++++++ .../richblock/InputRichBlockBlockQuotation.kt | 37 ++++++++++++ .../richblock/InputRichBlockCollage.kt | 37 ++++++++++++ .../richblock/InputRichBlockDetails.kt | 41 ++++++++++++++ .../richblock/InputRichBlockDivider.kt | 17 ++++++ .../richblock/InputRichBlockFooter.kt | 27 +++++++++ .../richblock/InputRichBlockList.kt | 25 +++++++++ .../richblock/InputRichBlockListItem.kt | 49 ++++++++++++++++ .../richblock/InputRichBlockMap.kt | 56 +++++++++++++++++++ .../InputRichBlockMathematicalExpression.kt | 25 +++++++++ .../richblock/InputRichBlockParagraph.kt | 27 +++++++++ .../richblock/InputRichBlockPhoto.kt | 38 +++++++++++++ .../richblock/InputRichBlockPreformatted.kt | 37 ++++++++++++ .../richblock/InputRichBlockPullQuotation.kt | 37 ++++++++++++ .../richblock/InputRichBlockSectionHeading.kt | 30 ++++++++++ .../richblock/InputRichBlockSlideshow.kt | 37 ++++++++++++ .../richblock/InputRichBlockTable.kt | 56 +++++++++++++++++++ .../richblock/InputRichBlockThinking.kt | 27 +++++++++ .../richblock/InputRichBlockType.kt | 25 +++++++++ .../richblock/InputRichBlockVideo.kt | 38 +++++++++++++ .../richblock/InputRichBlockVoiceNote.kt | 38 +++++++++++++ 24 files changed, 810 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt new file mode 100644 index 00000000..95ca2644 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +interface InputRichBlock { + val type: String +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt new file mode 100644 index 00000000..28ba85ec --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnchor.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockAnchor( + @get:JvmName("name") val name: String +) : InputRichBlock { + + override val type: String = InputRichBlockType.ANCHOR + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAnchor + return type == other.type && + name == other.name + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + name.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockAnchor(type=$type, name=$name)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt new file mode 100644 index 00000000..198038d4 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMediaAnimation +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockAnimation private constructor( + @get:JvmName("animation") val animation: InputMediaAnimation, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(animation: InputMediaAnimation) : this( + animation = animation, + caption = null + ) + + override val type: String = InputRichBlockType.ANIMATION + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAnimation + return type == other.type && + animation == other.animation && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + animation.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockAnimation(type=$type, animation=$animation, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt new file mode 100644 index 00000000..66a74a40 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMediaAudio +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockAudio private constructor( + @get:JvmName("audio") val audio: InputMediaAudio, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(audio: InputMediaAudio) : this( + audio = audio, + caption = null + ) + + override val type: String = InputRichBlockType.AUDIO + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockAudio + return type == other.type && + audio == other.audio && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + audio.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockAudio(type=$type, audio=$audio, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt new file mode 100644 index 00000000..0ea46b8c --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockBlockQuotation private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + credit = null + ) + + override val type: String = InputRichBlockType.BLOCKQUOTE + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockBlockQuotation + return type == other.type && + blocks.contentEquals(other.blocks) && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockBlockQuotation(type=$type, blocks=${blocks.contentToString()}, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt new file mode 100644 index 00000000..d9993603 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockCollage private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + caption = null + ) + + override val type: String = InputRichBlockType.COLLAGE + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockCollage + return type == other.type && + blocks.contentEquals(other.blocks) && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockCollage(type=$type, blocks=${blocks.contentToString()}, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt new file mode 100644 index 00000000..7188f4ff --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockDetails private constructor( + @get:JvmName("summary") val summary: RichText, + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("isOpen") var isOpen: Boolean? +) : InputRichBlock { + + constructor(summary: RichText, vararg blocks: InputRichBlock) : this( + summary = summary, + blocks = arrayOf(*blocks), + isOpen = null + ) + + override val type: String = InputRichBlockType.DETAILS + + fun isOpen(isOpen: Boolean) = apply { this.isOpen = isOpen } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDetails + return type == other.type && + summary == other.summary && + blocks.contentEquals(other.blocks) && + isOpen == other.isOpen + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + summary.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (isOpen?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockDetails(type=$type, summary=$summary, blocks=${blocks.contentToString()}, isOpen=$isOpen)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt new file mode 100644 index 00000000..9ed31232 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDivider.kt @@ -0,0 +1,17 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockDivider : InputRichBlock { + + override val type: String = InputRichBlockType.DIVIDER + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDivider + return type == other.type + } + + override fun hashCode(): Int = type.hashCode() + + override fun toString(): String = "InputRichBlockDivider(type=$type)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt new file mode 100644 index 00000000..3b6f4471 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockFooter.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockFooter( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.FOOTER + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockFooter + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockFooter(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt new file mode 100644 index 00000000..c4dd1944 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockList(vararg items: InputRichBlockListItem) : InputRichBlock { + + @get:JvmName("items") val items: Array = arrayOf(*items) + + override val type: String = InputRichBlockType.LIST + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockList + return type == other.type && + items.contentEquals(other.items) + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + items.contentHashCode() + return result + } + + override fun toString(): String = + "InputRichBlockList(type=$type, items=${items.contentToString()})" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt new file mode 100644 index 00000000..f3f1f154 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt @@ -0,0 +1,49 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockListItem private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("hasCheckbox") var hasCheckbox: Boolean?, + @get:JvmName("isChecked") var isChecked: Boolean?, + @get:JvmName("value") var value: Int?, + @get:JvmName("type") var type: String? +) { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + hasCheckbox = null, + isChecked = null, + value = null, + type = null + ) + + fun hasCheckbox(hasCheckbox: Boolean) = apply { this.hasCheckbox = hasCheckbox } + + fun isChecked(isChecked: Boolean) = apply { this.isChecked = isChecked } + + fun value(value: Int) = apply { this.value = value } + + fun type(type: String) = apply { this.type = type } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockListItem + return blocks.contentEquals(other.blocks) && + hasCheckbox == other.hasCheckbox && + isChecked == other.isChecked && + value == other.value && + type == other.type + } + + override fun hashCode(): Int { + var result = blocks.contentHashCode() + result = 31 * result + (hasCheckbox?.hashCode() ?: 0) + result = 31 * result + (isChecked?.hashCode() ?: 0) + result = 31 * result + (value ?: 0) + result = 31 * result + (type?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockListItem(blocks=${blocks.contentToString()}, hasCheckbox=$hasCheckbox, isChecked=$isChecked, value=$value, type=$type)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt new file mode 100644 index 00000000..57af93db --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMap.kt @@ -0,0 +1,56 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.Location +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockMap private constructor( + @get:JvmName("location") val location: Location, + @get:JvmName("zoom") var zoom: Int?, + @get:JvmName("width") var width: Int?, + @get:JvmName("height") var height: Int?, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(location: Location) : this( + location = location, + zoom = null, + width = null, + height = null, + caption = null + ) + + override val type: String = InputRichBlockType.MAP + + fun zoom(zoom: Int) = apply { this.zoom = zoom } + + fun width(width: Int) = apply { this.width = width } + + fun height(height: Int) = apply { this.height = height } + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockMap + return type == other.type && + location == other.location && + zoom == other.zoom && + width == other.width && + height == other.height && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + location.hashCode() + result = 31 * result + (zoom ?: 0) + result = 31 * result + (width ?: 0) + result = 31 * result + (height ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockMap(type=$type, location=$location, zoom=$zoom, width=$width, height=$height, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt new file mode 100644 index 00000000..bedd3504 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockMathematicalExpression.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +class InputRichBlockMathematicalExpression( + @get:JvmName("expression") val expression: String +) : InputRichBlock { + + override val type: String = InputRichBlockType.MATHEMATICAL_EXPRESSION + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockMathematicalExpression + return type == other.type && + expression == other.expression + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + expression.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockMathematicalExpression(type=$type, expression=$expression)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt new file mode 100644 index 00000000..38c36a66 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockParagraph.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockParagraph( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.PARAGRAPH + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockParagraph + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockParagraph(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt new file mode 100644 index 00000000..69d5a7f2 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMediaPhoto +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockPhoto private constructor( + @get:JvmName("photo") val photo: InputMediaPhoto, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(photo: InputMediaPhoto) : this( + photo = photo, + caption = null + ) + + override val type: String = InputRichBlockType.PHOTO + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPhoto + return type == other.type && + photo == other.photo && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + photo.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPhoto(type=$type, photo=$photo, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt new file mode 100644 index 00000000..b846b1fd --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPreformatted.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockPreformatted private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("language") var language: String? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + language = null + ) + + override val type: String = InputRichBlockType.PRE + + fun language(language: String) = apply { this.language = language } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPreformatted + return type == other.type && + text == other.text && + language == other.language + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (language?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPreformatted(type=$type, text=$text, language=$language)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt new file mode 100644 index 00000000..654a5f69 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPullQuotation.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockPullQuotation private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + credit = null + ) + + override val type: String = InputRichBlockType.PULLQUOTE + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockPullQuotation + return type == other.type && + text == other.text && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockPullQuotation(type=$type, text=$text, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt new file mode 100644 index 00000000..b29a68e0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSectionHeading.kt @@ -0,0 +1,30 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockSectionHeading( + @get:JvmName("text") val text: RichText, + @get:JvmName("size") val size: Int +) : InputRichBlock { + + override val type: String = InputRichBlockType.HEADING + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockSectionHeading + return type == other.type && + text == other.text && + size == other.size + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + size + return result + } + + override fun toString(): String = + "InputRichBlockSectionHeading(type=$type, text=$text, size=$size)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt new file mode 100644 index 00000000..08d62088 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockSlideshow private constructor( + @get:JvmName("blocks") val blocks: Array, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(vararg blocks: InputRichBlock) : this( + blocks = arrayOf(*blocks), + caption = null + ) + + override val type: String = InputRichBlockType.SLIDESHOW + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockSlideshow + return type == other.type && + blocks.contentEquals(other.blocks) && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + blocks.contentHashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockSlideshow(type=$type, blocks=${blocks.contentToString()}, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt new file mode 100644 index 00000000..e2632358 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockTable.kt @@ -0,0 +1,56 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockTableCell +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockTable private constructor( + @get:JvmName("cells") val cells: Array>, + @get:JvmName("isBordered") var isBordered: Boolean?, + @get:JvmName("isStriped") var isStriped: Boolean?, + @get:JvmName("isCompact") var isCompact: Boolean?, + @get:JvmName("caption") var caption: RichText? +) : InputRichBlock { + + constructor(cells: Array>) : this( + cells = cells, + isBordered = null, + isStriped = null, + isCompact = null, + caption = null + ) + + override val type: String = InputRichBlockType.TABLE + + fun isBordered(isBordered: Boolean) = apply { this.isBordered = isBordered } + + fun isStriped(isStriped: Boolean) = apply { this.isStriped = isStriped } + + fun isCompact(isCompact: Boolean) = apply { this.isCompact = isCompact } + + fun caption(caption: RichText) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockTable + return type == other.type && + cells.contentDeepEquals(other.cells) && + isBordered == other.isBordered && + isStriped == other.isStriped && + isCompact == other.isCompact && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + cells.contentDeepHashCode() + result = 31 * result + (isBordered?.hashCode() ?: 0) + result = 31 * result + (isStriped?.hashCode() ?: 0) + result = 31 * result + (isCompact?.hashCode() ?: 0) + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockTable(type=$type, cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, isCompact=$isCompact, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt new file mode 100644 index 00000000..a98b43a1 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockThinking.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockThinking( + @get:JvmName("text") val text: RichText +) : InputRichBlock { + + override val type: String = InputRichBlockType.THINKING + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockThinking + return type == other.type && + text == other.text + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + return result + } + + override fun toString(): String = + "InputRichBlockThinking(type=$type, text=$text)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt new file mode 100644 index 00000000..ef48926a --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt @@ -0,0 +1,25 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +object InputRichBlockType { + const val PARAGRAPH = "paragraph" + const val HEADING = "heading" + const val PRE = "pre" + const val FOOTER = "footer" + const val DIVIDER = "divider" + const val MATHEMATICAL_EXPRESSION = "mathematical_expression" + const val ANCHOR = "anchor" + const val LIST = "list" + const val BLOCKQUOTE = "blockquote" + const val PULLQUOTE = "pullquote" + const val COLLAGE = "collage" + const val SLIDESHOW = "slideshow" + const val TABLE = "table" + const val DETAILS = "details" + const val MAP = "map" + const val ANIMATION = "animation" + const val AUDIO = "audio" + const val PHOTO = "photo" + const val VIDEO = "video" + const val VOICE_NOTE = "voice_note" + const val THINKING = "thinking" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt new file mode 100644 index 00000000..60bd746d --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMediaVideo +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockVideo private constructor( + @get:JvmName("video") val video: InputMediaVideo, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(video: InputMediaVideo) : this( + video = video, + caption = null + ) + + override val type: String = InputRichBlockType.VIDEO + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockVideo + return type == other.type && + video == other.video && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + video.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockVideo(type=$type, video=$video, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt new file mode 100644 index 00000000..e1c42aef --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMediaVoiceNote +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockVoiceNote private constructor( + @get:JvmName("voiceNote") val voiceNote: InputMediaVoiceNote, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(voiceNote: InputMediaVoiceNote) : this( + voiceNote = voiceNote, + caption = null + ) + + override val type: String = InputRichBlockType.VOICE_NOTE + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockVoiceNote + return type == other.type && + voiceNote == other.voiceNote && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + voiceNote.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockVoiceNote(type=$type, voiceNote=$voiceNote, caption=$caption)" +} From 447a72cfdf2781619e00826bf85e3495be887910 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 19:42:04 +0200 Subject: [PATCH 05/38] multipart upload support for rich message media --- .../request/richmessages/InputRichMessage.kt | 7 +++++ .../telegrambot/request/EditMessageText.java | 26 +++++++++++++++++++ .../request/richmessages/SendRichMessage.kt | 18 +++++++++++++ .../richmessages/SendRichMessageDraft.kt | 18 +++++++++++++ 4 files changed, 69 insertions(+) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt index ad761470..8e274522 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model.request.richmessages +import com.pengrad.telegrambot.model.request.InputMedia + class InputRichMessage private constructor( @get:JvmName("html") var html: String?, @get:JvmName("markdown") var markdown: String?, @@ -26,6 +28,11 @@ class InputRichMessage private constructor( fun skipEntityDetection(skipEntityDetection: Boolean) = apply { this.skipEntityDetection = skipEntityDetection } + /** + * All the media carried by this rich message, for requests that have to upload them. + */ + fun inputMedia(): List> = media?.map { it.media } ?: emptyList() + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java index 4a3aeb28..6d461448 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageText.java @@ -3,17 +3,22 @@ import com.pengrad.telegrambot.model.LinkPreviewOptions; import com.pengrad.telegrambot.model.MessageEntity; import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; +import com.pengrad.telegrambot.model.request.InputMedia; import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage; import com.pengrad.telegrambot.response.BaseResponse; import com.pengrad.telegrambot.response.SendResponse; +import java.util.Map; + /** * Stas Parshin * 07 May 2016 */ public class EditMessageText extends BaseRequest { + private boolean isMultipart = false; + public EditMessageText(Object chatId, int messageId, String text) { super(SendResponse.class); add("chat_id", chatId).add("message_id", messageId).add("text", text); @@ -27,11 +32,32 @@ public EditMessageText(String inlineMessageId, String text) { public EditMessageText(Object chatId, int messageId, InputRichMessage richMessage) { super(SendResponse.class); add("chat_id", chatId).add("message_id", messageId).add("rich_message", richMessage); + addAttachments(richMessage); } public EditMessageText(String inlineMessageId, InputRichMessage richMessage) { super(BaseResponse.class); add("inline_message_id", inlineMessageId).add("rich_message", richMessage); + addAttachments(richMessage); + } + + private void addAttachments(InputRichMessage richMessage) { + for (InputMedia m : richMessage.inputMedia()) { + Map attachments = m.getAttachments(); + if (attachments != null && attachments.size() > 0) { + addAll(attachments); + isMultipart = true; + } + if (m.inputFile() != null) { + add(m.getInputFileId(), m.inputFile()); + isMultipart = true; + } + } + } + + @Override + public boolean isMultipart() { + return isMultipart; } public EditMessageText parseMode(ParseMode parseMode) { 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 72fa1f9f..eee0ed91 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 @@ -37,4 +37,22 @@ class SendRichMessage private constructor( } val richMessage: InputRichMessage by requestParameter(richMessage) + + private var multipart = false + + init { + for (media in richMessage.inputMedia()) { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + override fun isMultipart() = multipart } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt index 5285729d..d538c26b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt @@ -20,4 +20,22 @@ class SendRichMessageDraft( var messageThreadId: Long? by optionalRequestParameter() fun messageThreadId(messageThreadId: Long) = applySelf { this.messageThreadId = messageThreadId } + + private var multipart = false + + init { + for (media in richMessage.inputMedia()) { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + override fun isMultipart() = multipart } From 8b3a8c005cddb9f6b02a042944d7f0979014ed57 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 19:43:06 +0200 Subject: [PATCH 06/38] Added the field blocks to the class InputRichMessage, allowing bots to specify rich message formatting via block entities. --- .../request/richmessages/InputRichMessage.kt | 16 ++++++++++++---- .../richmessages/richblock/InputRichBlock.kt | 7 +++++++ .../richblock/InputRichBlockAnimation.kt | 3 +++ .../richblock/InputRichBlockAudio.kt | 3 +++ .../richblock/InputRichBlockBlockQuotation.kt | 3 +++ .../richblock/InputRichBlockCollage.kt | 3 +++ .../richblock/InputRichBlockDetails.kt | 3 +++ .../richmessages/richblock/InputRichBlockList.kt | 4 ++++ .../richblock/InputRichBlockListItem.kt | 7 +++++++ .../richblock/InputRichBlockPhoto.kt | 3 +++ .../richblock/InputRichBlockSlideshow.kt | 3 +++ .../richblock/InputRichBlockVideo.kt | 3 +++ .../richblock/InputRichBlockVoiceNote.kt | 3 +++ 13 files changed, 57 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt index 8e274522..f7850424 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/InputRichMessage.kt @@ -1,8 +1,10 @@ package com.pengrad.telegrambot.model.request.richmessages import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.richmessages.richblock.InputRichBlock class InputRichMessage private constructor( + @get:JvmName("blocks") var blocks: Array?, @get:JvmName("html") var html: String?, @get:JvmName("markdown") var markdown: String?, @get:JvmName("media") var media: Array?, @@ -11,6 +13,7 @@ class InputRichMessage private constructor( ) { constructor() : this( + blocks = null, html = null, markdown = null, media = null, @@ -18,6 +21,8 @@ class InputRichMessage private constructor( skipEntityDetection = null ) + fun blocks(vararg blocks: InputRichBlock) = apply { this.blocks = arrayOf(*blocks) } + fun html(html: String) = apply { this.html = html } fun markdown(markdown: String) = apply { this.markdown = markdown } @@ -31,13 +36,15 @@ class InputRichMessage private constructor( /** * All the media carried by this rich message, for requests that have to upload them. */ - fun inputMedia(): List> = media?.map { it.media } ?: emptyList() + fun inputMedia(): List> = + (media?.map { it.media } ?: emptyList()) + (blocks?.flatMap { it.inputMedia() } ?: emptyList()) override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as InputRichMessage - return html == other.html && + return blocks.contentEquals(other.blocks) && + html == other.html && markdown == other.markdown && media.contentEquals(other.media) && isRtl == other.isRtl && @@ -45,7 +52,8 @@ class InputRichMessage private constructor( } override fun hashCode(): Int { - var result = html?.hashCode() ?: 0 + var result = blocks?.contentHashCode() ?: 0 + result = 31 * result + (html?.hashCode() ?: 0) result = 31 * result + (markdown?.hashCode() ?: 0) result = 31 * result + (media?.contentHashCode() ?: 0) result = 31 * result + (isRtl?.hashCode() ?: 0) @@ -54,5 +62,5 @@ class InputRichMessage private constructor( } override fun toString(): String = - "InputRichMessage(html=$html, markdown=$markdown, media=${media?.contentToString()}, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" + "InputRichMessage(blocks=${blocks?.contentToString()}, html=$html, markdown=$markdown, media=${media?.contentToString()}, isRtl=$isRtl, skipEntityDetection=$skipEntityDetection)" } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt index 95ca2644..5c3cf815 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlock.kt @@ -1,5 +1,12 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia + interface InputRichBlock { val type: String + + /** + * The media carried by this block, for requests that have to upload them. + */ + fun inputMedia(): List> = emptyList() } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt index 198038d4..cbb83df2 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAnimation.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.request.InputMediaAnimation import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption @@ -15,6 +16,8 @@ class InputRichBlockAnimation private constructor( override val type: String = InputRichBlockType.ANIMATION + override fun inputMedia(): List> = listOf(animation) + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt index 66a74a40..2b001c4a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockAudio.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.request.InputMediaAudio import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption @@ -15,6 +16,8 @@ class InputRichBlockAudio private constructor( override val type: String = InputRichBlockType.AUDIO + override fun inputMedia(): List> = listOf(audio) + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt index 0ea46b8c..de9aad64 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockBlockQuotation.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.richmessages.richtext.RichText class InputRichBlockBlockQuotation private constructor( @@ -14,6 +15,8 @@ class InputRichBlockBlockQuotation private constructor( override val type: String = InputRichBlockType.BLOCKQUOTE + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + fun credit(credit: RichText) = apply { this.credit = credit } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt index d9993603..7d03f375 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockCollage.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption class InputRichBlockCollage private constructor( @@ -14,6 +15,8 @@ class InputRichBlockCollage private constructor( override val type: String = InputRichBlockType.COLLAGE + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt index 7188f4ff..f855cabf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDetails.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.richmessages.richtext.RichText class InputRichBlockDetails private constructor( @@ -16,6 +17,8 @@ class InputRichBlockDetails private constructor( override val type: String = InputRichBlockType.DETAILS + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + fun isOpen(isOpen: Boolean) = apply { this.isOpen = isOpen } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt index c4dd1944..ce270d07 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockList.kt @@ -1,11 +1,15 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia + class InputRichBlockList(vararg items: InputRichBlockListItem) : InputRichBlock { @get:JvmName("items") val items: Array = arrayOf(*items) override val type: String = InputRichBlockType.LIST + override fun inputMedia(): List> = items.flatMap { it.inputMedia() } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt index f3f1f154..97b41784 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockListItem.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia + class InputRichBlockListItem private constructor( @get:JvmName("blocks") val blocks: Array, @get:JvmName("hasCheckbox") var hasCheckbox: Boolean?, @@ -24,6 +26,11 @@ class InputRichBlockListItem private constructor( fun type(type: String) = apply { this.type = type } + /** + * The media carried by the blocks of this item, for requests that have to upload them. + */ + fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt index 69d5a7f2..43e684d7 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockPhoto.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.request.InputMediaPhoto import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption @@ -15,6 +16,8 @@ class InputRichBlockPhoto private constructor( override val type: String = InputRichBlockType.PHOTO + override fun inputMedia(): List> = listOf(photo) + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt index 08d62088..09984a0c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockSlideshow.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption class InputRichBlockSlideshow private constructor( @@ -14,6 +15,8 @@ class InputRichBlockSlideshow private constructor( override val type: String = InputRichBlockType.SLIDESHOW + override fun inputMedia(): List> = blocks.flatMap { it.inputMedia() } + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt index 60bd746d..d4b8968d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVideo.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.request.InputMediaVideo import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption @@ -15,6 +16,8 @@ class InputRichBlockVideo private constructor( override val type: String = InputRichBlockType.VIDEO + override fun inputMedia(): List> = listOf(video) + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt index e1c42aef..ef832326 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockVoiceNote.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.model.request.richmessages.richblock +import com.pengrad.telegrambot.model.request.InputMedia import com.pengrad.telegrambot.model.request.InputMediaVoiceNote import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption @@ -15,6 +16,8 @@ class InputRichBlockVoiceNote private constructor( override val type: String = InputRichBlockType.VOICE_NOTE + override fun inputMedia(): List> = listOf(voiceNote) + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } override fun equals(other: Any?): Boolean { From 4856d631a95dfed59403828d8eb924fb72db810c Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 19:44:49 +0200 Subject: [PATCH 07/38] Added the field is_ephemeral to the class BotCommand --- .../com/pengrad/telegrambot/model/BotCommand.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java b/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java index 417b2fff..27bef3cf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/BotCommand.java @@ -18,6 +18,7 @@ public BotCommand(String command, String description) { private String command; private String description; + private Boolean is_ephemeral; public String command() { return command; @@ -27,6 +28,15 @@ public String description() { return description; } + public Boolean isEphemeral() { + return is_ephemeral; + } + + public BotCommand isEphemeral(Boolean isEphemeral) { + this.is_ephemeral = isEphemeral; + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -35,13 +45,15 @@ public boolean equals(Object o) { BotCommand that = (BotCommand) o; if (command != null ? !command.equals(that.command) : that.command != null) return false; - return description != null ? description.equals(that.description) : that.description == null; + if (description != null ? !description.equals(that.description) : that.description != null) return false; + return is_ephemeral != null ? is_ephemeral.equals(that.is_ephemeral) : that.is_ephemeral == null; } @Override public int hashCode() { int result = command != null ? command.hashCode() : 0; result = 31 * result + (description != null ? description.hashCode() : 0); + result = 31 * result + (is_ephemeral != null ? is_ephemeral.hashCode() : 0); return result; } @@ -50,6 +62,7 @@ public String toString() { return "BotCommand{" + "command='" + command + '\'' + ", description='" + description + '\'' + + ", is_ephemeral=" + is_ephemeral + '}'; } } From 18b61a3612d3fcbd5e6be1695d6c51a8b738d15a Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 19:53:13 +0200 Subject: [PATCH 08/38] Added the field receiver_user to the class Message --- .../main/java/com/pengrad/telegrambot/model/Message.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 8aebc1b0..938341d1 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -37,6 +37,7 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private Long message_thread_id; private DirectMessagesTopic direct_messages_topic; private User from; + private User receiver_user; private Chat sender_chat; private String sender_tag; private Integer sender_boost_count; @@ -159,6 +160,10 @@ public User from() { return from; } + public User receiverUser() { + return receiver_user; + } + public Chat senderChat() { return sender_chat; } @@ -626,6 +631,7 @@ public boolean equals(Object o) { Objects.equals(message_thread_id, message.message_thread_id) && Objects.equals(direct_messages_topic, message.direct_messages_topic) && Objects.equals(from, message.from) && + Objects.equals(receiver_user, message.receiver_user) && Objects.equals(sender_chat, message.sender_chat) && Objects.equals(sender_tag, message.sender_tag) && Objects.equals(sender_boost_count, message.sender_boost_count) && @@ -751,6 +757,7 @@ public String toString() { ", message_thread_id=" + message_thread_id + ", direct_messages_topic=" + direct_messages_topic + ", from=" + from + + ", receiver_user=" + receiver_user + ", sender_chat=" + sender_chat + ", sender_tag='" + sender_tag + '\'' + ", sender_boost_count=" + sender_boost_count + From 550bf0780eb32e9257f42945452ac815504abbc4 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 19:53:50 +0200 Subject: [PATCH 09/38] Added the field ephemeral_message_id to the class Message --- .../main/java/com/pengrad/telegrambot/model/Message.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 938341d1..87e8a160 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -38,6 +38,7 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private DirectMessagesTopic direct_messages_topic; private User from; private User receiver_user; + private Long ephemeral_message_id; private Chat sender_chat; private String sender_tag; private Integer sender_boost_count; @@ -164,6 +165,10 @@ public User receiverUser() { return receiver_user; } + public Long ephemeralMessageId() { + return ephemeral_message_id; + } + public Chat senderChat() { return sender_chat; } @@ -632,6 +637,7 @@ public boolean equals(Object o) { Objects.equals(direct_messages_topic, message.direct_messages_topic) && Objects.equals(from, message.from) && Objects.equals(receiver_user, message.receiver_user) && + Objects.equals(ephemeral_message_id, message.ephemeral_message_id) && Objects.equals(sender_chat, message.sender_chat) && Objects.equals(sender_tag, message.sender_tag) && Objects.equals(sender_boost_count, message.sender_boost_count) && @@ -758,6 +764,7 @@ public String toString() { ", direct_messages_topic=" + direct_messages_topic + ", from=" + from + ", receiver_user=" + receiver_user + + ", ephemeral_message_id=" + ephemeral_message_id + ", sender_chat=" + sender_chat + ", sender_tag='" + sender_tag + '\'' + ", sender_boost_count=" + sender_boost_count + From 3008cb2bc29bd1fe44d8e13a2708816b2536dcc9 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:01:17 +0200 Subject: [PATCH 10/38] Added the field ephemeral_message_id to the class ReplyParameters, allowing bots to reply to ephemeral messages --- .../telegrambot/model/request/ReplyParameters.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 cbac3a11..4d0dc873 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 @@ -9,6 +9,7 @@ public class ReplyParameters implements Serializable { private final static long serialVersionUID = 0L; private Integer message_id; + private Long ephemeral_message_id; private Object chat_id; private Boolean allow_sending_without_reply; private String quote; @@ -18,6 +19,8 @@ public class ReplyParameters implements Serializable { private Integer checklist_task_id; private String poll_option_id; + public ReplyParameters() {} + public ReplyParameters(Integer messageId) { this.message_id = messageId; } @@ -27,6 +30,16 @@ public ReplyParameters(Integer messageId, Object chatId) { this.chat_id = chatId; } + public ReplyParameters messageId(Integer messageId) { + this.message_id = messageId; + return this; + } + + public ReplyParameters ephemeralMessageId(Long ephemeralMessageId) { + this.ephemeral_message_id = ephemeralMessageId; + return this; + } + public ReplyParameters allowSendingWithoutReply(Boolean allowSendingWithoutReply) { this.allow_sending_without_reply = allowSendingWithoutReply; return this; From a4b7a39c453d8c08802fc020779405cdd92a74e2 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:26:02 +0200 Subject: [PATCH 11/38] Added the methods editEphemeralMessageText, editEphemeralMessageMedia, editEphemeralMessageCaption, and editEphemeralMessageReplyMarkup allowing bots to edit ephemeral messages --- .../ephemeral/EditEphemeralMessageCaption.kt | 55 +++++++++++ .../ephemeral/EditEphemeralMessageMedia.kt | 64 ++++++++++++ .../EditEphemeralMessageReplyMarkup.kt | 39 ++++++++ .../ephemeral/EditEphemeralMessageText.kt | 98 +++++++++++++++++++ 4 files changed, 256 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt new file mode 100644 index 00000000..27cbe8d0 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageCaption.kt @@ -0,0 +1,55 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.ParseMode +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 + +class EditEphemeralMessageCaption private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + + var caption: String? by optionalRequestParameter() + var parseMode: ParseMode? by optionalRequestParameter() + var captionEntities: List? by optionalRequestParameter() + var showCaptionAboveMedia: Boolean? by optionalRequestParameter() + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + 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 replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt new file mode 100644 index 00000000..974b9af9 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageMedia.kt @@ -0,0 +1,64 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.InputMedia +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 + +class EditEphemeralMessageMedia private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*> +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, media: InputMedia<*>) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + media = media + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, media: InputMedia<*>) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + media = media + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + val media: InputMedia<*> by requestParameter(media) + + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + private var multipart = false + + init { + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + + override fun isMultipart() = multipart + + override fun getFileName(): String = media.fileName + + override fun getContentType(): String = media.contentType + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt new file mode 100644 index 00000000..e8154537 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageReplyMarkup.kt @@ -0,0 +1,39 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +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 + +class EditEphemeralMessageReplyMarkup private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + +} diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt new file mode 100644 index 00000000..2bec4408 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/EditEphemeralMessageText.kt @@ -0,0 +1,98 @@ +package com.pengrad.telegrambot.request.ephemeral + +import com.pengrad.telegrambot.model.LinkPreviewOptions +import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +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 + +class EditEphemeralMessageText private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String?, + richMessage: InputRichMessage? +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, text: String) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = text, + richMessage = null + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, text: String) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = text, + richMessage = null + ) + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long, richMessage: InputRichMessage) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = null, + richMessage = richMessage + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long, richMessage: InputRichMessage) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId, + text = null, + richMessage = richMessage + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + val text: String? by optionalRequestParameter(text) + val richMessage: InputRichMessage? by optionalRequestParameter(richMessage) + + var parseMode: ParseMode? by optionalRequestParameter() + var entities: List? by optionalRequestParameter() + var linkPreviewOptions: LinkPreviewOptions? by optionalRequestParameter() + var replyMarkup: InlineKeyboardMarkup? by optionalRequestParameter() + + private var multipart = false + + init { + richMessage?.inputMedia()?.forEach { media -> + val attachments = media.attachments + if (attachments != null && attachments.isNotEmpty()) { + addAll(attachments) + multipart = true + } + media.inputFile()?.let { + add(media.inputFileId, it) + multipart = true + } + } + } + + fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } + + fun entities(entities: List) = applySelf { this.entities = entities } + + fun entities(vararg entities: MessageEntity) = entities(entities.toList()) + + fun linkPreviewOptions(linkPreviewOptions: LinkPreviewOptions) = applySelf { this.linkPreviewOptions = linkPreviewOptions } + + fun replyMarkup(replyMarkup: InlineKeyboardMarkup) = applySelf { this.replyMarkup = replyMarkup } + + override fun isMultipart() = multipart + +} From 18aba1c750bad618119bf848f5441e6658b6a368 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:26:56 +0200 Subject: [PATCH 12/38] Added the method deleteEphemeralMessage allowing bots to delete ephemeral messages --- .../ephemeral/DeleteEphemeralMessage.kt | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt new file mode 100644 index 00000000..4160dbb4 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/request/ephemeral/DeleteEphemeralMessage.kt @@ -0,0 +1,34 @@ +package com.pengrad.telegrambot.request.ephemeral + +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 + +class DeleteEphemeralMessage private constructor( + chatId: Long?, + channelUsername: String?, + receiverUserId: Long, + ephemeralMessageId: Long +) : KBaseRequest(BaseResponse::class) { + + constructor(chatId: Long, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = chatId, + channelUsername = null, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + constructor(channelUsername: String, receiverUserId: Long, ephemeralMessageId: Long) : this( + chatId = null, + channelUsername = channelUsername, + receiverUserId = receiverUserId, + ephemeralMessageId = ephemeralMessageId + ) + + val chatId: Long? by optionalRequestParameter(chatId, customParameterName = "chat_id") + val channelUsername: String? by optionalRequestParameter(channelUsername, customParameterName = "chat_id") + val receiverUserId: Long by requestParameter(receiverUserId) + val ephemeralMessageId: Long by requestParameter(ephemeralMessageId) + +} From 9deeaa19070d1cffe30bce8a869a4c8efa98d5ee Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:27:47 +0200 Subject: [PATCH 13/38] Added the class Community which represents a community --- .../main/java/com/pengrad/telegrambot/model/Community.kt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/Community.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Community.kt b/library/src/main/java/com/pengrad/telegrambot/model/Community.kt new file mode 100644 index 00000000..d61a6408 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/Community.kt @@ -0,0 +1,6 @@ +package com.pengrad.telegrambot.model + +data class Community( + @get:JvmName("id") val id: Long, + @get:JvmName("name") val name: String, +) From 1f0270124a30c780613c5c17e8ff109746111e9d Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:28:40 +0200 Subject: [PATCH 14/38] Added the class CommunityChatAdded and the field community_chat_added to the class Message --- .../com/pengrad/telegrambot/model/CommunityChatAdded.kt | 5 +++++ .../main/java/com/pengrad/telegrambot/model/Message.java | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt new file mode 100644 index 00000000..d5344def --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatAdded.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model + +data class CommunityChatAdded( + @get:JvmName("community") val community: Community, +) 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 87e8a160..bed2984d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -148,6 +148,7 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private User guest_bot_caller_user; private Chat guest_bot_caller_chat; private String guest_query_id; + private CommunityChatAdded community_chat_added; public Long messageThreadId() { return message_thread_id; @@ -594,6 +595,10 @@ public String replyToPollOptionId() { return reply_to_poll_option_id; } + public CommunityChatAdded communityChatAdded() { + return community_chat_added; + } + public User guestBotCallerUser() { return guest_bot_caller_user; } @@ -748,7 +753,8 @@ public boolean equals(Object o) { Objects.equals(reply_to_poll_option_id, message.reply_to_poll_option_id) && Objects.equals(guest_bot_caller_user, message.guest_bot_caller_user) && Objects.equals(guest_bot_caller_chat, message.guest_bot_caller_chat) && - Objects.equals(guest_query_id, message.guest_query_id); + Objects.equals(guest_query_id, message.guest_query_id) && + Objects.equals(community_chat_added, message.community_chat_added); } @Override @@ -876,6 +882,7 @@ public String toString() { ", guest_bot_caller_user=" + guest_bot_caller_user + ", guest_bot_caller_chat=" + guest_bot_caller_chat + ", guest_query_id='" + guest_query_id + '\'' + + ", community_chat_added=" + community_chat_added + '}'; } } From 375b640066de4f73fb9640c26ec618da5cb20d8d Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:30:01 +0200 Subject: [PATCH 15/38] Added the class CommunityChatRemoved and the field community_chat_removed to the class Message --- .../pengrad/telegrambot/model/CommunityChatRemoved.kt | 11 +++++++++++ .../java/com/pengrad/telegrambot/model/Message.java | 9 ++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt new file mode 100644 index 00000000..01544322 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatRemoved.kt @@ -0,0 +1,11 @@ +package com.pengrad.telegrambot.model + +class CommunityChatRemoved { + + 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/Message.java b/library/src/main/java/com/pengrad/telegrambot/model/Message.java index bed2984d..52c7c2b6 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -149,6 +149,7 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private Chat guest_bot_caller_chat; private String guest_query_id; private CommunityChatAdded community_chat_added; + private CommunityChatRemoved community_chat_removed; public Long messageThreadId() { return message_thread_id; @@ -599,6 +600,10 @@ public CommunityChatAdded communityChatAdded() { return community_chat_added; } + public CommunityChatRemoved communityChatRemoved() { + return community_chat_removed; + } + public User guestBotCallerUser() { return guest_bot_caller_user; } @@ -754,7 +759,8 @@ public boolean equals(Object o) { Objects.equals(guest_bot_caller_user, message.guest_bot_caller_user) && Objects.equals(guest_bot_caller_chat, message.guest_bot_caller_chat) && Objects.equals(guest_query_id, message.guest_query_id) && - Objects.equals(community_chat_added, message.community_chat_added); + Objects.equals(community_chat_added, message.community_chat_added) && + Objects.equals(community_chat_removed, message.community_chat_removed); } @Override @@ -883,6 +889,7 @@ public String toString() { ", guest_bot_caller_chat=" + guest_bot_caller_chat + ", guest_query_id='" + guest_query_id + '\'' + ", community_chat_added=" + community_chat_added + + ", community_chat_removed=" + community_chat_removed + '}'; } } From d8de8742728887e2305b559579c847ea77aa5d1f Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:36:58 +0200 Subject: [PATCH 16/38] Added the field community to the class ChatFullInfo --- .../java/com/pengrad/telegrambot/model/ChatFullInfo.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 8de790db..b1dca42a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatFullInfo.java @@ -80,6 +80,7 @@ public enum Type { private UniqueGiftColors unique_gift_colors; private Audio first_profile_audio; private User guard_bot; + private Community community; public Long id() { return id; @@ -288,6 +289,10 @@ public User guardBot() { return guard_bot; } + public Community community() { + return community; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -344,7 +349,8 @@ public boolean equals(Object o) { Objects.equals(paid_message_star_count, chat.paid_message_star_count) && 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(guard_bot, chat.guard_bot) && + Objects.equals(community, chat.community); } @Override @@ -407,6 +413,7 @@ public String toString() { ", unique_gift_colors=" + unique_gift_colors + ", first_profile_audio=" + first_profile_audio + ", guard_bot=" + guard_bot + + ", community=" + community + '}'; } } From 9674ee07ecb85276bf6a3b544764e83ce0aebf02 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:37:56 +0200 Subject: [PATCH 17/38] Added updates about changes to a user payment subscription, represented by the class BotSubscriptionUpdated and the field subscription in the class Update --- .../pengrad/telegrambot/model/BotSubscriptionUpdated.kt | 9 +++++++++ .../main/java/com/pengrad/telegrambot/model/Update.java | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt b/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt new file mode 100644 index 00000000..f319bbd3 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/BotSubscriptionUpdated.kt @@ -0,0 +1,9 @@ +package com.pengrad.telegrambot.model + +import java.io.Serializable + +data class BotSubscriptionUpdated( + @get:JvmName("user") val user: User, + @get:JvmName("invoicePayload") val invoicePayload: String, + @get:JvmName("state") val state: String, +) : Serializable 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 ffd68e65..2038c3c8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Update.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Update.java @@ -42,6 +42,7 @@ public class Update implements Serializable { private PaidMediaPurchased purchased_paid_media; private ManagedBotUpdated managed_bot; private Message guest_message; + private BotSubscriptionUpdated subscription; public Integer updateId() { return update_id; @@ -147,6 +148,10 @@ public Message guestMessage() { return guest_message; } + public BotSubscriptionUpdated subscription() { + return subscription; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -177,7 +182,8 @@ public boolean equals(Object o) { Objects.equals(removed_chat_boost, update.removed_chat_boost) && Objects.equals(purchased_paid_media, update.purchased_paid_media) && Objects.equals(managed_bot, update.managed_bot) && - Objects.equals(guest_message, update.guest_message); + Objects.equals(guest_message, update.guest_message) && + Objects.equals(subscription, update.subscription); } @Override @@ -214,6 +220,7 @@ public String toString() { ", purchased_paid_media=" + purchased_paid_media + ", managed_bot=" + managed_bot + ", guest_message=" + guest_message + + ", subscription=" + subscription + '}'; } } From 746b6440b66fcbdf552829fa06d99ecdd5be4a8a Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:52:05 +0200 Subject: [PATCH 18/38] Added missing Kotlin methods extensions --- .../DeleteEphemeralMessageExtension.kt | 19 +++++++++ .../EditEphemeralMessageCaptionExtension.kt | 27 +++++++++++++ .../EditEphemeralMessageMediaExtension.kt | 22 ++++++++++ ...ditEphemeralMessageReplyMarkupExtension.kt | 40 +++++++++++++++++++ .../EditEphemeralMessageTextExtension.kt | 38 ++++++++++++++++++ 5 files changed, 146 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt new file mode 100644 index 00000000..922d6941 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/DeleteEphemeralMessageExtension.kt @@ -0,0 +1,19 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.ephemeral.DeleteEphemeralMessage +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.deleteEphemeralMessage( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: DeleteEphemeralMessage.() -> Unit = {} +) = this.execute(DeleteEphemeralMessage(chatId, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.deleteEphemeralMessage( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: DeleteEphemeralMessage.() -> Unit = {} +) = this.execute(DeleteEphemeralMessage(channelUsername, receiverUserId, ephemeralMessageId), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt new file mode 100644 index 00000000..69d11161 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageCaptionExtension.kt @@ -0,0 +1,27 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageCaption +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageCaption( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + caption: String, + modifier: EditEphemeralMessageCaption.() -> Unit = {} +) = this.execute(EditEphemeralMessageCaption(chatId, receiverUserId, ephemeralMessageId)) { + caption(caption) + modifier() +} + +inline fun TelegramAware.editEphemeralMessageCaption( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + caption: String, + modifier: EditEphemeralMessageCaption.() -> Unit = {} +) = this.execute(EditEphemeralMessageCaption(channelUsername, receiverUserId, ephemeralMessageId)) { + caption(caption) + modifier() +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt new file mode 100644 index 00000000..b57513a3 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageMediaExtension.kt @@ -0,0 +1,22 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageMedia +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageMedia( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*>, + modifier: EditEphemeralMessageMedia.() -> Unit = {} +) = this.execute(EditEphemeralMessageMedia(chatId, receiverUserId, ephemeralMessageId, media), modifier) + +inline fun TelegramAware.editEphemeralMessageMedia( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + media: InputMedia<*>, + modifier: EditEphemeralMessageMedia.() -> Unit = {} +) = this.execute(EditEphemeralMessageMedia(channelUsername, receiverUserId, ephemeralMessageId, media), modifier) diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt new file mode 100644 index 00000000..9ea5751a --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageReplyMarkupExtension.kt @@ -0,0 +1,40 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageReplyMarkup +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageReplyMarkup( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.execute(EditEphemeralMessageReplyMarkup(chatId, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.editEphemeralMessageReplyMarkup( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.execute(EditEphemeralMessageReplyMarkup(channelUsername, receiverUserId, ephemeralMessageId), modifier) + +inline fun TelegramAware.removeEphemeralInlineKeyboard( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.editEphemeralMessageReplyMarkup(chatId, receiverUserId, ephemeralMessageId) { + replyMarkup(InlineKeyboardMarkup()) + modifier() +} + +inline fun TelegramAware.removeEphemeralInlineKeyboard( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + modifier: EditEphemeralMessageReplyMarkup.() -> Unit = {} +) = this.editEphemeralMessageReplyMarkup(channelUsername, receiverUserId, ephemeralMessageId) { + replyMarkup(InlineKeyboardMarkup()) + modifier() +} diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt new file mode 100644 index 00000000..321048ed --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/utility/kotlin/extension/request/EditEphemeralMessageTextExtension.kt @@ -0,0 +1,38 @@ +package com.pengrad.telegrambot.utility.kotlin.extension.request + +import com.pengrad.telegrambot.TelegramAware +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +import com.pengrad.telegrambot.request.ephemeral.EditEphemeralMessageText +import com.pengrad.telegrambot.utility.kotlin.extension.execute + +inline fun TelegramAware.editEphemeralMessageText( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(chatId, receiverUserId, ephemeralMessageId, text), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + text: String, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(channelUsername, receiverUserId, ephemeralMessageId, text), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + chatId: Long, + receiverUserId: Long, + ephemeralMessageId: Long, + richMessage: InputRichMessage, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(chatId, receiverUserId, ephemeralMessageId, richMessage), modifier) + +inline fun TelegramAware.editEphemeralMessageText( + channelUsername: String, + receiverUserId: Long, + ephemeralMessageId: Long, + richMessage: InputRichMessage, + modifier: EditEphemeralMessageText.() -> Unit = {} +) = this.execute(EditEphemeralMessageText(channelUsername, receiverUserId, ephemeralMessageId, richMessage), modifier) From d63f3661d54c6ef8af91d5b9dbf4c8ad9478472f Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:52:13 +0200 Subject: [PATCH 19/38] Added missing Location constructor --- .../main/java/com/pengrad/telegrambot/model/Location.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/Location.java b/library/src/main/java/com/pengrad/telegrambot/model/Location.java index ae2f319c..0f136708 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Location.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Location.java @@ -17,6 +17,14 @@ public class Location implements Serializable { private Integer heading; private Integer proximity_alert_radius; + private Location() { + } + + public Location(Float latitude, Float longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + public Float longitude() { return longitude; } From 62b5a3188b5eb2de3e187f117c2d5267046c1a03 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:52:22 +0200 Subject: [PATCH 20/38] Bump version to 10.2 --- README.md | 6 +++--- gradle.properties | 2 +- pom.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1e6c446c..ef63e954 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.1 methods +- Full support of all Bot API 10.2 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.1.0' +implementation 'com.github.pengrad:java-telegram-bot-api:10.2.0' ``` Maven: ```xml com.github.pengrad java-telegram-bot-api - 10.1.0 + 10.2.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 4be86b11..e81d9787 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.github.pengrad -VERSION_NAME=10.1.0 +VERSION_NAME=10.2.0 POM_DESCRIPTION=Java API for Telegram Bot API POM_URL=https://github.com/pengrad/java-telegram-bot-api/ diff --git a/pom.xml b/pom.xml index 41763de9..40efa0e4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 com.github.pengrad java-telegram-bot-api - 10.1.0 + 10.2.0 JavaTelegramBotApi Java API for Telegram Bot API https://github.com/pengrad/java-telegram-bot-api/ From 0130e05d254cfa741d94eb16204eef10adb9e65c Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:57:20 +0200 Subject: [PATCH 21/38] Added the class DisabledButton and the field disabled to the class InlineKeyboardButton --- .../telegrambot/model/request/DisabledButton.kt | 13 +++++++++++++ .../model/request/InlineKeyboardButton.kt | 8 +++++++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt new file mode 100644 index 00000000..5fe4b976 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/DisabledButton.kt @@ -0,0 +1,13 @@ +package com.pengrad.telegrambot.model.request + +class DisabledButton { + + override fun equals(other: Any?): Boolean { + if (this === other) return true + return other != null && javaClass == other.javaClass + } + + override fun hashCode(): Int = 1 + + override fun toString(): String = "DisabledButton()" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt index 6f2f6f0b..b20a09e6 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardButton.kt @@ -19,7 +19,8 @@ data class InlineKeyboardButton @JvmOverloads constructor( @get:JvmName("webApp") var webApp: WebAppInfo? = null, @get:JvmName("copyText") var copyText: CopyTextButton? = null, @get:JvmName("iconCustomEmojiId") var iconCustomEmojiId: String? = null, - @get:JvmName("style") var style: String? = null + @get:JvmName("style") var style: String? = null, + @get:JvmName("disabled") var disabled: DisabledButton? = null ) { fun url(url: String): InlineKeyboardButton { @@ -90,4 +91,9 @@ data class InlineKeyboardButton @JvmOverloads constructor( this.style = style return this } + + fun disabled(): InlineKeyboardButton { + this.disabled = DisabledButton() + return this + } } From 8ae80f0e9b686405ad07cc1f6802dc51f964ef6f Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:57:56 +0200 Subject: [PATCH 22/38] Added the class RichMessageButton representing a button in a RichMessage --- .../model/richmessages/RichMessageButton.kt | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt new file mode 100644 index 00000000..06164158 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/RichMessageButton.kt @@ -0,0 +1,77 @@ +package com.pengrad.telegrambot.model.richmessages + +import com.pengrad.telegrambot.model.WebAppInfo +import com.pengrad.telegrambot.model.request.CopyTextButton +import com.pengrad.telegrambot.model.request.DisabledButton +import com.pengrad.telegrambot.model.request.LoginUrl +import com.pengrad.telegrambot.model.request.SwitchInlineQueryChosenChat +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +data class RichMessageButton @JvmOverloads constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("style") var style: String? = null, + @get:JvmName("url") var url: String? = null, + @get:JvmName("callbackData") var callbackData: String? = null, + @get:JvmName("webApp") var webApp: WebAppInfo? = null, + @get:JvmName("loginUrl") var loginUrl: LoginUrl? = null, + @get:JvmName("switchInlineQuery") var switchInlineQuery: String? = null, + @get:JvmName("switchInlineQueryCurrentChat") var switchInlineQueryCurrentChat: String? = null, + @get:JvmName("switchInlineQueryChosenChat") var switchInlineQueryChosenChat: SwitchInlineQueryChosenChat? = null, + @get:JvmName("copyText") var copyText: CopyTextButton? = null, + @get:JvmName("disabled") var disabled: DisabledButton? = null +) { + + fun style(style: String): RichMessageButton { + this.style = style + return this + } + + fun url(url: String): RichMessageButton { + this.url = url + return this + } + + fun callbackData(callbackData: String): RichMessageButton { + this.callbackData = callbackData + return this + } + + fun webApp(webApp: WebAppInfo): RichMessageButton { + this.webApp = webApp + return this + } + + fun loginUrl(loginUrl: LoginUrl): RichMessageButton { + this.loginUrl = loginUrl + return this + } + + fun switchInlineQuery(switchInlineQuery: String): RichMessageButton { + this.switchInlineQuery = switchInlineQuery + return this + } + + fun switchInlineQueryCurrentChat(switchInlineQueryCurrentChat: String): RichMessageButton { + this.switchInlineQueryCurrentChat = switchInlineQueryCurrentChat + return this + } + + fun switchInlineQueryChosenChat(switchInlineQueryChosenChat: SwitchInlineQueryChosenChat): RichMessageButton { + this.switchInlineQueryChosenChat = switchInlineQueryChosenChat + return this + } + + fun copyText(text: String): RichMessageButton { + return copyText(CopyTextButton(text)) + } + + fun copyText(copyText: CopyTextButton): RichMessageButton { + this.copyText = copyText + return this + } + + fun disabled(): RichMessageButton { + this.disabled = DisabledButton() + return this + } +} From 18adcfe9d99c68d0e76758f8ef6c648ddb0fb9bf Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 20:59:17 +0200 Subject: [PATCH 23/38] Added the class RichTextButton --- .../model/richmessages/richtext/RichTextButton.kt | 8 ++++++++ .../model/richmessages/richtext/RichTextType.kt | 1 + .../telegrambot/utility/gson/RichTextTypeAdapter.kt | 1 + 3 files changed, 10 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt new file mode 100644 index 00000000..2ced1084 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richtext/RichTextButton.kt @@ -0,0 +1,8 @@ +package com.pengrad.telegrambot.model.richmessages.richtext + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +data class RichTextButton @JvmOverloads constructor( + @get:JvmName("button") val button: RichMessageButton, + override val type: String = RichTextType.BUTTON +) : 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 429d79d9..10084a90 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 @@ -22,6 +22,7 @@ object RichTextType { const val HASHTAG = "hashtag" const val CASHTAG = "cashtag" const val BOT_COMMAND = "bot_command" + const val BUTTON = "button" const val ANCHOR = "anchor" const val ANCHOR_LINK = "anchor_link" const val REFERENCE = "reference" 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 4250990b..040ac813 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 @@ -35,6 +35,7 @@ object RichTextTypeAdapter : JsonDeserializer, JsonSerializer Date: Tue, 25 Aug 2026 21:01:15 +0200 Subject: [PATCH 24/38] Added the classes RichBlockButtons and InputRichBlockButtons --- .../richblock/InputRichBlockButtons.kt | 37 +++++++++++++++++++ .../richblock/InputRichBlockType.kt | 1 + .../richblock/RichBlockButtons.kt | 26 +++++++++++++ .../richmessages/richblock/RichBlockType.kt | 1 + .../utility/gson/RichBlockTypeAdapter.kt | 1 + 5 files changed, 66 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt new file mode 100644 index 00000000..167114ee --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockButtons.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +class InputRichBlockButtons private constructor( + @get:JvmName("buttons") val buttons: Array, + @get:JvmName("align") var align: String? +) : InputRichBlock { + + constructor(vararg buttons: RichMessageButton) : this( + buttons = arrayOf(*buttons), + align = null + ) + + override val type: String = InputRichBlockType.BUTTONS + + fun align(align: String) = apply { this.align = align } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockButtons + return type == other.type && + buttons.contentEquals(other.buttons) && + align == other.align + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + buttons.contentHashCode() + result = 31 * result + (align?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockButtons(type=$type, buttons=${buttons.contentToString()}, align=$align)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt index ef48926a..c422c20e 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt @@ -16,6 +16,7 @@ object InputRichBlockType { const val TABLE = "table" const val DETAILS = "details" const val MAP = "map" + const val BUTTONS = "buttons" const val ANIMATION = "animation" const val AUDIO = "audio" const val PHOTO = "photo" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt new file mode 100644 index 00000000..bccbf43e --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockButtons.kt @@ -0,0 +1,26 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.RichMessageButton + +class RichBlockButtons( + @get:JvmName("buttons") val buttons: Array, + @get:JvmName("align") val align: String? = null +) : RichBlock { + + override val type: String get() = RichBlockType.BUTTONS + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as RichBlockButtons + return buttons.contentEquals(other.buttons) && align == other.align + } + + override fun hashCode(): Int { + var result = buttons.contentHashCode() + result = 31 * result + (align?.hashCode() ?: 0) + return result + } + + override fun toString(): String = "RichBlockButtons(buttons=${buttons.contentToString()}, align=$align)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt index 7408aa18..a4e798bf 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt @@ -16,6 +16,7 @@ object RichBlockType { const val TABLE = "table" const val DETAILS = "details" const val MAP = "map" + const val BUTTONS = "buttons" const val ANIMATION = "animation" const val AUDIO = "audio" const val PHOTO = "photo" diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt index 53b81263..cba6b3ae 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt @@ -25,6 +25,7 @@ object RichBlockTypeAdapter : JsonDeserializer { RichBlockType.TABLE to RichBlockTable::class, RichBlockType.DETAILS to RichBlockDetails::class, RichBlockType.MAP to RichBlockMap::class, + RichBlockType.BUTTONS to RichBlockButtons::class, RichBlockType.ANIMATION to RichBlockAnimation::class, RichBlockType.AUDIO to RichBlockAudio::class, RichBlockType.PHOTO to RichBlockPhoto::class, From 99a74abc2c82ad36943744db5adcfead2835f621 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:02:26 +0200 Subject: [PATCH 25/38] Added the field is_compact to the class RichBlockTable --- .../model/richmessages/richblock/RichBlockTable.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt index 40952095..4b9bb5d7 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockTable.kt @@ -6,6 +6,7 @@ class RichBlockTable( @get:JvmName("cells") val cells: Array>, @get:JvmName("isBordered") val isBordered: Boolean? = null, @get:JvmName("isStriped") val isStriped: Boolean? = null, + @get:JvmName("isCompact") val isCompact: Boolean? = null, @get:JvmName("caption") val caption: RichText? = null ) : RichBlock { @@ -18,6 +19,7 @@ class RichBlockTable( return cells.contentDeepEquals(other.cells) && isBordered == other.isBordered && isStriped == other.isStriped && + isCompact == other.isCompact && caption == other.caption } @@ -25,9 +27,10 @@ class RichBlockTable( var result = cells.contentDeepHashCode() result = 31 * result + (isBordered?.hashCode() ?: 0) result = 31 * result + (isStriped?.hashCode() ?: 0) + result = 31 * result + (isCompact?.hashCode() ?: 0) result = 31 * result + (caption?.hashCode() ?: 0) return result } - override fun toString(): String = "RichBlockTable(cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, caption=$caption)" + override fun toString(): String = "RichBlockTable(cells=${cells.contentDeepToString()}, isBordered=$isBordered, isStriped=$isStriped, isCompact=$isCompact, caption=$caption)" } From ff8ab91e885205b2247df0d616c5b8c778d4f319 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:04:49 +0200 Subject: [PATCH 26/38] Added the classes RichBlockExpandableBlockQuotation and InputRichBlockExpandableBlockQuotation representing a block quotation, which can be expanded or collapsed back --- .../InputRichBlockExpandableBlockQuotation.kt | 37 +++++++++++++++++++ .../richblock/InputRichBlockType.kt | 1 + .../RichBlockExpandableBlockQuotation.kt | 10 +++++ .../richmessages/richblock/RichBlockType.kt | 1 + .../utility/gson/RichBlockTypeAdapter.kt | 1 + 5 files changed, 50 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt new file mode 100644 index 00000000..18da3070 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockExpandableBlockQuotation.kt @@ -0,0 +1,37 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +class InputRichBlockExpandableBlockQuotation private constructor( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") var credit: RichText? +) : InputRichBlock { + + constructor(text: RichText) : this( + text = text, + credit = null + ) + + override val type: String = InputRichBlockType.EXPANDABLE_BLOCKQUOTE + + fun credit(credit: RichText) = apply { this.credit = credit } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockExpandableBlockQuotation + return type == other.type && + text == other.text && + credit == other.credit + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + text.hashCode() + result = 31 * result + (credit?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockExpandableBlockQuotation(type=$type, text=$text, credit=$credit)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt index c422c20e..523b0b08 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt @@ -10,6 +10,7 @@ object InputRichBlockType { const val ANCHOR = "anchor" const val LIST = "list" const val BLOCKQUOTE = "blockquote" + const val EXPANDABLE_BLOCKQUOTE = "expandable_blockquote" const val PULLQUOTE = "pullquote" const val COLLAGE = "collage" const val SLIDESHOW = "slideshow" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt new file mode 100644 index 00000000..d5071070 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockExpandableBlockQuotation.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.richmessages.richtext.RichText + +data class RichBlockExpandableBlockQuotation( + @get:JvmName("text") val text: RichText, + @get:JvmName("credit") val credit: RichText? = null +) : RichBlock { + override val type: String get() = RichBlockType.EXPANDABLE_BLOCKQUOTE +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt index a4e798bf..03547f5a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt @@ -10,6 +10,7 @@ object RichBlockType { const val ANCHOR = "anchor" const val LIST = "list" const val BLOCKQUOTE = "blockquote" + const val EXPANDABLE_BLOCKQUOTE = "expandable_blockquote" const val PULLQUOTE = "pullquote" const val COLLAGE = "collage" const val SLIDESHOW = "slideshow" diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt index cba6b3ae..214d1d56 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt @@ -19,6 +19,7 @@ object RichBlockTypeAdapter : JsonDeserializer { RichBlockType.ANCHOR to RichBlockAnchor::class, RichBlockType.LIST to RichBlockList::class, RichBlockType.BLOCKQUOTE to RichBlockBlockQuotation::class, + RichBlockType.EXPANDABLE_BLOCKQUOTE to RichBlockExpandableBlockQuotation::class, RichBlockType.PULLQUOTE to RichBlockPullQuotation::class, RichBlockType.COLLAGE to RichBlockCollage::class, RichBlockType.SLIDESHOW to RichBlockSlideshow::class, From b0546902388b5e4e4435c8cda50e9888d9d4fc66 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:06:35 +0200 Subject: [PATCH 27/38] Added the classes RichBlockDocument and InputRichBlockDocument, containing a file --- .../richblock/InputRichBlockDocument.kt | 41 +++++++++++++++++++ .../richblock/InputRichBlockType.kt | 1 + .../richblock/RichBlockDocument.kt | 10 +++++ .../richmessages/richblock/RichBlockType.kt | 1 + .../utility/gson/RichBlockTypeAdapter.kt | 1 + 5 files changed, 54 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt new file mode 100644 index 00000000..b5406c3b --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockDocument.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.request.richmessages.richblock + +import com.pengrad.telegrambot.model.request.InputMedia +import com.pengrad.telegrambot.model.request.InputMediaDocument +import com.pengrad.telegrambot.model.richmessages.richblock.RichBlockCaption + +class InputRichBlockDocument private constructor( + @get:JvmName("document") val document: InputMediaDocument, + @get:JvmName("caption") var caption: RichBlockCaption? +) : InputRichBlock { + + constructor(document: InputMediaDocument) : this( + document = document, + caption = null + ) + + override val type: String = InputRichBlockType.DOCUMENT + + override fun inputMedia(): List> = listOf(document) + + fun caption(caption: RichBlockCaption) = apply { this.caption = caption } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as InputRichBlockDocument + return type == other.type && + document == other.document && + caption == other.caption + } + + override fun hashCode(): Int { + var result = type.hashCode() + result = 31 * result + document.hashCode() + result = 31 * result + (caption?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "InputRichBlockDocument(type=$type, document=$document, caption=$caption)" +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt index 523b0b08..ccea407a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/richmessages/richblock/InputRichBlockType.kt @@ -20,6 +20,7 @@ object InputRichBlockType { const val BUTTONS = "buttons" const val ANIMATION = "animation" const val AUDIO = "audio" + const val DOCUMENT = "document" const val PHOTO = "photo" const val VIDEO = "video" const val VOICE_NOTE = "voice_note" diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt new file mode 100644 index 00000000..5a4d57ed --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockDocument.kt @@ -0,0 +1,10 @@ +package com.pengrad.telegrambot.model.richmessages.richblock + +import com.pengrad.telegrambot.model.Document + +data class RichBlockDocument( + @get:JvmName("document") val document: Document, + @get:JvmName("caption") val caption: RichBlockCaption? = null +) : RichBlock { + override val type: String get() = RichBlockType.DOCUMENT +} diff --git a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt index 03547f5a..c5444939 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/richmessages/richblock/RichBlockType.kt @@ -20,6 +20,7 @@ object RichBlockType { const val BUTTONS = "buttons" const val ANIMATION = "animation" const val AUDIO = "audio" + const val DOCUMENT = "document" const val PHOTO = "photo" const val VIDEO = "video" const val VOICE_NOTE = "voice_note" diff --git a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt index 214d1d56..c349ad24 100644 --- a/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt +++ b/library/src/main/java/com/pengrad/telegrambot/utility/gson/RichBlockTypeAdapter.kt @@ -29,6 +29,7 @@ object RichBlockTypeAdapter : JsonDeserializer { RichBlockType.BUTTONS to RichBlockButtons::class, RichBlockType.ANIMATION to RichBlockAnimation::class, RichBlockType.AUDIO to RichBlockAudio::class, + RichBlockType.DOCUMENT to RichBlockDocument::class, RichBlockType.PHOTO to RichBlockPhoto::class, RichBlockType.VIDEO to RichBlockVideo::class, RichBlockType.VOICE_NOTE to RichBlockVoiceNote::class, From 4f5a87511e8e07911ec189d44c0a367075e371c1 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:11:45 +0200 Subject: [PATCH 28/38] Added the class EphemeralMessageParameters --- .../ephemeral/EphemeralMessageParameters.kt | 41 +++++++++++++++++++ .../telegrambot/request/SendAnimation.kt | 3 ++ .../pengrad/telegrambot/request/SendAudio.kt | 3 ++ .../telegrambot/request/SendContact.kt | 3 ++ .../telegrambot/request/SendDocument.kt | 3 ++ .../telegrambot/request/SendLivePhoto.kt | 4 ++ .../telegrambot/request/SendLocation.kt | 3 ++ .../telegrambot/request/SendMessage.kt | 3 ++ .../pengrad/telegrambot/request/SendPhoto.kt | 3 ++ .../telegrambot/request/SendSticker.kt | 3 ++ .../pengrad/telegrambot/request/SendVenue.kt | 3 ++ .../pengrad/telegrambot/request/SendVideo.kt | 3 ++ .../telegrambot/request/SendVideoNote.kt | 3 ++ .../pengrad/telegrambot/request/SendVoice.kt | 3 ++ 14 files changed, 81 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt 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 new file mode 100644 index 00000000..8ee59a2a --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/ephemeral/EphemeralMessageParameters.kt @@ -0,0 +1,41 @@ +package com.pengrad.telegrambot.model.ephemeral + +class EphemeralMessageParameters private constructor( + @get:JvmName("receiverUserId") val receiverUserId: Long, + @get:JvmName("callbackQueryId") var callbackQueryId: String?, + @get:JvmName("replaceCallbackQueryMessage") var replaceCallbackQueryMessage: Boolean?, +) { + + constructor(receiverUserId: Long) : this( + receiverUserId = receiverUserId, + callbackQueryId = null, + replaceCallbackQueryMessage = null + ) + + fun callbackQueryId(callbackQueryId: String) = apply { + this.callbackQueryId = callbackQueryId + } + + fun replaceCallbackQueryMessage(replaceCallbackQueryMessage: Boolean) = apply { + this.replaceCallbackQueryMessage = replaceCallbackQueryMessage + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + other as EphemeralMessageParameters + return receiverUserId == other.receiverUserId && + callbackQueryId == other.callbackQueryId && + replaceCallbackQueryMessage == other.replaceCallbackQueryMessage + } + + override fun hashCode(): Int { + var result = receiverUserId.hashCode() + result = 31 * result + (callbackQueryId?.hashCode() ?: 0) + result = 31 * result + (replaceCallbackQueryMessage?.hashCode() ?: 0) + return result + } + + override fun toString(): String = + "EphemeralMessageParameters(receiverUserId=$receiverUserId, callbackQueryId=$callbackQueryId, replaceCallbackQueryMessage=$replaceCallbackQueryMessage)" +} 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 c7995c24..b2015867 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAnimation.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -102,6 +103,7 @@ class SendAnimation private constructor( var duration: Int? by optionalRequestParameter() var width: Int? by optionalRequestParameter() var height: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = apply { this.caption = caption } @@ -121,4 +123,5 @@ class SendAnimation private constructor( fun height(height: Int) = apply { this.height = height } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 c47f2931..30f44bbd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendAudio.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -99,6 +100,7 @@ class SendAudio private constructor( var duration: Int? by optionalRequestParameter() var performer: String? by optionalRequestParameter() var title: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -114,4 +116,5 @@ class SendAudio private constructor( fun title(title: String) = applySelf { this.title = title } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 293ba495..aaa1ae88 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendContact.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -44,9 +45,11 @@ class SendContact private constructor( var lastName: String? by optionalRequestParameter() var vcard: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun lastName(lastName: String) = apply { this.lastName = lastName } fun vcard(vcard: String) = apply { this.vcard = vcard } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 07415bf7..f755f0e4 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendDocument.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -98,6 +99,7 @@ class SendDocument private constructor( var captionEntities: List? by optionalRequestParameter() var disableContentTypeDetection: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -109,4 +111,5 @@ class SendDocument private constructor( fun disableContentTypeDetection(disableContentTypeDetection: Boolean) = applySelf { this.disableContentTypeDetection = disableContentTypeDetection } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 4fee6d64..db0632a9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLivePhoto.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -208,6 +209,7 @@ class SendLivePhoto private constructor( var captionEntities: List? by optionalRequestParameter() var showCaptionAboveMedia: Boolean? by optionalRequestParameter() var hasSpoiler: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } @@ -215,4 +217,6 @@ class SendLivePhoto private constructor( fun captionEntities(vararg captionEntities: MessageEntity) = applySelf { this.captionEntities = captionEntities.toList() } fun showCaptionAboveMedia(showCaptionAboveMedia: Boolean) = applySelf { this.showCaptionAboveMedia = showCaptionAboveMedia } fun hasSpoiler(hasSpoiler: Boolean) = applySelf { this.hasSpoiler = hasSpoiler } + + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } 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 11885296..be7ed73b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendLocation.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -46,6 +47,7 @@ class SendLocation private constructor( var livePeriod: Int? by optionalRequestParameter() var heading: Int? by optionalRequestParameter() var proximityAlertRadius: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun horizontalAccuracy(horizontalAccuracy: Float) = applySelf { this.horizontalAccuracy = horizontalAccuracy } @@ -55,4 +57,5 @@ class SendLocation private constructor( fun proximityAlertRadius(proximityAlertRadius: Int) = applySelf { this.proximityAlertRadius = proximityAlertRadius } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 92e1754f..aca955d4 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMessage.kt @@ -2,6 +2,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.LinkPreviewOptions import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -43,6 +44,7 @@ class SendMessage private constructor( var parseMode: ParseMode? by optionalRequestParameter() var entities: List? by optionalRequestParameter() var linkPreviewOptions: LinkPreviewOptions? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun parseMode(parseMode: ParseMode) = applySelf { this.parseMode = parseMode } @@ -52,4 +54,5 @@ class SendMessage private constructor( fun linkPreviewOptions(linkPreviewOptions: LinkPreviewOptions) = applySelf { this.linkPreviewOptions = linkPreviewOptions} + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 97eeee49..031fd37d 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendPhoto.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -97,6 +98,7 @@ class SendPhoto private constructor( var captionEntities: List? by optionalRequestParameter() var showCaptionAboveMedia: Boolean? by optionalRequestParameter() var hasSpoiler: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -110,4 +112,5 @@ class SendPhoto private constructor( fun hasSpoiler(hasSpoiler: Boolean) = applySelf { this.hasSpoiler = hasSpoiler } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 b0a933c4..a2a266ab 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendSticker.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import java.io.File @@ -91,7 +92,9 @@ class SendSticker private constructor( } var emoji: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun emoji(emoji: String) = applySelf { this.emoji = emoji } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 748103da..c69aaac3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVenue.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @@ -75,6 +76,7 @@ class SendVenue private constructor( var googlePlaceId: String? by optionalRequestParameter() var googlePlaceType: String? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun foursquareId(foursquareId: String) = applySelf { this.foursquareId = foursquareId } @@ -84,4 +86,5 @@ class SendVenue private constructor( fun googlePlaceType(googlePlaceType: String) = applySelf { this.googlePlaceType = googlePlaceType } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 a0c5c2f1..05470774 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideo.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -109,6 +110,7 @@ class SendVideo private constructor( var hasSpoiler: Boolean? by optionalRequestParameter() var supportsStreaming: Boolean? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun duration(duration: Int) = applySelf { this.duration = duration } @@ -138,4 +140,5 @@ class SendVideo private constructor( fun supportsStreaming(supportsStreaming: Boolean) = applySelf { this.supportsStreaming = supportsStreaming } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 28862020..4957fd73 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVideoNote.kt @@ -1,5 +1,6 @@ package com.pengrad.telegrambot.request +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import java.io.File @@ -92,9 +93,11 @@ class SendVideoNote private constructor( var duration: Int? by optionalRequestParameter() var length: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun duration(duration: Int) = apply { this.duration = duration } fun length(length: Int) = apply { this.length = length } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file 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 44fd60f4..a504d604 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendVoice.kt @@ -1,6 +1,7 @@ package com.pengrad.telegrambot.request import com.pengrad.telegrambot.model.MessageEntity +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.ParseMode import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter @@ -96,6 +97,7 @@ class SendVoice private constructor( var parseMode: ParseMode? by optionalRequestParameter() var captionEntities: List? by optionalRequestParameter() var duration: Int? by optionalRequestParameter() + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() fun caption(caption: String) = applySelf { this.caption = caption } @@ -107,4 +109,5 @@ class SendVoice private constructor( fun duration(duration: Int) = applySelf { this.duration = duration } + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } } \ No newline at end of file From e26b277e77de9e6e3629994b1d5e36301c9426c6 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:12:50 +0200 Subject: [PATCH 29/38] Added the parameter ephemeral_message_parameters to the method sendRichMessage --- .../telegrambot/request/richmessages/SendRichMessage.kt | 6 ++++++ 1 file changed, 6 insertions(+) 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 eee0ed91..845b5a1b 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 @@ -1,8 +1,10 @@ package com.pengrad.telegrambot.request.richmessages +import com.pengrad.telegrambot.model.ephemeral.EphemeralMessageParameters import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage import com.pengrad.telegrambot.request.AbstractSendRequest import com.pengrad.telegrambot.utility.kotlin.checkDeprecatedConstructorParameters +import com.pengrad.telegrambot.utility.kotlin.optionalRequestParameter import com.pengrad.telegrambot.utility.kotlin.requestParameter @Suppress("unused") @@ -38,6 +40,10 @@ class SendRichMessage private constructor( val richMessage: InputRichMessage by requestParameter(richMessage) + var ephemeralMessageParameters: EphemeralMessageParameters? by optionalRequestParameter() + + fun ephemeralMessageParameters(ephemeralMessageParameters: EphemeralMessageParameters) = applySelf { this.ephemeralMessageParameters = ephemeralMessageParameters } + private var multipart = false init { From c3d6e6dd07b5a8ab6fb796daa4992ca1f05bc0ae Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:16:04 +0200 Subject: [PATCH 30/38] Added the field can_send_welcome_messages to the classes ChatMember and ChatAdministratorRights --- .../model/ChatAdministratorRights.java | 17 +++++++++++++++-- .../pengrad/telegrambot/model/ChatMember.java | 8 ++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java index 67d7e5c0..e4831ef5 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatAdministratorRights.java @@ -28,6 +28,7 @@ public class ChatAdministratorRights implements Serializable { private Boolean can_manage_topics; private Boolean can_manage_direct_messages; private Boolean can_manage_tags; + private Boolean can_send_welcome_messages; public Boolean isAnonymous() { return is_anonymous != null && is_anonymous; @@ -97,6 +98,10 @@ public Boolean canManageTags() { return can_manage_tags != null && can_manage_tags; } + public Boolean canSendWelcomeMessages() { + return can_send_welcome_messages != null && can_send_welcome_messages; + } + public ChatAdministratorRights canManageChat(boolean canManageChat) { this.can_manage_chat = canManageChat; return this; @@ -177,6 +182,11 @@ public ChatAdministratorRights canManageTags(boolean canManageTags) { return this; } + public ChatAdministratorRights canSendWelcomeMessages(boolean canSendWelcomeMessages) { + this.can_send_welcome_messages = canSendWelcomeMessages; + return this; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -199,7 +209,8 @@ public boolean equals(Object o) { Objects.equals(can_delete_stories, that.can_delete_stories) && Objects.equals(can_manage_topics, that.can_manage_topics) && Objects.equals(can_manage_direct_messages, that.can_manage_direct_messages) && - Objects.equals(can_manage_tags, that.can_manage_tags); + Objects.equals(can_manage_tags, that.can_manage_tags) && + Objects.equals(can_send_welcome_messages, that.can_send_welcome_messages); } @Override @@ -220,7 +231,8 @@ public int hashCode() { can_delete_stories, can_manage_topics, can_manage_direct_messages, - can_manage_tags); + can_manage_tags, + can_send_welcome_messages); } @Override @@ -243,6 +255,7 @@ public String toString() { ", can_manage_topics=" + can_manage_topics + ", can_manage_direct_messages=" + can_manage_direct_messages + ", can_manage_tags=" + can_manage_tags + + ", can_send_welcome_messages=" + can_send_welcome_messages + '}'; } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java b/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java index f3c2131f..08e88a0c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/ChatMember.java @@ -37,6 +37,7 @@ public enum Status { private Boolean can_manage_topics; private Boolean can_manage_direct_messages; private Boolean can_manage_tags; + private Boolean can_send_welcome_messages; private Boolean can_edit_tag; private String tag; private Boolean is_member; @@ -142,6 +143,10 @@ public Boolean canManageTags() { return can_manage_tags != null && can_manage_tags; } + public Boolean canSendWelcomeMessages() { + return can_send_welcome_messages != null && can_send_welcome_messages; + } + public Boolean canEditTag() { return can_edit_tag != null && can_edit_tag; } @@ -225,6 +230,7 @@ public boolean equals(Object o) { Objects.equals(can_manage_topics, that.can_manage_topics) && Objects.equals(can_manage_direct_messages, that.can_manage_direct_messages) && Objects.equals(can_manage_tags, that.can_manage_tags) && + Objects.equals(can_send_welcome_messages, that.can_send_welcome_messages) && Objects.equals(can_edit_tag, that.can_edit_tag) && Objects.equals(tag, that.tag) && Objects.equals(is_member, that.is_member) && @@ -265,6 +271,7 @@ public int hashCode() { can_manage_topics, can_manage_direct_messages, can_manage_tags, + can_send_welcome_messages, can_edit_tag, tag, is_member, @@ -306,6 +313,7 @@ public String toString() { ", can_manage_topics=" + can_manage_topics + ", can_manage_direct_messages=" + can_manage_direct_messages + ", can_manage_tags=" + can_manage_tags + + ", can_send_welcome_messages=" + can_send_welcome_messages + ", can_edit_tag=" + can_edit_tag + ", tag='" + tag + '\'' + ", is_member=" + is_member + From af90957e90c25843018e9410342089cb59d0614d Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:16:48 +0200 Subject: [PATCH 31/38] Added the parameter can_send_welcome_messages to the method promoteChatMember --- .../com/pengrad/telegrambot/request/PromoteChatMember.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java b/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java index 240cd84c..c622c452 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/PromoteChatMember.java @@ -80,4 +80,8 @@ public PromoteChatMember canPromoteMembers(boolean canPromoteMembers) { public PromoteChatMember canManageTags(boolean canManageTags) { return add("can_manage_tags", canManageTags); } + + public PromoteChatMember canSendWelcomeMessages(boolean canSendWelcomeMessages) { + return add("can_send_welcome_messages", canSendWelcomeMessages); + } } From 92bac23a2ef015e6b8d707aeac88ee99282fe8c4 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:18:45 +0200 Subject: [PATCH 32/38] Added the field force_reply to the classes InlineKeyboardMarkup and ReplyKeyboardMarkup --- .../model/request/InlineKeyboardMarkup.java | 16 ++++++++++++++-- .../model/request/ReplyKeyboardMarkup.java | 6 ++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java index f8113fe6..62b9c99c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java @@ -14,6 +14,7 @@ public class InlineKeyboardMarkup extends Keyboard implements Serializable { private final static long serialVersionUID = 0L; private final List> inline_keyboard; + private Boolean force_reply; public InlineKeyboardMarkup() { this.inline_keyboard = new ArrayList<>(); @@ -35,6 +36,15 @@ public InlineKeyboardMarkup addRow(InlineKeyboardButton... keyboard) { return this; } + public InlineKeyboardMarkup forceReply(boolean forceReply) { + this.force_reply = forceReply; + return this; + } + + public Boolean forceReply() { + return force_reply; + } + public InlineKeyboardButton[][] inlineKeyboard() { InlineKeyboardButton[][] res = new InlineKeyboardButton[inline_keyboard.size()][]; for (int i = 0; i < inline_keyboard.size(); i++) { @@ -49,18 +59,20 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; InlineKeyboardMarkup that = (InlineKeyboardMarkup) o; - return Objects.equals(inline_keyboard, that.inline_keyboard); + return Objects.equals(inline_keyboard, that.inline_keyboard) && + Objects.equals(force_reply, that.force_reply); } @Override public int hashCode() { - return Objects.hash(inline_keyboard); + return Objects.hash(inline_keyboard, force_reply); } @Override public String toString() { return "InlineKeyboardMarkup{" + "inline_keyboard=" + inline_keyboard + + ", force_reply=" + force_reply + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java index 53756c23..3ae3cc3b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java @@ -18,6 +18,7 @@ public class ReplyKeyboardMarkup extends Keyboard implements Serializable { private String input_field_placeholder; private boolean selective; private boolean is_persistent; + private Boolean force_reply; public ReplyKeyboardMarkup(String[][] keyboard, boolean resize_keyboard, boolean one_time_keyboard, String input_field_placeholder, boolean selective, boolean is_persistent) { this.keyboard = new ArrayList<>(); @@ -92,4 +93,9 @@ public ReplyKeyboardMarkup isPersistent(boolean is_persistent) { this.is_persistent = is_persistent; return this; } + + public ReplyKeyboardMarkup forceReply(boolean forceReply) { + this.force_reply = forceReply; + return this; + } } From 6e35cb0e39006444c97594b3ead71fb03fb4413f Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:19:52 +0200 Subject: [PATCH 33/38] Added the parameters can_stop and keep_on_stop to the methods sendMessageDraft and sendRichMessageDraft --- .../com/pengrad/telegrambot/request/SendMessageDraft.kt | 6 ++++++ .../request/richmessages/SendRichMessageDraft.kt | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt b/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt index 428f4445..41b9f9f9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMessageDraft.kt @@ -22,6 +22,8 @@ class SendMessageDraft( var messageThreadId: Long? by optionalRequestParameter() var parseMode: ParseMode? by optionalRequestParameter() var entities: List? by optionalRequestParameter() + var canStop: Boolean? by optionalRequestParameter() + var keepOnStop: Boolean? by optionalRequestParameter() fun text(text: String) = applySelf { this.text = text } @@ -31,4 +33,8 @@ class SendMessageDraft( fun entities(entities: List) = applySelf { this.entities = entities } + fun canStop(canStop: Boolean) = applySelf { this.canStop = canStop } + + fun keepOnStop(keepOnStop: Boolean) = applySelf { this.keepOnStop = keepOnStop } + } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt index d538c26b..a7c05a68 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt +++ b/library/src/main/java/com/pengrad/telegrambot/request/richmessages/SendRichMessageDraft.kt @@ -18,9 +18,15 @@ class SendRichMessageDraft( val richMessage: InputRichMessage by requestParameter(richMessage) var messageThreadId: Long? by optionalRequestParameter() + var canStop: Boolean? by optionalRequestParameter() + var keepOnStop: Boolean? by optionalRequestParameter() fun messageThreadId(messageThreadId: Long) = applySelf { this.messageThreadId = messageThreadId } + fun canStop(canStop: Boolean) = applySelf { this.canStop = canStop } + + fun keepOnStop(keepOnStop: Boolean) = applySelf { this.keepOnStop = keepOnStop } + private var multipart = false init { From ca17bef08ee2e3d2acce5c73c9fba7db12029a4c Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:21:26 +0200 Subject: [PATCH 34/38] Added updates about user stopping message generation, represented by the class MessageGenerationStopped and the field stopped_message_generation in the class Update --- .../telegrambot/model/MessageGenerationStopped.kt | 7 +++++++ .../main/java/com/pengrad/telegrambot/model/Update.java | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt b/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt new file mode 100644 index 00000000..ca87d618 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/MessageGenerationStopped.kt @@ -0,0 +1,7 @@ +package com.pengrad.telegrambot.model + +data class MessageGenerationStopped( + @get:JvmName("chat") val chat: Chat, + @get:JvmName("messageThreadId") val messageThreadId: Long? = null, + @get:JvmName("draftId") val draftId: Int, +) 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 2038c3c8..669466e9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Update.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Update.java @@ -43,6 +43,7 @@ public class Update implements Serializable { private ManagedBotUpdated managed_bot; private Message guest_message; private BotSubscriptionUpdated subscription; + private MessageGenerationStopped stopped_message_generation; public Integer updateId() { return update_id; @@ -152,6 +153,10 @@ public BotSubscriptionUpdated subscription() { return subscription; } + public MessageGenerationStopped stoppedMessageGeneration() { + return stopped_message_generation; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -183,7 +188,8 @@ public boolean equals(Object o) { Objects.equals(purchased_paid_media, update.purchased_paid_media) && Objects.equals(managed_bot, update.managed_bot) && Objects.equals(guest_message, update.guest_message) && - Objects.equals(subscription, update.subscription); + Objects.equals(subscription, update.subscription) && + Objects.equals(stopped_message_generation, update.stopped_message_generation); } @Override @@ -221,6 +227,7 @@ public String toString() { ", managed_bot=" + managed_bot + ", guest_message=" + guest_message + ", subscription=" + subscription + + ", stopped_message_generation=" + stopped_message_generation + '}'; } } From 47a97345e2873b16284105c720e601d29936f009 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:22:11 +0200 Subject: [PATCH 35/38] Added the class CommunityChatJoined and the field community_chat_joined to the class Message for service messages about join of a chat from a community --- .../com/pengrad/telegrambot/model/CommunityChatJoined.kt | 5 +++++ .../main/java/com/pengrad/telegrambot/model/Message.java | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt diff --git a/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt new file mode 100644 index 00000000..fe679456 --- /dev/null +++ b/library/src/main/java/com/pengrad/telegrambot/model/CommunityChatJoined.kt @@ -0,0 +1,5 @@ +package com.pengrad.telegrambot.model + +data class CommunityChatJoined( + @get:JvmName("community") val community: Community, +) 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 52c7c2b6..299917ff 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/Message.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/Message.java @@ -149,6 +149,7 @@ public class Message extends MaybeInaccessibleMessage implements Serializable { private Chat guest_bot_caller_chat; private String guest_query_id; private CommunityChatAdded community_chat_added; + private CommunityChatJoined community_chat_joined; private CommunityChatRemoved community_chat_removed; public Long messageThreadId() { @@ -600,6 +601,10 @@ public CommunityChatAdded communityChatAdded() { return community_chat_added; } + public CommunityChatJoined communityChatJoined() { + return community_chat_joined; + } + public CommunityChatRemoved communityChatRemoved() { return community_chat_removed; } @@ -760,6 +765,7 @@ public boolean equals(Object o) { Objects.equals(guest_bot_caller_chat, message.guest_bot_caller_chat) && 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); } @@ -889,6 +895,7 @@ public String toString() { ", guest_bot_caller_chat=" + guest_bot_caller_chat + ", guest_query_id='" + guest_query_id + '\'' + ", community_chat_added=" + community_chat_added + + ", community_chat_joined=" + community_chat_joined + ", community_chat_removed=" + community_chat_removed + '}'; } From c253b8f5064899b34aff046ffaf1f3df44ef8835 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:24:04 +0200 Subject: [PATCH 36/38] Added the fields text, entities and is_private to the class UniqueGiftInfo --- .../model/gift/unique/UniqueGiftInfo.kt | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt b/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt index 1429504f..832df2dc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt +++ b/library/src/main/java/com/pengrad/telegrambot/model/gift/unique/UniqueGiftInfo.kt @@ -1,5 +1,7 @@ package com.pengrad.telegrambot.model.gift.unique +import com.pengrad.telegrambot.model.MessageEntity + @Suppress("unused") data class UniqueGiftInfo( @get:JvmName("gift") val gift: UniqueGift, @@ -10,5 +12,53 @@ data class UniqueGiftInfo( @Deprecated("Use lastResaleCurrency and lastResaleAmount instead") @get:JvmName("lastResaleStarCount") val lastResaleStarCount: Int?, @get:JvmName("lastResaleCurrency") val lastResaleCurrency: String?, - @get:JvmName("lastResaleAmount") val lastResaleAmount: Long? -) \ No newline at end of file + @get:JvmName("lastResaleAmount") val lastResaleAmount: Long?, + @get:JvmName("text") val text: String? = null, + @get:JvmName("entities") val entities: Array? = null, + @get:JvmName("isPrivate") val isPrivate: Boolean? = null, +) { + + @Suppress("DEPRECATION") + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is UniqueGiftInfo) return false + + return gift == other.gift && + origin == other.origin && + ownedGiftId == other.ownedGiftId && + transferStarCount == other.transferStarCount && + nextTransferDate == other.nextTransferDate && + lastResaleStarCount == other.lastResaleStarCount && + lastResaleCurrency == other.lastResaleCurrency && + lastResaleAmount == other.lastResaleAmount && + text == other.text && + entities contentEquals other.entities && + isPrivate == other.isPrivate + } + + @Suppress("DEPRECATION") + override fun hashCode(): Int { + var result = gift.hashCode() + result = 31 * result + origin.hashCode() + result = 31 * result + (ownedGiftId?.hashCode() ?: 0) + result = 31 * result + (transferStarCount ?: 0) + result = 31 * result + (nextTransferDate?.hashCode() ?: 0) + result = 31 * result + (lastResaleStarCount ?: 0) + result = 31 * result + (lastResaleCurrency?.hashCode() ?: 0) + result = 31 * result + (lastResaleAmount?.hashCode() ?: 0) + result = 31 * result + (text?.hashCode() ?: 0) + result = 31 * result + (entities?.contentHashCode() ?: 0) + result = 31 * result + (isPrivate?.hashCode() ?: 0) + return result + } + + @Suppress("DEPRECATION") + override fun toString(): String { + return "UniqueGiftInfo(gift=$gift, origin=$origin, ownedGiftId=$ownedGiftId, " + + "transferStarCount=$transferStarCount, nextTransferDate=$nextTransferDate, " + + "lastResaleStarCount=$lastResaleStarCount, lastResaleCurrency=$lastResaleCurrency, " + + "lastResaleAmount=$lastResaleAmount, text=$text, " + + "entities=${entities?.contentToString()}, isPrivate=$isPrivate)" + } + +} From 356a96ac142a9d7038da2ce204283df8b427f910 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:24:37 +0200 Subject: [PATCH 37/38] Bump version to 10.3 --- README.md | 6 +++--- gradle.properties | 2 +- pom.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ef63e954..6a6be122 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.2 methods +- Full support of all Bot API 10.3 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.2.0' +implementation 'com.github.pengrad:java-telegram-bot-api:10.3.0' ``` Maven: ```xml com.github.pengrad java-telegram-bot-api - 10.2.0 + 10.3.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 e81d9787..fa055e80 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.github.pengrad -VERSION_NAME=10.2.0 +VERSION_NAME=10.3.0 POM_DESCRIPTION=Java API for Telegram Bot API POM_URL=https://github.com/pengrad/java-telegram-bot-api/ diff --git a/pom.xml b/pom.xml index 40efa0e4..4bc14152 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 4.0.0 com.github.pengrad java-telegram-bot-api - 10.2.0 + 10.3.0 JavaTelegramBotApi Java API for Telegram Bot API https://github.com/pengrad/java-telegram-bot-api/ From 39ecfe5fbb2c642a875d039f939711542aa85761 Mon Sep 17 00:00:00 2001 From: Mirco Ianese Date: Tue, 25 Aug 2026 21:37:02 +0200 Subject: [PATCH 38/38] Fix tests --- .../test/java/com/pengrad/telegrambot/ModelTest.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt index 51ce8ccc..d848bf0d 100644 --- a/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt +++ b/library/src/test/java/com/pengrad/telegrambot/ModelTest.kt @@ -7,6 +7,9 @@ import com.pengrad.telegrambot.model.message.MaybeInaccessibleMessage import com.pengrad.telegrambot.model.request.InlineKeyboardButton import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup import com.pengrad.telegrambot.model.request.ParseMode +import com.pengrad.telegrambot.model.request.richmessages.InputRichMessage +import com.pengrad.telegrambot.model.request.richmessages.richblock.InputRichBlockParagraph +import com.pengrad.telegrambot.model.richmessages.RichMessageButton import com.pengrad.telegrambot.passport.Credentials import com.pengrad.telegrambot.passport.decrypt.Decrypt import nl.jqno.equalsverifier.EqualsVerifier @@ -37,7 +40,9 @@ class ModelTest { val excludedPackages = listOf( ParseMode::class, BotCommandScope::class, - Decrypt::class + Decrypt::class, + InputRichMessage::class, + InputRichBlockParagraph::class ).map { it.java.`package`.name } classes.addAll(Reflections(packages, SubTypesScanner(false)) @@ -91,6 +96,11 @@ class ModelTest { verifierApi.withIgnoredFields("forum_topic_reopened") verifierApi.withIgnoredFields("general_forum_topic_hidden") verifierApi.withIgnoredFields("general_forum_topic_unhidden") + verifierApi.withIgnoredFields("community_chat_removed") + } + + if (c == InlineKeyboardButton::class.java || c == RichMessageButton::class.java) { + verifierApi.withIgnoredFields("disabled") } verifierApi.verify()