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 398609ebfb..d58ed84330 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 @@ -520,6 +520,8 @@ const val startParameterField = "start_parameter" const val totalAmountField = "total_amount" const val invoicePayloadField = "invoice_payload" const val requestCountField = "request_count" +const val sponsorUserField = "sponsor_user" +const val commisionPerMilleField = "commission_per_mille" const val paidMediaPayloadField = "paid_media_payload" const val shippingOptionIdField = "shipping_option_id" const val shippingQueryIdField = "shipping_query_id" 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 6e526e9266..969aa8b32e 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 @@ -4,6 +4,7 @@ package dev.inmo.tgbotapi.types.payments.stars import dev.inmo.tgbotapi.abstracts.types.SubscriptionPeriodInfo import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.chat.PreviewBot import dev.inmo.tgbotapi.types.chat.PreviewUser import dev.inmo.tgbotapi.types.gifts.Gift import dev.inmo.tgbotapi.types.message.payments.PaidMedia @@ -80,6 +81,24 @@ sealed interface TransactionPartner { } } + /** + * Represents [TransactionPartnerAffiliateProgram](https://core.telegram.org/bots/api#transactionpartneraffiliateprogram) + */ + @Serializable(TransactionPartner.Companion::class) + data class AffiliateProgram( + @SerialName(sponsorUserField) + val sponsorUser: PreviewBot?, + @SerialName(commisionPerMilleField) + val commisionPerMille: Int, + ) : TransactionPartner { + @EncodeDefault + override val type: String = Companion.type + + companion object { + const val type: String = "affiliate_program" + } + } + @Serializable(TransactionPartner.Companion::class) data object Ads : TransactionPartner { @EncodeDefault @@ -105,7 +124,9 @@ sealed interface TransactionPartner { val withdrawal_state: RevenueWithdrawalState? = null, val user: PreviewUser? = null, val invoice_payload: InvoicePayload? = null, - val request_count: Int? = null + val request_count: Int? = null, + val sponsor_user: PreviewBot? = null, + val commission_per_mille: Int? = null, ) override val descriptor: SerialDescriptor @@ -129,23 +150,32 @@ sealed interface TransactionPartner { Fragment.type -> Fragment( data.withdrawal_state ?: return unknown, ) + AffiliateProgram.type -> AffiliateProgram( + data.sponsor_user, + data.commission_per_mille ?: return unknown, + ) else -> unknown } } override fun serialize(encoder: Encoder, value: TransactionPartner) { val surrogate = when (value) { - Other -> Surrogate(value.type) - Ads -> Surrogate(value.type) - is User -> Surrogate(value.type, user = value.user) - is TelegramAPI -> Surrogate(value.type, request_count = value.requestCount) + Other -> Surrogate(type = value.type) + Ads -> Surrogate(type = value.type) + is User -> Surrogate(type = value.type, user = value.user) + is TelegramAPI -> Surrogate(type = value.type, request_count = value.requestCount) is Fragment -> Surrogate( - value.type, - value.withdrawalState + type = value.type, + withdrawal_state = value.withdrawalState + ) + is AffiliateProgram -> Surrogate( + type = value.type, + sponsor_user = value.sponsorUser, + commission_per_mille = value.commisionPerMille ) is Unknown -> value.raw ?.let { return JsonElement.serializer().serialize(encoder, it) - } ?: Surrogate(value.type) + } ?: Surrogate(type = value.type) } Surrogate.serializer().serialize(encoder, surrogate)