From 390770ca80cff1c1bd2a880fd48de629a4be2753 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 1 Jul 2026 12:46:16 +0600 Subject: [PATCH] refactor/fixes in rich parts --- tgbotapi.core/api/tgbotapi.core.api | 24 +++++++------- .../inmo/tgbotapi/types/rich/RichBlocks.kt | 6 ++-- .../inmo/tgbotapi/types/rich/RichTextDsl.kt | 33 ++++++++++--------- .../tgbotapi/types/rich/RichTextEntities.kt | 11 ++++--- .../types/RichMessageSerializationTest.kt | 2 +- .../tgbotapi/types/rich/RichTextDslTest.kt | 2 +- .../types/rich/RichTextFormattingTest.kt | 3 +- 7 files changed, 42 insertions(+), 39 deletions(-) diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 4a0a2d0415..5549edbcc6 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -35105,8 +35105,8 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlockSectionHeading : dev/in public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockSectionHeading;Ldev/inmo/tgbotapi/types/rich/RichText;IILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockSectionHeading; public fun equals (Ljava/lang/Object;)Z public fun getHtml ()Ljava/lang/String; + public final fun getLevel ()I public fun getMarkdown ()Ljava/lang/String; - public final fun getSize ()I public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; public fun getType ()Ljava/lang/String; public fun hashCode ()I @@ -35369,8 +35369,8 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlocksBuilder { public final fun divider ()V public final fun footer (Ljava/lang/String;)V public final fun footer (Lkotlin/jvm/functions/Function1;)V - public final fun heading (ILjava/lang/String;)V - public final fun heading (ILkotlin/jvm/functions/Function1;)V + public final fun heading (Ljava/lang/String;I)V + public final fun heading (Lkotlin/jvm/functions/Function1;I)V public final fun list (Lkotlin/jvm/functions/Function1;)V public final fun mathematicalExpression (Ljava/lang/String;)V public final fun paragraph (Ljava/lang/String;)V @@ -35589,8 +35589,8 @@ public final class dev/inmo/tgbotapi/types/rich/RichTextBuilder { public final fun code (Ljava/lang/String;)V public final fun code (Lkotlin/jvm/functions/Function1;)V public final fun customEmoji-R1fjqgo (Ljava/lang/String;Ljava/lang/String;)V - public final fun dateTime (JLjava/lang/String;Ljava/lang/String;)V - public final fun dateTime (JLjava/lang/String;Lkotlin/jvm/functions/Function1;)V + public final fun dateTime (Ljava/lang/String;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)V + public final fun dateTime (Lkotlin/jvm/functions/Function1;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)V public final fun email (Ljava/lang/String;Ljava/lang/String;)V public final fun email (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public final fun hashtag (Ljava/lang/String;Ljava/lang/String;)V @@ -35735,12 +35735,12 @@ public final class dev/inmo/tgbotapi/types/rich/RichTextCustomEmoji$Companion { public final class dev/inmo/tgbotapi/types/rich/RichTextDateTime : dev/inmo/tgbotapi/types/rich/RichTextEntity { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichTextDateTime$Companion; public static final field TYPE Ljava/lang/String; - public fun (Ldev/inmo/tgbotapi/types/rich/RichText;JLjava/lang/String;)V + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)V public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; - public final fun component2 ()J + public final fun component2 ()Ldev/inmo/tgbotapi/types/TelegramDate; public final fun component3 ()Ljava/lang/String; - public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;JLjava/lang/String;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime; - public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichTextDateTime;Ldev/inmo/tgbotapi/types/rich/RichText;JLjava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichTextDateTime;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime; public fun equals (Ljava/lang/Object;)Z public final fun getDateTimeFormat ()Ljava/lang/String; public fun getHtml ()Ljava/lang/String; @@ -35748,7 +35748,7 @@ public final class dev/inmo/tgbotapi/types/rich/RichTextDateTime : dev/inmo/tgbo public fun getRawText ()Ljava/lang/String; public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; public fun getType ()Ljava/lang/String; - public final fun getUnixTime ()J + public final fun getUnixTime ()Ldev/inmo/tgbotapi/types/TelegramDate; public fun hashCode ()I public fun toString ()Ljava/lang/String; } @@ -35765,8 +35765,8 @@ public final synthetic class dev/inmo/tgbotapi/types/rich/RichTextDateTime$$seri } public final class dev/inmo/tgbotapi/types/rich/RichTextDateTime$Companion { - public final fun html (Ldev/inmo/tgbotapi/types/rich/RichText;JLjava/lang/String;)Ljava/lang/String; - public final fun markdown (Ldev/inmo/tgbotapi/types/rich/RichText;JLjava/lang/String;)Ljava/lang/String; + public final fun html (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)Ljava/lang/String; + public final fun markdown (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/TelegramDate;Ljava/lang/String;)Ljava/lang/String; public final fun serializer ()Lkotlinx/serialization/KSerializer; } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt index 844b48d558..8db919ee6e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt @@ -72,14 +72,14 @@ data class RichBlockSectionHeading( * Relative size of the text font; 1-6, 1 is the largest, 6 is the smallest. */ @SerialName(sizeField) - val size: Int + val level: Int ) : RichBlock { @EncodeDefault @SerialName(typeField) override val type: String = TYPE - override val markdown: String = markdown(text, size) - override val html: String = html(text, size) + override val markdown: String = markdown(text, level) + override val html: String = html(text, level) companion object { const val TYPE = "heading" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt index 88805f81f7..37383b6b1f 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt @@ -1,6 +1,7 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.types.CustomEmojiId +import dev.inmo.tgbotapi.types.TelegramDate import dev.inmo.tgbotapi.types.chat.User /** @@ -56,12 +57,12 @@ class RichTextBuilder { fun code(text: String) = add(RichTextCode(RichTextPlain(text))) fun code(block: RichTextBuilder.() -> Unit) = add(RichTextCode(buildRichText(block))) - fun dateTime(unixTime: Long, dateTimeFormat: String, text: String) = + fun dateTime(text: String, unixTime: TelegramDate, dateTimeFormat: String) = add(RichTextDateTime(RichTextPlain(text), unixTime, dateTimeFormat)) - fun dateTime(unixTime: Long, dateTimeFormat: String, block: RichTextBuilder.() -> Unit) = + fun dateTime(unixTime: TelegramDate, dateTimeFormat: String, block: RichTextBuilder.() -> Unit) = add(RichTextDateTime(buildRichText(block), unixTime, dateTimeFormat)) - fun textMention(user: User, text: String) = add(RichTextTextMention(RichTextPlain(text), user)) + fun textMention(text: String, user: User) = add(RichTextTextMention(RichTextPlain(text), user)) fun textMention(user: User, block: RichTextBuilder.() -> Unit) = add(RichTextTextMention(buildRichText(block), user)) fun customEmoji(customEmojiId: CustomEmojiId, alternativeText: String) = @@ -69,44 +70,44 @@ class RichTextBuilder { fun mathematicalExpression(expression: String) = add(RichTextMathematicalExpression(expression)) - fun url(url: String, text: String) = add(RichTextUrl(RichTextPlain(text), url)) + fun url(text: String, url: String) = add(RichTextUrl(RichTextPlain(text), url)) fun url(url: String, block: RichTextBuilder.() -> Unit) = add(RichTextUrl(buildRichText(block), url)) - fun email(emailAddress: String, text: String) = add(RichTextEmailAddress(RichTextPlain(text), emailAddress)) + fun email(text: String, emailAddress: String) = add(RichTextEmailAddress(RichTextPlain(text), emailAddress)) fun email(emailAddress: String, block: RichTextBuilder.() -> Unit) = add(RichTextEmailAddress(buildRichText(block), emailAddress)) - fun phone(phoneNumber: String, text: String) = add(RichTextPhoneNumber(RichTextPlain(text), phoneNumber)) + fun phone(text: String, phoneNumber: String) = add(RichTextPhoneNumber(RichTextPlain(text), phoneNumber)) fun phone(phoneNumber: String, block: RichTextBuilder.() -> Unit) = add(RichTextPhoneNumber(buildRichText(block), phoneNumber)) - fun bankCard(bankCardNumber: String, text: String) = add(RichTextBankCardNumber(RichTextPlain(text), bankCardNumber)) + fun bankCard(text: String, bankCardNumber: String) = add(RichTextBankCardNumber(RichTextPlain(text), bankCardNumber)) fun bankCard(bankCardNumber: String, block: RichTextBuilder.() -> Unit) = add(RichTextBankCardNumber(buildRichText(block), bankCardNumber)) - fun mention(username: String, text: String) = add(RichTextMention(RichTextPlain(text), username)) + fun mention(text: String, username: String) = add(RichTextMention(RichTextPlain(text), username)) fun mention(username: String, block: RichTextBuilder.() -> Unit) = add(RichTextMention(buildRichText(block), username)) - fun hashtag(hashtag: String, text: String) = add(RichTextHashtag(RichTextPlain(text), hashtag)) + fun hashtag(text: String, hashtag: String) = add(RichTextHashtag(RichTextPlain(text), hashtag)) fun hashtag(hashtag: String, block: RichTextBuilder.() -> Unit) = add(RichTextHashtag(buildRichText(block), hashtag)) - fun cashtag(cashtag: String, text: String) = add(RichTextCashtag(RichTextPlain(text), cashtag)) + fun cashtag(text: String, cashtag: String) = add(RichTextCashtag(RichTextPlain(text), cashtag)) fun cashtag(cashtag: String, block: RichTextBuilder.() -> Unit) = add(RichTextCashtag(buildRichText(block), cashtag)) - fun botCommand(botCommand: String, text: String) = add(RichTextBotCommand(RichTextPlain(text), botCommand)) + fun botCommand(text: String, botCommand: String) = add(RichTextBotCommand(RichTextPlain(text), botCommand)) fun botCommand(botCommand: String, block: RichTextBuilder.() -> Unit) = add(RichTextBotCommand(buildRichText(block), botCommand)) fun anchor(name: String) = add(RichTextAnchor(name)) - fun anchorLink(anchorName: String, text: String) = add(RichTextAnchorLink(RichTextPlain(text), anchorName)) + fun anchorLink(text: String, anchorName: String) = add(RichTextAnchorLink(RichTextPlain(text), anchorName)) fun anchorLink(anchorName: String, block: RichTextBuilder.() -> Unit) = add(RichTextAnchorLink(buildRichText(block), anchorName)) - fun reference(name: String, text: String) = add(RichTextReference(RichTextPlain(text), name)) + fun reference(text: String, name: String) = add(RichTextReference(RichTextPlain(text), name)) fun reference(name: String, block: RichTextBuilder.() -> Unit) = add(RichTextReference(buildRichText(block), name)) - fun referenceLink(referenceName: String, text: String) = + fun referenceLink(text: String, referenceName: String) = add(RichTextReferenceLink(RichTextPlain(text), referenceName)) fun referenceLink(referenceName: String, block: RichTextBuilder.() -> Unit) = add(RichTextReferenceLink(buildRichText(block), referenceName)) @@ -163,8 +164,8 @@ class RichBlocksBuilder { fun paragraph(text: String) = add(RichBlockParagraph(RichTextPlain(text))) fun paragraph(block: RichTextBuilder.() -> Unit) = add(RichBlockParagraph(buildRichText(block))) - fun heading(size: Int, text: String) = add(RichBlockSectionHeading(RichTextPlain(text), size)) - fun heading(size: Int, block: RichTextBuilder.() -> Unit) = add(RichBlockSectionHeading(buildRichText(block), size)) + fun heading(text: String, level: Int) = add(RichBlockSectionHeading(RichTextPlain(text), level)) + fun heading(level: Int, block: RichTextBuilder.() -> Unit) = add(RichBlockSectionHeading(buildRichText(block), level)) fun preformatted(text: String, language: String? = null) = add(RichBlockPreformatted(RichTextPlain(text), language)) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt index a708074dad..d31d779c5c 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt @@ -16,6 +16,7 @@ import dev.inmo.tgbotapi.types.internalUserLinkBeginning import dev.inmo.tgbotapi.types.nameField import dev.inmo.tgbotapi.types.phoneNumberField import dev.inmo.tgbotapi.types.referenceNameField +import dev.inmo.tgbotapi.types.TelegramDate import dev.inmo.tgbotapi.types.textField import dev.inmo.tgbotapi.types.typeField import dev.inmo.tgbotapi.types.unixTimeField @@ -262,7 +263,7 @@ data class RichTextDateTime( @SerialName(textField) val text: RichText, @SerialName(unixTimeField) - val unixTime: Long, + val unixTime: TelegramDate, @SerialName(dateTimeFormatField) val dateTimeFormat: String ) : RichTextEntity { @@ -276,10 +277,10 @@ data class RichTextDateTime( companion object { const val TYPE = "date_time" - fun markdown(text: RichText, unixTime: Long, dateTimeFormat: String): String = - "![${text.markdown}](tg://time?unix=$unixTime&format=$dateTimeFormat)" - fun html(text: RichText, unixTime: Long, dateTimeFormat: String): String = - "${text.html}" + fun markdown(text: RichText, unixTime: TelegramDate, dateTimeFormat: String): String = + "![${text.markdown}](tg://time?unix=${unixTime.date}&format=$dateTimeFormat)" + fun html(text: RichText, unixTime: TelegramDate, dateTimeFormat: String): String = + "${text.html}" } } diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt index 774a996e72..e8d9b25824 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt @@ -39,7 +39,7 @@ class RichMessageSerializationTest { val heading = message.blocks[1] as RichBlockSectionHeading assertEquals(RichTextPlain("Title"), heading.text) - assertEquals(1, heading.size) + assertEquals(1, heading.level) assertTrue(message.blocks[2] is RichBlockDivider) diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDslTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDslTest.kt index c4f3ca274c..a32140c8ee 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDslTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDslTest.kt @@ -39,7 +39,7 @@ class RichTextDslTest { @Test fun buildsBlocks() { val blocks = buildRichBlocks { - heading(1, "Title") + heading("Title", 1) paragraph { plain("Hello ") bold("world") diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt index 18c8d288c7..77ddc4fe0e 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt @@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.types.ChatId import dev.inmo.tgbotapi.types.CustomEmojiId import dev.inmo.tgbotapi.types.RawChatId +import dev.inmo.tgbotapi.types.TelegramDate import dev.inmo.tgbotapi.types.chat.CommonUser import kotlin.test.Test import kotlin.test.assertEquals @@ -73,7 +74,7 @@ class RichTextFormattingTest { @Test fun dateTime() { - val entity = RichTextDateTime(RichTextPlain("now"), 1647531900L, "wDT") + val entity = RichTextDateTime(RichTextPlain("now"), TelegramDate(1647531900L), "wDT") assertEquals("![now](tg://time?unix=1647531900&format=wDT)", entity.markdown) assertEquals("now", entity.html) }