mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-09-05 08:09:21 +00:00
Merge pull request #967 from bpavuk/api-v9.0-premium
API v9.0 - Telegram Premium
This commit is contained in:
@@ -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? = null
|
||||||
|
): 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
|
||||||
|
)
|
||||||
|
)
|
@@ -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 = "giftPremiumSubscription"
|
||||||
|
|
||||||
|
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()
|
||||||
|
)
|
||||||
|
}
|
@@ -501,6 +501,8 @@ const val questionParseModeField = "question_parse_mode"
|
|||||||
const val optionsField = "options"
|
const val optionsField = "options"
|
||||||
const val payField = "pay"
|
const val payField = "pay"
|
||||||
const val permissionsField = "permissions"
|
const val permissionsField = "permissions"
|
||||||
|
const val premiumSubscriptionDurationField = "premium_subscription_duration"
|
||||||
|
const val transactionTypeField = "transaction_type"
|
||||||
const val typeField = "type"
|
const val typeField = "type"
|
||||||
const val valueField = "value"
|
const val valueField = "value"
|
||||||
const val creatorField = "creator"
|
const val creatorField = "creator"
|
||||||
@@ -683,6 +685,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"
|
||||||
|
@@ -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: TransactionType,
|
||||||
@SerialName(affiliateField)
|
@SerialName(affiliateField)
|
||||||
val affiliate: AffiliateInfo? = null,
|
val affiliate: AffiliateInfo? = null,
|
||||||
@SerialName(invoicePayloadField)
|
@SerialName(invoicePayloadField)
|
||||||
@@ -59,8 +61,10 @@ sealed interface TransactionPartner {
|
|||||||
val paidMedia: List<PaidMedia>? = null,
|
val paidMedia: List<PaidMedia>? = null,
|
||||||
@SerialName(paidMediaPayloadField)
|
@SerialName(paidMediaPayloadField)
|
||||||
val paidMediaPayload: PaidMediaPayload? = null,
|
val paidMediaPayload: PaidMediaPayload? = null,
|
||||||
|
@SerialName(premiumSubscriptionDurationField)
|
||||||
|
val premiumSubscriptionDuration: Int? = null,
|
||||||
@SerialName(giftField)
|
@SerialName(giftField)
|
||||||
val gift: Gift.Regular? = null
|
val gift: Gift.Regular? = null,
|
||||||
) : TransactionPartner, SubscriptionPeriodInfo {
|
) : TransactionPartner, SubscriptionPeriodInfo {
|
||||||
@EncodeDefault
|
@EncodeDefault
|
||||||
override val type: String = Companion.type
|
override val type: String = Companion.type
|
||||||
@@ -150,6 +154,8 @@ sealed interface TransactionPartner {
|
|||||||
val subscription_period: TimeSpan? = null,
|
val subscription_period: TimeSpan? = null,
|
||||||
val paid_media: List<PaidMedia>? = null,
|
val paid_media: List<PaidMedia>? = null,
|
||||||
val paid_media_payload: PaidMediaPayload? = null,
|
val paid_media_payload: PaidMediaPayload? = null,
|
||||||
|
val premium_subscription_duration: Int? = null,
|
||||||
|
val transaction_type: TransactionType? = null,
|
||||||
val gift: Gift.Regular? = null,
|
val gift: Gift.Regular? = null,
|
||||||
val request_count: Int? = null,
|
val request_count: Int? = null,
|
||||||
val sponsor_user: PreviewBot? = null,
|
val sponsor_user: PreviewBot? = null,
|
||||||
@@ -180,7 +186,9 @@ sealed interface TransactionPartner {
|
|||||||
subscriptionPeriod = subscription_period,
|
subscriptionPeriod = subscription_period,
|
||||||
paidMedia = paid_media,
|
paidMedia = paid_media,
|
||||||
paidMediaPayload = paid_media_payload,
|
paidMediaPayload = paid_media_payload,
|
||||||
gift = gift
|
gift = gift,
|
||||||
|
premiumSubscriptionDuration = premium_subscription_duration,
|
||||||
|
transactionType = transaction_type ?: return unknown,
|
||||||
)
|
)
|
||||||
TelegramAPI.type -> TelegramAPI(
|
TelegramAPI.type -> TelegramAPI(
|
||||||
data.request_count ?: return unknown,
|
data.request_count ?: return unknown,
|
||||||
@@ -216,7 +224,9 @@ sealed interface TransactionPartner {
|
|||||||
subscription_period = subscriptionPeriod,
|
subscription_period = subscriptionPeriod,
|
||||||
paid_media = paidMedia,
|
paid_media = paidMedia,
|
||||||
paid_media_payload = paidMediaPayload,
|
paid_media_payload = paidMediaPayload,
|
||||||
gift = gift
|
gift = gift,
|
||||||
|
premium_subscription_duration = premiumSubscriptionDuration,
|
||||||
|
transaction_type = transactionType
|
||||||
)
|
)
|
||||||
is TelegramAPI -> Surrogate(type = value.type, request_count = requestCount)
|
is TelegramAPI -> Surrogate(type = value.type, request_count = requestCount)
|
||||||
is Fragment -> Surrogate(
|
is Fragment -> Surrogate(
|
||||||
|
@@ -0,0 +1,38 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.payments.stars
|
||||||
|
|
||||||
|
import kotlinx.serialization.KSerializer
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||||
|
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||||
|
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||||
|
import kotlinx.serialization.encoding.Decoder
|
||||||
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
|
||||||
|
@Serializable(with = TransactionTypeSerializer::class)
|
||||||
|
enum class TransactionType {
|
||||||
|
INVOICE_PAYMENT,
|
||||||
|
PAID_MEDIA_PAYMENT,
|
||||||
|
GIFT_PURCHASE,
|
||||||
|
PREMIUM_PURCHASE,
|
||||||
|
BUSINESS_ACCOUNT_TRANSFER,
|
||||||
|
UNKNOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
private object TransactionTypeSerializer : KSerializer<TransactionType> {
|
||||||
|
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
|
||||||
|
serialName = "dev.inmo.tgbotapi.types.payments.stars.TransactionType",
|
||||||
|
kind = PrimitiveKind.STRING
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): TransactionType {
|
||||||
|
return try {
|
||||||
|
TransactionType.valueOf(decoder.decodeString())
|
||||||
|
} catch (e: IllegalArgumentException) {
|
||||||
|
TransactionType.UNKNOWN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: TransactionType) {
|
||||||
|
encoder.encodeString(value.name)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user