1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-03 15:19:30 +00:00

feat: added the giftPremiumSubscription method

This commit is contained in:
bpavuk
2025-04-16 19:49:49 +03:00
parent 1bde43ceaf
commit b407fc5c86
4 changed files with 116 additions and 2 deletions

View File

@@ -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
)
)

View File

@@ -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<Boolean>, 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<Boolean>
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()
)
}

View File

@@ -654,6 +654,7 @@ const val onlyNewMembersField = "only_new_members"
const val hasPublicWinnersField = "has_public_winners" const val hasPublicWinnersField = "has_public_winners"
const val prizeDescriptionField = "prize_description" const val prizeDescriptionField = "prize_description"
const val premiumSubscriptionMonthCountField = "premium_subscription_month_count" const val premiumSubscriptionMonthCountField = "premium_subscription_month_count"
const val monthCountField = "month_count"
const val winnersField = "winners" const val winnersField = "winners"
const val additionalChatCountField = "additional_chat_count" const val additionalChatCountField = "additional_chat_count"
const val unclaimedPrizeCountField = "unclaimed_prize_count" const val unclaimedPrizeCountField = "unclaimed_prize_count"

View File

@@ -48,6 +48,8 @@ sealed interface TransactionPartner {
data class User( data class User(
@SerialName(userField) @SerialName(userField)
val user: PreviewUser, val user: PreviewUser,
@SerialName(transactionTypeField)
val transactionType: String,
@SerialName(affiliateField) @SerialName(affiliateField)
val affiliate: AffiliateInfo? = null, val affiliate: AffiliateInfo? = null,
@SerialName(invoicePayloadField) @SerialName(invoicePayloadField)
@@ -63,8 +65,6 @@ sealed interface TransactionPartner {
val gift: Gift? = null, val gift: Gift? = null,
@SerialName(premiumSubscriptionDurationField) @SerialName(premiumSubscriptionDurationField)
val premiumSubscriptionDuration: Int? = null, val premiumSubscriptionDuration: Int? = null,
@SerialName(transactionTypeField)
val transactionType: String,
) : TransactionPartner, SubscriptionPeriodInfo { ) : TransactionPartner, SubscriptionPeriodInfo {
@EncodeDefault @EncodeDefault
override val type: String = Companion.type override val type: String = Companion.type