1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-04 15:49:41 +00:00

Merge branch '25.0.0' into api-v9.0-gifts

This commit is contained in:
Bodya
2025-04-16 16:37:24 +03:00
committed by GitHub
31 changed files with 706 additions and 11 deletions

View File

@@ -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<T: Any> : Request<T>, WithBusinessConnectionId {
interface Simple<T : Any> : BusinessRequest<T>, SimpleRequest<T>
interface Multipart<T : Any> : BusinessRequest<T>, MultipartRequest.Common<T>, SimpleRequest<T> {
override val data: SimpleRequest<T>
get() = this
}
}

View File

@@ -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<MessageId>
) : BusinessRequest.Simple<Boolean> {
override fun method(): String = "deleteBusinessMessages"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<StarAmount> {
override fun method(): String = "getBusinessAccountStarBalance"
override val resultDeserializer: DeserializationStrategy<StarAmount>
get() = StarAmount.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<String, MultipartFile>
@Serializable
data class Static(
@SerialName(photoField)
val photo: MultipartFile
) : InputProfilePhoto {
override val mediaPair: Pair<String, MultipartFile>
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<String, MultipartFile>
get() = animationField to animation
@EncodeDefault
override val type: String = "animated"
}
companion object : KSerializer<InputProfilePhoto> {
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)
}
}
}
}

View File

@@ -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<Boolean> {
override fun method(): String = "readBusinessMessage"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<Boolean> {
override fun method(): String = "removeBusinessAccountProfilePhoto"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<Boolean> {
override fun method(): String = "setBusinessAccountBio"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<Boolean> {
override fun method(): String = "setBusinessAccountName"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<Boolean> {
override fun method(): String = "setBusinessAccountProfilePhoto"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
override val mediaMap: Map<String, MultipartFile> = mapOf(
photo.mediaPair
)
}

View File

@@ -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<Boolean> {
override fun method(): String = "setBusinessAccountUsername"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

@@ -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<Boolean> {
override fun method(): String = "transferBusinessAccountStars"
override val resultDeserializer: DeserializationStrategy<Boolean>
get() = Boolean.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 <T> Decoder.deserializeWithRaw(serializer: KSerializer<T>): Pair<T, JsonElement?> {
return if (this is JsonDecoder) {
val json = decodeJsonElement()
this.json.decodeFromJsonElement(serializer, json) to json
} else {
serializer.deserialize(this) to null
}
}