From b604444f7dab2ee9aa427c30a20fa429cb57e9c5 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 16 Apr 2025 18:07:45 +0600 Subject: [PATCH] add core requests for business account (excluding gifts) --- .../requests/abstracts/BusinessRequest.kt | 13 ++++ .../DeleteBusinessMessages.kt | 27 ++++++++ .../GetBusinessAccountStarBalance.kt | 36 +++++++++++ .../business_connection/InputProfilePhoto.kt | 62 +++++++++++++++++++ .../ReadBusinessMessage.kt | 33 ++++++++++ .../RemoveBusinessAccountProfilePhoto.kt | 39 ++++++++++++ .../SetBusinessAccountBio.kt | 37 +++++++++++ .../SetBusinessAccountName.kt | 36 +++++++++++ .../SetBusinessAccountProfilePhoto.kt | 45 ++++++++++++++ .../SetBusinessAccountUsername.kt | 36 +++++++++++ .../TransferBusinessAccountStarBalance.kt | 39 ++++++++++++ .../kotlin/dev/inmo/tgbotapi/types/Common.kt | 4 ++ .../types/payments/stars/StarAmount.kt | 14 +++++ .../tgbotapi/utils/DeserializeWithUnknown.kt | 15 +++++ 14 files changed, 436 insertions(+) create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/abstracts/BusinessRequest.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/DeleteBusinessMessages.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/InputProfilePhoto.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/ReadBusinessMessage.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/RemoveBusinessAccountProfilePhoto.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountBio.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountName.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountProfilePhoto.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountUsername.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/TransferBusinessAccountStarBalance.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/StarAmount.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DeserializeWithUnknown.kt diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/abstracts/BusinessRequest.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/abstracts/BusinessRequest.kt new file mode 100644 index 0000000000..4dbb31ff3b --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/abstracts/BusinessRequest.kt @@ -0,0 +1,13 @@ +package dev.inmo.tgbotapi.requests.abstracts + +import dev.inmo.tgbotapi.abstracts.types.WithBusinessConnectionId +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import kotlinx.serialization.json.JsonObject + +interface BusinessRequest : Request, WithBusinessConnectionId { + interface Simple : BusinessRequest, SimpleRequest + interface Multipart : BusinessRequest, MultipartRequest.Common, SimpleRequest { + override val data: SimpleRequest + get() = this + } +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/DeleteBusinessMessages.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/DeleteBusinessMessages.kt new file mode 100644 index 0000000000..11f49c1bfb --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/DeleteBusinessMessages.kt @@ -0,0 +1,27 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.messageIdsField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class DeleteBusinessMessages( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(messageIdsField) + val messagesIds: List +) : BusinessRequest.Simple { + override fun method(): String = "deleteBusinessMessages" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance.kt new file mode 100644 index 0000000000..a6f21b154c --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/GetBusinessAccountStarBalance.kt @@ -0,0 +1,36 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.bioField +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.payments.stars.StarAmount +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class GetBusinessAccountStarBalance( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, +) : BusinessRequest.Simple { + override fun method(): String = "getBusinessAccountStarBalance" + + override val resultDeserializer: DeserializationStrategy + get() = StarAmount.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/InputProfilePhoto.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/InputProfilePhoto.kt new file mode 100644 index 0000000000..ce3ca843d3 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/InputProfilePhoto.kt @@ -0,0 +1,62 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.types.DoubleSeconds +import dev.inmo.tgbotapi.types.Seconds +import dev.inmo.tgbotapi.types.StickerFormat +import dev.inmo.tgbotapi.types.animationField +import dev.inmo.tgbotapi.types.mainFrameTimestampField +import dev.inmo.tgbotapi.types.photoField +import dev.inmo.tgbotapi.utils.deserializeWithRaw +import kotlinx.serialization.EncodeDefault +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.JsonObject + +@Serializable +sealed interface InputProfilePhoto { + val type: String + val mediaPair: Pair + @Serializable + data class Static( + @SerialName(photoField) + val photo: MultipartFile + ) : InputProfilePhoto { + override val mediaPair: Pair + get() = photoField to photo + @EncodeDefault + override val type: String = "static" + } + @Serializable + data class Animated( + @SerialName(animationField) + val animation: MultipartFile, + @SerialName(mainFrameTimestampField) + val mainFrameTimestamp: DoubleSeconds? = null + ) : InputProfilePhoto { + override val mediaPair: Pair + get() = animationField to animation + @EncodeDefault + override val type: String = "animated" + } + + companion object : KSerializer { + override val descriptor: SerialDescriptor + get() = JsonObject.serializer().descriptor + + override fun deserialize(decoder: Decoder): InputProfilePhoto { + error("Deserialization is not supported yet") + } + + override fun serialize(encoder: Encoder, value: InputProfilePhoto) { + when (value) { + is Animated -> Animated.serializer().serialize(encoder, value) + is Static -> Static.serializer().serialize(encoder, value) + } + } + } +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/ReadBusinessMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/ReadBusinessMessage.kt new file mode 100644 index 0000000000..71286d3fb3 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/ReadBusinessMessage.kt @@ -0,0 +1,33 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class ReadBusinessMessage( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(chatIdField) + val chatId: ChatId, + @SerialName(messageIdField) + val messageId: MessageId +) : BusinessRequest.Simple { + override fun method(): String = "readBusinessMessage" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/RemoveBusinessAccountProfilePhoto.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/RemoveBusinessAccountProfilePhoto.kt new file mode 100644 index 0000000000..58e70d9458 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/RemoveBusinessAccountProfilePhoto.kt @@ -0,0 +1,39 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.isPublicField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.photoField +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class RemoveBusinessAccountProfilePhoto( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(isPublicField) + val isPublic: Boolean = false +) : BusinessRequest.Simple { + override fun method(): String = "removeBusinessAccountProfilePhoto" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountBio.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountBio.kt new file mode 100644 index 0000000000..fc1157b260 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountBio.kt @@ -0,0 +1,37 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.bioField +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class SetBusinessAccountBio( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(bioField) + val bio: String +) : BusinessRequest.Simple { + override fun method(): String = "setBusinessAccountBio" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountName.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountName.kt new file mode 100644 index 0000000000..26a97883fa --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountName.kt @@ -0,0 +1,36 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class SetBusinessAccountName( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(firstNameField) + val firstName: String, + @SerialName(lastNameField) + val lastName: String +) : BusinessRequest.Simple { + override fun method(): String = "setBusinessAccountName" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountProfilePhoto.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountProfilePhoto.kt new file mode 100644 index 0000000000..c55f828fa4 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountProfilePhoto.kt @@ -0,0 +1,45 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.isPublicField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.photoField +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class SetBusinessAccountProfilePhoto( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(photoField) + val photo: InputProfilePhoto, + @SerialName(isPublicField) + val isPublic: Boolean = false +) : BusinessRequest.Multipart { + override fun method(): String = "setBusinessAccountProfilePhoto" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() + + override val mediaMap: Map = mapOf( + photo.mediaPair + ) +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountUsername.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountUsername.kt new file mode 100644 index 0000000000..65c6df71fc --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/SetBusinessAccountUsername.kt @@ -0,0 +1,36 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class SetBusinessAccountUsername( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(usernameField) + val username: Username +) : BusinessRequest.Simple { + override fun method(): String = "setBusinessAccountUsername" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = serializer() +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/TransferBusinessAccountStarBalance.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/TransferBusinessAccountStarBalance.kt new file mode 100644 index 0000000000..fad1e1b902 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/business_connection/TransferBusinessAccountStarBalance.kt @@ -0,0 +1,39 @@ +package dev.inmo.tgbotapi.requests.business_connection + +import dev.inmo.tgbotapi.requests.abstracts.BusinessRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.bioField +import dev.inmo.tgbotapi.types.businessConnectionIdField +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chatIdField +import dev.inmo.tgbotapi.types.firstNameField +import dev.inmo.tgbotapi.types.lastNameField +import dev.inmo.tgbotapi.types.message.RawMessage +import dev.inmo.tgbotapi.types.messageIdField +import dev.inmo.tgbotapi.types.messageIdsField +import dev.inmo.tgbotapi.types.payments.stars.StarAmount +import dev.inmo.tgbotapi.types.starCountField +import dev.inmo.tgbotapi.types.usernameField +import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.builtins.serializer + +@Serializable +data class TransferBusinessAccountStarBalance( + @SerialName(businessConnectionIdField) + override val businessConnectionId: BusinessConnectionId, + @SerialName(starCountField) + val starCount: Int +) : BusinessRequest.Simple { + override fun method(): String = "transferBusinessAccountStars" + + override val resultDeserializer: DeserializationStrategy + get() = Boolean.serializer() + override val requestSerializer: SerializationStrategy<*> + get() = 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 6e2795035f..5ed47f6f00 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 @@ -19,6 +19,7 @@ typealias GooglePlaceType = String typealias MembersLimit = Int typealias Seconds = Int +typealias DoubleSeconds = Double typealias MilliSeconds = Long typealias LongSeconds = Long typealias UnixTimeStamp = LongSeconds @@ -505,6 +506,7 @@ const val creatorField = "creator" const val subscriptionPeriodField = "subscription_period" const val subscriptionPriceField = "subscription_price" const val copyTextField = "copy_text" +const val isPublicField = "is_public" const val giftField = "gift" const val giftsField = "gifts" @@ -600,6 +602,8 @@ const val voiceField = "voice" const val videoNoteField = "video_note" const val mediaField = "media" +const val mainFrameTimestampField = "main_frame_timestamp" + const val disableEditMessageField = "disable_edit_message" const val scoreField = "score" const val forceField = "force" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/StarAmount.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/StarAmount.kt new file mode 100644 index 0000000000..a7b2ad824a --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/payments/stars/StarAmount.kt @@ -0,0 +1,14 @@ +package dev.inmo.tgbotapi.types.payments.stars + +import dev.inmo.tgbotapi.types.amountField +import dev.inmo.tgbotapi.types.nanostarAmountField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class StarAmount( + @SerialName(amountField) + val amount: Long, + @SerialName(nanostarAmountField) + val nanostarAmount: Long = 0, +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DeserializeWithUnknown.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DeserializeWithUnknown.kt new file mode 100644 index 0000000000..0cd36caee6 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DeserializeWithUnknown.kt @@ -0,0 +1,15 @@ +package dev.inmo.tgbotapi.utils + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonElement + +fun Decoder.deserializeWithRaw(serializer: KSerializer): Pair { + return if (this is JsonDecoder) { + val json = decodeJsonElement() + this.json.decodeFromJsonElement(serializer, json) to json + } else { + serializer.deserialize(this) to null + } +}