From b407fc5c86fa8a0f4c1ffc33116a222e03b059ed Mon Sep 17 00:00:00 2001 From: bpavuk <75901693+bpavuk@users.noreply.github.com> Date: Wed, 16 Apr 2025 19:49:49 +0300 Subject: [PATCH] feat: added the giftPremiumSubscription method --- .../api/gifts/GiftPremiumSubscription.kt | 30 +++++++ .../requests/gifts/GiftPremiumSubscription.kt | 83 +++++++++++++++++++ .../kotlin/dev/inmo/tgbotapi/types/Common.kt | 1 + .../payments/stars/TransactionPartner.kt | 4 +- 4 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/gifts/GiftPremiumSubscription.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/gifts/GiftPremiumSubscription.kt diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/gifts/GiftPremiumSubscription.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/gifts/GiftPremiumSubscription.kt new file mode 100644 index 0000000000..9174f947ce --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/gifts/GiftPremiumSubscription.kt @@ -0,0 +1,30 @@ +package dev.inmo.tgbotapi.extensions.api.gifts + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.gifts.GiftPremiumSubscription +import dev.inmo.tgbotapi.types.UserId +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList + +public suspend fun TelegramBot.giftPremiumSubscription( + userId: UserId, + monthCount: Int, + starCount: Int, + text: String, + parseMode: ParseMode? +): Boolean = execute( + GiftPremiumSubscription( + userId, monthCount, starCount, text, parseMode + ) +) + +public suspend fun TelegramBot.giftPremiumSubscription( + userId: UserId, + monthCount: Int, + starCount: Int, + textSources: TextSourcesList? = null, +): Boolean = execute( + GiftPremiumSubscription( + userId, monthCount, starCount, textSources + ) +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/gifts/GiftPremiumSubscription.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/gifts/GiftPremiumSubscription.kt new file mode 100644 index 0000000000..fd0ffd5efc --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/gifts/GiftPremiumSubscription.kt @@ -0,0 +1,83 @@ +package dev.inmo.tgbotapi.requests.gifts + +import dev.inmo.tgbotapi.abstracts.TextedOutput +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.UserId +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.RawMessageEntities +import dev.inmo.tgbotapi.types.message.asTextSources +import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList +import dev.inmo.tgbotapi.types.message.toRawMessageEntities +import dev.inmo.tgbotapi.types.monthCountField +import dev.inmo.tgbotapi.types.starCountField +import dev.inmo.tgbotapi.types.textEntitiesField +import dev.inmo.tgbotapi.types.textField +import dev.inmo.tgbotapi.types.textParseModeField +import dev.inmo.tgbotapi.types.userIdField +import dev.inmo.tgbotapi.utils.extensions.makeSourceString +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class GiftPremiumSubscription internal constructor( + @SerialName(userIdField) + val userId: UserId, + @SerialName(monthCountField) + val monthCount: Int, + @SerialName(starCountField) + val starCount: Int, + @SerialName(textField) + override val text: String? = null, + @SerialName(textParseModeField) + override val parseMode: ParseMode? = null, + @SerialName(textEntitiesField) + private val rawEntities: RawMessageEntities? = null, +) : SimpleRequest, TextedOutput { + override val textSources: TextSourcesList? by lazy { + rawEntities?.let { + text?.let { _ -> + it.asTextSources(text) + } + } + } + + override fun method(): String = "sendPremiumGift" + + override val requestSerializer: SerializationStrategy<*> + get() = serializer() + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + + constructor( + userId: UserId, + monthCount: Int, + starCount: Int, + text: String, + parseMode: ParseMode? + ) : this( + userId = userId, + monthCount = monthCount, + starCount = starCount, + text = text, + parseMode = parseMode, + rawEntities = null, + ) + + constructor( + userId: UserId, + monthCount: Int, + starCount: Int, + textSources: TextSourcesList? = null + ) : this( + userId = userId, + monthCount = monthCount, + starCount = starCount, + text = textSources?.makeSourceString(), + parseMode = null, + rawEntities = textSources?.toRawMessageEntities() + ) +} \ No newline at end of file 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 246f00cd9a..532948b31e 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 @@ -654,6 +654,7 @@ const val onlyNewMembersField = "only_new_members" const val hasPublicWinnersField = "has_public_winners" const val prizeDescriptionField = "prize_description" const val premiumSubscriptionMonthCountField = "premium_subscription_month_count" +const val monthCountField = "month_count" const val winnersField = "winners" const val additionalChatCountField = "additional_chat_count" const val unclaimedPrizeCountField = "unclaimed_prize_count" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt index 44929af278..53efc2dff7 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/TransactionPartner.kt @@ -48,6 +48,8 @@ sealed interface TransactionPartner { data class User( @SerialName(userField) val user: PreviewUser, + @SerialName(transactionTypeField) + val transactionType: String, @SerialName(affiliateField) val affiliate: AffiliateInfo? = null, @SerialName(invoicePayloadField) @@ -63,8 +65,6 @@ sealed interface TransactionPartner { val gift: Gift? = null, @SerialName(premiumSubscriptionDurationField) val premiumSubscriptionDuration: Int? = null, - @SerialName(transactionTypeField) - val transactionType: String, ) : TransactionPartner, SubscriptionPeriodInfo { @EncodeDefault override val type: String = Companion.type