From d36b11c00244a1f4a70d5dd2ba675837bd1e3fb6 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 10 May 2025 10:57:33 +0600 Subject: [PATCH] add support of getBusinessAccountGifts --- tgbotapi.api/api/tgbotapi.api.api | 7 ++ .../api/business/GetBusinessAccountGifts.kt | 94 +++++++++++++++++++ tgbotapi.core/api/tgbotapi.core.api | 86 +++++++++++++++++ .../GetBusinessAccountGifts.kt | 54 +++++++++++ .../kotlin/dev/inmo/tgbotapi/types/Common.kt | 7 ++ .../dev/inmo/tgbotapi/types/OwnedGifts.kt | 15 +++ 6 files changed, 263 insertions(+) create mode 100644 tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountGifts.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/OwnedGifts.kt diff --git a/tgbotapi.api/api/tgbotapi.api.api b/tgbotapi.api/api/tgbotapi.api.api index 335886a40a..70626099d4 100644 --- a/tgbotapi.api/api/tgbotapi.api.api +++ b/tgbotapi.api/api/tgbotapi.api.api @@ -338,6 +338,13 @@ public final class dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessa public static final fun deleteBusinessMessages-wC12z2M (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } +public final class dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountGiftsKt { + public static final fun getBusinessAccountGifts-LATcL_E (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun getBusinessAccountGifts-LATcL_E$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun getBusinessAccountGiftsFlow-LATcL_E (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static synthetic fun getBusinessAccountGiftsFlow-LATcL_E$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +} + public final class dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountStarBalanceKt { public static final fun getBusinessAccountStarBalance-spp27rg (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountGifts.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountGifts.kt new file mode 100644 index 0000000000..ac54b5e3a6 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountGifts.kt @@ -0,0 +1,94 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.GetBusinessAccountGifts +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.OwnedGifts +import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlin.runCatching + +public suspend fun TelegramBot.getBusinessAccountGifts( + businessConnectionId: BusinessConnectionId, + excludeUnsaved: Boolean = false, + excludeSaved: Boolean = false, + excludeUnlimited: Boolean = false, + excludeLimited: Boolean = false, + excludeUnique: Boolean = false, + sortByPrice: Boolean = false, + offset: String? = null, + limit: Int? = null +): OwnedGifts = execute( + GetBusinessAccountGifts( + businessConnectionId, + excludeUnsaved, + excludeSaved, + excludeUnlimited, + excludeLimited, + excludeUnique, + sortByPrice, + offset, + limit + ) +) + +/** + * Creates a flow that emits business account gifts in a paginated manner. + * + * This function will automatically handle pagination by using the `nextOffset` from each response + * to fetch the next page of gifts until there are no more gifts to fetch. + * + * @param businessConnectionId The ID of the business connection + * @param excludeUnsaved Whether to exclude unsaved gifts + * @param excludeSaved Whether to exclude saved gifts + * @param excludeUnlimited Whether to exclude unlimited gifts + * @param excludeLimited Whether to exclude limited gifts + * @param excludeUnique Whether to exclude unique gifts + * @param sortByPrice Whether to sort gifts by price + * @param initialOffset The initial offset to start fetching from. If null, starts from the beginning + * @param limit The maximum number of gifts to fetch per request + * @param onErrorContinueChecker A function that determines whether to continue fetching on error. + * Returns true to continue, false to stop. Default is to stop on any error. + * @return A flow that emits [OwnedGifts] containing the fetched gifts + */ +public fun TelegramBot.getBusinessAccountGiftsFlow( + businessConnectionId: BusinessConnectionId, + excludeUnsaved: Boolean = false, + excludeSaved: Boolean = false, + excludeUnlimited: Boolean = false, + excludeLimited: Boolean = false, + excludeUnique: Boolean = false, + sortByPrice: Boolean = false, + initialOffset: String? = null, + limit: Int? = null, + onErrorContinueChecker: suspend (Throwable?) -> Boolean = { false } +): Flow> = flow { + var currentOffset = initialOffset + do { + val response = runCatching { + getBusinessAccountGifts( + businessConnectionId, + excludeUnsaved, + excludeSaved, + excludeUnlimited, + excludeLimited, + excludeUnique, + sortByPrice, + currentOffset, + limit + ) + } + if (response.isSuccess) { + val result = response.getOrThrow() + emit(result) + currentOffset = result.nextOffset + } else { + if (onErrorContinueChecker(response.exceptionOrNull())) { + continue + } else { + break + } + } + } while (currentOffset != null) +} \ No newline at end of file diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 8031683d8d..21edfc0199 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -1891,6 +1891,54 @@ public final class dev/inmo/tgbotapi/requests/business_connection/DeleteBusiness public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts : dev/inmo/tgbotapi/requests/abstracts/BusinessRequest$Simple { + public static final field Companion Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts$Companion; + public synthetic fun (Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-T-_HSQI ()Ljava/lang/String; + public final fun component2 ()Z + public final fun component3 ()Z + public final fun component4 ()Z + public final fun component5 ()Z + public final fun component6 ()Z + public final fun component7 ()Z + public final fun component8 ()Ljava/lang/String; + public final fun component9 ()Ljava/lang/Integer; + public final fun copy-beo5bKg (Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;)Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts; + public static synthetic fun copy-beo5bKg$default (Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts;Ljava/lang/String;ZZZZZZLjava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts; + public fun equals (Ljava/lang/Object;)Z + public fun getBusinessConnectionId-T-_HSQI ()Ljava/lang/String; + public synthetic fun getBusinessConnectionId-nXr5wdE ()Ljava/lang/String; + public final fun getExcludeLimited ()Z + public final fun getExcludeSaved ()Z + public final fun getExcludeUnique ()Z + public final fun getExcludeUnlimited ()Z + public final fun getExcludeUnsaved ()Z + public final fun getLimit ()Ljava/lang/Integer; + public final fun getOffset ()Ljava/lang/String; + public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy; + public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy; + public final fun getSortByPrice ()Z + public fun hashCode ()I + public fun method ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public synthetic class dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts$Companion { + public final fun getResultSerializer ()Lkotlinx/serialization/KSerializer; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance : dev/inmo/tgbotapi/requests/abstracts/BusinessRequest$Simple { public static final field Companion Ldev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance$Companion; public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -9470,6 +9518,11 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field entitiesField Ljava/lang/String; public static final field errorMessageField Ljava/lang/String; public static final field errorsField Ljava/lang/String; + public static final field excludeLimitedField Ljava/lang/String; + public static final field excludeSavedField Ljava/lang/String; + public static final field excludeUniqueField Ljava/lang/String; + public static final field excludeUnlimitedField Ljava/lang/String; + public static final field excludeUnsavedField Ljava/lang/String; public static final field expirationDateField Ljava/lang/String; public static final field expireDateField Ljava/lang/String; public static final field explanationEntitiesField Ljava/lang/String; @@ -9756,6 +9809,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field slowModeDelayField Ljava/lang/String; public static final field smallFileIdField Ljava/lang/String; public static final field smallFileUniqueIdField Ljava/lang/String; + public static final field sortByPriceField Ljava/lang/String; public static final field sourceField Ljava/lang/String; public static final field sponsorUserField Ljava/lang/String; public static final field starCountField Ljava/lang/String; @@ -12110,6 +12164,38 @@ public final class dev/inmo/tgbotapi/types/MigrateChatId : dev/inmo/tgbotapi/typ public fun toString ()Ljava/lang/String; } +public final class dev/inmo/tgbotapi/types/OwnedGifts { + public static final field Companion Ldev/inmo/tgbotapi/types/OwnedGifts$Companion; + public fun (ILjava/util/List;Ljava/lang/String;)V + public synthetic fun (ILjava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()I + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/lang/String; + public final fun copy (ILjava/util/List;Ljava/lang/String;)Ldev/inmo/tgbotapi/types/OwnedGifts; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/OwnedGifts;ILjava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/OwnedGifts; + public fun equals (Ljava/lang/Object;)Z + public final fun getGifts ()Ljava/util/List; + public final fun getNextOffset ()Ljava/lang/String; + public final fun getTotalCount ()I + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public synthetic class dev/inmo/tgbotapi/types/OwnedGifts$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public fun (Lkotlinx/serialization/KSerializer;)V + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/OwnedGifts; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/OwnedGifts;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public final fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/OwnedGifts$Companion { + public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/types/PaidMediaPayload { public static final field Companion Ldev/inmo/tgbotapi/types/PaidMediaPayload$Companion; public static final synthetic fun box-impl (Ljava/lang/String;)Ldev/inmo/tgbotapi/types/PaidMediaPayload; diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts.kt new file mode 100644 index 0000000000..7eb5a071b2 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountGifts.kt @@ -0,0 +1,54 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.micro_utils.common.Warning +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.types.OwnedGifts +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.excludeUnsavedField +import dev.inmo.tgbotapi.types.excludeSavedField +import dev.inmo.tgbotapi.types.excludeUnlimitedField +import dev.inmo.tgbotapi.types.excludeLimitedField +import dev.inmo.tgbotapi.types.excludeUniqueField +import dev.inmo.tgbotapi.types.sortByPriceField +import dev.inmo.tgbotapi.types.offsetField +import dev.inmo.tgbotapi.types.limitField +import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy + +@Serializable +data class GetBusinessAccountGifts( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(excludeUnsavedField) + val excludeUnsaved: Boolean = false, + @SerialName(excludeSavedField) + val excludeSaved: Boolean = false, + @SerialName(excludeUnlimitedField) + val excludeUnlimited: Boolean = false, + @SerialName(excludeLimitedField) + val excludeLimited: Boolean = false, + @SerialName(excludeUniqueField) + val excludeUnique: Boolean = false, + @SerialName(sortByPriceField) + val sortByPrice: Boolean = false, + @SerialName(offsetField) + val offset: String? = null, + @SerialName(limitField) + val limit: Int? = null, +) : BusinessRequest.Simple> { + override fun method(): String = "getBusinessAccountGifts" + + override val resultDeserializer: DeserializationStrategy> + get() = Companion.resultSerializer + override val requestSerializer: SerializationStrategy<*> + get() = serializer() + + companion object { + @Warning("This API can be changed without any warranties of backward compatibility") + val resultSerializer = OwnedGifts.serializer(GiftSentOrReceived.ReceivedInBusinessAccount.serializer()) + } +} \ 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 2cbc68fbe9..f1cac9ec86 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 @@ -723,6 +723,13 @@ const val limitedGiftsField = "limited_gifts" const val uniqueGiftsField = "unique_gifts" const val premiumSubscriptionField = "premium_subscription" +const val excludeUnsavedField = "exclude_unsaved" +const val excludeSavedField = "exclude_saved" +const val excludeUnlimitedField = "exclude_unlimited" +const val excludeLimitedField = "exclude_limited" +const val excludeUniqueField = "exclude_unique" +const val sortByPriceField = "sort_by_price" + const val businessConnectionIdField = "business_connection_id" const val businessIntroField = "business_intro" const val businessLocationField = "business_location" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/OwnedGifts.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/OwnedGifts.kt new file mode 100644 index 0000000000..cd92271476 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/OwnedGifts.kt @@ -0,0 +1,15 @@ +package dev.inmo.tgbotapi.types + +import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class OwnedGifts( + @SerialName(totalCountField) + val totalCount: Int, + @SerialName(giftsField) + val gifts: List, + @SerialName(nextOffsetField) + val nextOffset: String? = null +)