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

add core requests for business account (excluding gifts)

This commit is contained in:
2025-04-16 18:07:45 +06:00
parent fd48a52266
commit b604444f7d
14 changed files with 436 additions and 0 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
) : 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

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

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