From 4e1ecc0e34ad63458937984286d53b1b7379b143 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 2 Jan 2024 21:55:28 +0600 Subject: [PATCH] add LinkPreviewOptions --- .../kotlin/dev/inmo/tgbotapi/types/Common.kt | 4 + .../inmo/tgbotapi/types/LinkPreviewOptions.kt | 79 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/LinkPreviewOptions.kt diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt index 4ca6a283b2..70f7ee5c37 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt @@ -545,6 +545,10 @@ const val providerTokenField = "provider_token" const val providerDataField = "provider_data" const val usersField = "users" const val startDateField = "start_date" +const val showAboveTextField = "show_above_text" +const val isDisabledField = "is_disabled" +const val preferSmallMediaField = "prefer_small_media" +const val preferLargeMediaField = "prefer_large_media" const val requireNameField = "need_name" const val requirePhoneNumberField = "need_phone_number" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/LinkPreviewOptions.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/LinkPreviewOptions.kt new file mode 100644 index 0000000000..3db380420b --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/LinkPreviewOptions.kt @@ -0,0 +1,79 @@ +package dev.inmo.tgbotapi.types + +import kotlinx.serialization.Required +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +sealed interface LinkPreviewOptions { + val isDisabled: Boolean + val url: String? + val preferSmallMedia: Boolean + val preferLargeMedia: Boolean + val showAboveText: Boolean + + @Serializable + data object Disabled : LinkPreviewOptions { + @Required + @SerialName(isDisabledField) + override val isDisabled: Boolean = true + override val url: String? + get() = null + override val preferSmallMedia: Boolean + get() = false + override val preferLargeMedia: Boolean + get() = false + override val showAboveText: Boolean + get() = false + } + + @Serializable + data class Large( + @SerialName(urlField) + override val url: String?, + @SerialName(showAboveTextField) + override val showAboveText: Boolean + ) : LinkPreviewOptions { + @Required + @SerialName(isDisabledField) + override val isDisabled: Boolean = false + @Required + @SerialName(preferLargeMediaField) + override val preferLargeMedia: Boolean = true + override val preferSmallMedia: Boolean + get() = false + } + + @Serializable + data class Small( + @SerialName(urlField) + override val url: String?, + @SerialName(showAboveTextField) + override val showAboveText: Boolean + ) : LinkPreviewOptions { + @Required + @SerialName(isDisabledField) + override val isDisabled: Boolean = false + @Required + @SerialName(preferSmallMediaField) + override val preferSmallMedia: Boolean = true + override val preferLargeMedia: Boolean + get() = false + } + + @Serializable + data class Medium( + @SerialName(urlField) + override val url: String?, + @SerialName(showAboveTextField) + override val showAboveText: Boolean + ) : LinkPreviewOptions { + @Required + @SerialName(isDisabledField) + override val isDisabled: Boolean = false + override val preferSmallMedia: Boolean + get() = false + override val preferLargeMedia: Boolean + get() = false + } +} \ No newline at end of file