diff --git a/CHANGELOG.md b/CHANGELOG.md index 608aa050e9..078ebab0c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # TelegramBotAPI changelog +## 25.0.0 + ## 24.0.2 * `Version`: diff --git a/gradle.properties b/gradle.properties index b70c3b85aa..f76aa4a978 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,4 @@ kotlin.incremental=true kotlin.incremental.js=true library_group=dev.inmo -library_version=24.0.2 +library_version=25.0.0 diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessages.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessages.kt new file mode 100644 index 0000000000..4e68eaa0ca --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessages.kt @@ -0,0 +1,20 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.micro_utils.ksp.variations.GenerateVariations +import dev.inmo.micro_utils.ksp.variations.GenerationVariant +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.DeleteBusinessMessages +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.chat.Chat +import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage + +@GenerateVariations +public suspend fun TelegramBot.deleteBusinessMessages( + businessConnectionId: BusinessConnectionId, + @GenerationVariant(List::class, "messages.map { it.messageId }", "messages", AccessibleMessage::class) + messageIds: List +): Boolean = execute( + DeleteBusinessMessages(businessConnectionId, messageIds) +) diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessagesGeneratedVariation.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessagesGeneratedVariation.kt new file mode 100644 index 0000000000..3afc52db65 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/DeleteBusinessMessagesGeneratedVariation.kt @@ -0,0 +1,16 @@ +// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY +// TO REGENERATE IT JUST DELETE FILE +// ORIGINAL FILE: DeleteBusinessMessages.kt +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage +import kotlin.Boolean +import kotlin.collections.List + +public suspend fun TelegramBot.deleteBusinessMessages(businessConnectionId: BusinessConnectionId, + messages: List): Boolean = deleteBusinessMessages( + businessConnectionId = businessConnectionId, messageIds = with(messages) {messages.map { + it.messageId }} +) diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountStarBalance.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountStarBalance.kt new file mode 100644 index 0000000000..48e26bc641 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/GetBusinessAccountStarBalance.kt @@ -0,0 +1,12 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.GetBusinessAccountStarBalance +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.payments.stars.StarAmount + +public suspend fun TelegramBot.getBusinessAccountStarBalance( + businessConnectionId: BusinessConnectionId +): StarAmount = execute( + GetBusinessAccountStarBalance(businessConnectionId) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessage.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessage.kt new file mode 100644 index 0000000000..4ef29107f1 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessage.kt @@ -0,0 +1,27 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.micro_utils.ksp.variations.GenerateVariations +import dev.inmo.micro_utils.ksp.variations.GenerationVariant +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.ReadBusinessMessage +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.ChatId +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.chat.Chat +import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage +import dev.inmo.tgbotapi.types.toChatId + +@GenerateVariations +public suspend fun TelegramBot.readBusinessMessage( + businessConnectionId: BusinessConnectionId, + @GenerationVariant(Chat::class, "chat.id.toChatId()", "chat") + chatId: ChatId, + messageId: MessageId +): Boolean = execute( + ReadBusinessMessage(businessConnectionId, chatId, messageId) +) + +public suspend fun TelegramBot.readBusinessMessage( + businessConnectionId: BusinessConnectionId, + message: AccessibleMessage +): Boolean = readBusinessMessage(businessConnectionId, message.chat.id.toChatId(), message.messageId) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessageGeneratedVariation.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessageGeneratedVariation.kt new file mode 100644 index 0000000000..bb09bbb6eb --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/ReadBusinessMessageGeneratedVariation.kt @@ -0,0 +1,20 @@ +// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY +// TO REGENERATE IT JUST DELETE FILE +// ORIGINAL FILE: ReadBusinessMessage.kt +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.types.MessageId +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.chat.Chat +import dev.inmo.tgbotapi.types.toChatId +import kotlin.Boolean + +public suspend fun TelegramBot.readBusinessMessage( + businessConnectionId: BusinessConnectionId, + chat: Chat, + messageId: MessageId, +): Boolean = readBusinessMessage( + businessConnectionId = businessConnectionId, chatId = with(chat) {chat.id.toChatId()}, messageId + = messageId +) diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/RemoveBusinessAccountProfilePhoto.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/RemoveBusinessAccountProfilePhoto.kt new file mode 100644 index 0000000000..3f52210269 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/RemoveBusinessAccountProfilePhoto.kt @@ -0,0 +1,11 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.RemoveBusinessAccountProfilePhoto +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId + +public suspend fun TelegramBot.removeBusinessAccountProfilePhoto( + businessConnectionId: BusinessConnectionId +): Boolean = execute( + RemoveBusinessAccountProfilePhoto(businessConnectionId) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountBio.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountBio.kt new file mode 100644 index 0000000000..bc6805a8c4 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountBio.kt @@ -0,0 +1,12 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountBio +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId + +public suspend fun TelegramBot.setBusinessAccountBio( + businessConnectionId: BusinessConnectionId, + bio: String +): Boolean = execute( + SetBusinessAccountBio(businessConnectionId, bio) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountName.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountName.kt new file mode 100644 index 0000000000..f309411509 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountName.kt @@ -0,0 +1,13 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountName +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId + +public suspend fun TelegramBot.setBusinessAccountName( + businessConnectionId: BusinessConnectionId, + firstName: String, + lastName: String? = null +): Boolean = execute( + SetBusinessAccountName(businessConnectionId, firstName, lastName) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountProfilePhoto.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountProfilePhoto.kt new file mode 100644 index 0000000000..0861700062 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountProfilePhoto.kt @@ -0,0 +1,14 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.InputProfilePhoto +import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountProfilePhoto +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId + +public suspend fun TelegramBot.setBusinessAccountProfilePhoto( + businessConnectionId: BusinessConnectionId, + photo: InputProfilePhoto, + isPublic: Boolean = false +): Boolean = execute( + SetBusinessAccountProfilePhoto(businessConnectionId, photo, isPublic) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsername.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsername.kt new file mode 100644 index 0000000000..3d6d7fb499 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsername.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.micro_utils.ksp.variations.GenerateVariations +import dev.inmo.micro_utils.ksp.variations.GenerationVariant +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.SetBusinessAccountUsername +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.Username + +@GenerateVariations +public suspend fun TelegramBot.setBusinessAccountUsername( + businessConnectionId: BusinessConnectionId, + @GenerationVariant(String::class, "Username(username)", "username") + username: Username +): Boolean = execute( + SetBusinessAccountUsername(businessConnectionId, username) +) \ No newline at end of file diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsernameGeneratedVariation.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsernameGeneratedVariation.kt new file mode 100644 index 0000000000..9b7672edb6 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/SetBusinessAccountUsernameGeneratedVariation.kt @@ -0,0 +1,16 @@ +// THIS CODE HAVE BEEN GENERATED AUTOMATICALLY +// TO REGENERATE IT JUST DELETE FILE +// ORIGINAL FILE: SetBusinessAccountUsername.kt +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import kotlin.Boolean +import kotlin.String + +public suspend + fun TelegramBot.setBusinessAccountUsername(businessConnectionId: BusinessConnectionId, + username: String): Boolean = setBusinessAccountUsername( + businessConnectionId = businessConnectionId, username = with(username) { Username(username) } +) diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/TransferBusinessAccountStarBalance.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/TransferBusinessAccountStarBalance.kt new file mode 100644 index 0000000000..2f6a3f29a2 --- /dev/null +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/business/TransferBusinessAccountStarBalance.kt @@ -0,0 +1,13 @@ +package dev.inmo.tgbotapi.extensions.api.business + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.business_connection.TransferBusinessAccountStarBalance +import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId +import dev.inmo.tgbotapi.types.payments.stars.StarAmount + +public suspend fun TelegramBot.transferBusinessAccountStarBalance( + businessConnectionId: BusinessConnectionId, + amount: Int +): Boolean = execute( + TransferBusinessAccountStarBalance(businessConnectionId, amount) +) \ No newline at end of file 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..9fdcf02843 --- /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? = null +) : 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 029644ea93..692ad76685 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 @@ -20,6 +20,7 @@ typealias GooglePlaceType = String typealias MembersLimit = Int typealias Seconds = Int +typealias DoubleSeconds = Double typealias MilliSeconds = Long typealias LongSeconds = Long typealias UnixTimeStamp = LongSeconds @@ -95,7 +96,7 @@ val openPeriodPollSecondsLimit = 5 .. 600 val membersLimit = 1 .. 99999 val suggestedTipAmountsLimit = 1 .. 4 - +git val inputFieldPlaceholderLimit = 1 .. 64 val emojisInStickerLimit = 1 .. 20 @@ -187,6 +188,19 @@ const val hasMainWebAppField = "has_main_web_app" const val canJoinGroupsField = "can_join_groups" const val canReadAllGroupMessagesField = "can_read_all_group_messages" const val canReplyField = "can_reply" +const val canReadMessagesField = "can_read_messages" +const val canDeleteOutgoingMessagesField = "can_delete_outgoing_messages" +const val canDeleteAllMessagesField = "can_delete_all_messages" +const val canEditNameField = "can_edit_name" +const val canEditBioField = "can_edit_bio" +const val canEditProfilePhotoField = "can_edit_profile_photo" +const val canEditUsernameField = "can_edit_username" +const val canChangeGiftSettingsField = "can_change_gift_settings" +const val canViewGiftsAndStarsField = "can_view_gifts_and_stars" +const val canConvertGiftsToStarsField = "can_convert_gifts_to_stars" +const val canTransferAndUpgradeGiftsField = "can_transfer_and_upgrade_gifts" +const val canTransferStarsField = "can_transfer_stars" +const val canManageStoriesField = "can_manage_stories" const val supportInlineQueriesField = "supports_inline_queries" const val canConnectToBusinessField = "can_connect_to_business" const val textEntitiesField = "text_entities" @@ -494,6 +508,8 @@ 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" const val rarityPerMilleField = "rarity_per_mille" @@ -597,6 +613,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/business_connection/BusinessBotRights.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessBotRights.kt new file mode 100644 index 0000000000..5bdde3368f --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessBotRights.kt @@ -0,0 +1,50 @@ +package dev.inmo.tgbotapi.types.business_connection + +import dev.inmo.tgbotapi.types.canChangeGiftSettingsField +import dev.inmo.tgbotapi.types.canConvertGiftsToStarsField +import dev.inmo.tgbotapi.types.canDeleteAllMessagesField +import dev.inmo.tgbotapi.types.canDeleteOutgoingMessagesField +import dev.inmo.tgbotapi.types.canEditBioField +import dev.inmo.tgbotapi.types.canEditNameField +import dev.inmo.tgbotapi.types.canEditProfilePhotoField +import dev.inmo.tgbotapi.types.canEditUsernameField +import dev.inmo.tgbotapi.types.canManageStoriesField +import dev.inmo.tgbotapi.types.canReadMessagesField +import dev.inmo.tgbotapi.types.canReplyField +import dev.inmo.tgbotapi.types.canTransferAndUpgradeGiftsField +import dev.inmo.tgbotapi.types.canTransferStarsField +import dev.inmo.tgbotapi.types.canViewGiftsAndStarsField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class BusinessBotRights( + @SerialName(canReplyField) + val canReply: Boolean = false, + @SerialName(canReadMessagesField) + val canMarkMessagesAsRead: Boolean = false, + @SerialName(canDeleteOutgoingMessagesField) + val canDeleteOutgoingMessages: Boolean = false, + @SerialName(canDeleteAllMessagesField) + val canDeleteAllMessages: Boolean = false, + @SerialName(canEditNameField) + val canEditName: Boolean = false, + @SerialName(canEditBioField) + val canEditBio: Boolean = false, + @SerialName(canEditProfilePhotoField) + val canEditProfilePhoto: Boolean = false, + @SerialName(canEditUsernameField) + val canEditUsername: Boolean = false, + @SerialName(canChangeGiftSettingsField) + val canChangeGiftSettings: Boolean = false, + @SerialName(canViewGiftsAndStarsField) + val canViewGiftsAndStars: Boolean = false, + @SerialName(canConvertGiftsToStarsField) + val canConvertGiftsToStars: Boolean = false, + @SerialName(canTransferAndUpgradeGiftsField) + val canTransferAndUpgradeGifts: Boolean = false, + @SerialName(canTransferStarsField) + val canTransferStars: Boolean = false, + @SerialName(canManageStoriesField) + val canManageStories: Boolean = false, +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessConnection.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessConnection.kt index 6701bd1b25..e6226828e2 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessConnection.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/BusinessConnection.kt @@ -16,7 +16,9 @@ sealed interface BusinessConnection : WithBusinessConnectionId { val user: PreviewUser val userChatId: ChatId val date: TelegramDate + val rights: BusinessBotRights val canReply: Boolean + get() = rights.canReply val isEnabled: Boolean override val businessConnectionId: BusinessConnectionId @@ -32,8 +34,8 @@ sealed interface BusinessConnection : WithBusinessConnectionId { override val userChatId: ChatId, @SerialName(dateField) override val date: TelegramDate, - @SerialName(canReplyField) - override val canReply: Boolean, + @SerialName(rightsField) + override val rights: BusinessBotRights = BusinessBotRights(), ) : BusinessConnection { @EncodeDefault override val isEnabled: Boolean = true @@ -49,8 +51,8 @@ sealed interface BusinessConnection : WithBusinessConnectionId { override val userChatId: ChatId, @SerialName(dateField) override val date: TelegramDate, - @SerialName(canReplyField) - override val canReply: Boolean, + @SerialName(rightsField) + override val rights: BusinessBotRights = BusinessBotRights(), ) : BusinessConnection { @EncodeDefault override val isEnabled: Boolean = false diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/RawBusinessConnection.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/RawBusinessConnection.kt index f90c682fd0..b9e9f35c2e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/RawBusinessConnection.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/business_connection/RawBusinessConnection.kt @@ -15,8 +15,8 @@ internal data class RawBusinessConnection( val userChatId: ChatId, @SerialName(dateField) val date: TelegramDate, - @SerialName(canReplyField) - val canReply: Boolean, + @SerialName(rightsField) + val rights: BusinessBotRights = BusinessBotRights(), @SerialName(isEnabledField) val isEnabled: Boolean ) { @@ -27,14 +27,14 @@ internal data class RawBusinessConnection( user = user, userChatId = userChatId, date = date, - canReply = canReply + rights = rights ) false -> BusinessConnection.Disabled( id = id, user = user, userChatId = userChatId, date = date, - canReply = canReply + rights = rights ) } @@ -43,7 +43,7 @@ internal data class RawBusinessConnection( user = businessConnection.user, userChatId = businessConnection.userChatId, date = businessConnection.date, - canReply = businessConnection.canReply, + rights = businessConnection.rights, isEnabled = businessConnection.isEnabled, ) } 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 + } +}