2022-08-13 07:01:09 +00:00
|
|
|
package dev.inmo.tgbotapi.requests.stickers
|
|
|
|
|
|
|
|
import dev.inmo.tgbotapi.requests.abstracts.*
|
|
|
|
import dev.inmo.tgbotapi.requests.common.CommonMultipartFileRequest
|
|
|
|
import dev.inmo.tgbotapi.requests.stickers.abstracts.CreateStickerSetAction
|
|
|
|
import dev.inmo.tgbotapi.types.*
|
|
|
|
import dev.inmo.tgbotapi.types.stickers.MaskPosition
|
|
|
|
import kotlinx.serialization.*
|
|
|
|
|
2023-03-10 08:00:57 +00:00
|
|
|
/**
|
|
|
|
* Will create one of [CreateNewStickerSet] types based on the first element of [stickers]
|
|
|
|
*
|
|
|
|
* @param needsRepainting Will be used only if you are creating custom emojis sticker pack (by passing [stickers] with
|
|
|
|
* type [InputSticker.WithKeywords.CustomEmoji])
|
|
|
|
*/
|
|
|
|
fun CreateNewStickerSet(
|
2022-08-13 07:01:09 +00:00
|
|
|
userId: UserId,
|
|
|
|
name: String,
|
|
|
|
title: String,
|
2023-03-10 08:00:57 +00:00
|
|
|
stickersFormat: StickerFormat,
|
|
|
|
stickers: List<InputSticker>,
|
|
|
|
needsRepainting: Boolean? = null
|
2022-08-13 07:01:09 +00:00
|
|
|
): Request<Boolean> {
|
2023-03-10 08:00:57 +00:00
|
|
|
val data = when(stickers.first()) {
|
|
|
|
is InputSticker.Mask -> CreateNewStickerSet.Mask(userId, name, title, stickersFormat, stickers.filterIsInstance<InputSticker.Mask>())
|
|
|
|
is InputSticker.WithKeywords.CustomEmoji -> CreateNewStickerSet.CustomEmoji(userId, name, title, stickersFormat, stickers.filterIsInstance<InputSticker.WithKeywords.CustomEmoji>(), needsRepainting)
|
|
|
|
is InputSticker.WithKeywords.Regular -> CreateNewStickerSet.Regular(userId, name, title, stickersFormat, stickers.filterIsInstance<InputSticker.WithKeywords.Regular>())
|
|
|
|
}
|
|
|
|
val multipartParts = stickers.mapNotNull { (it.sticker as? MultipartFile) }
|
|
|
|
return if (multipartParts.isNotEmpty()) {
|
2022-08-13 07:01:09 +00:00
|
|
|
CommonMultipartFileRequest(
|
|
|
|
data,
|
2023-03-10 08:00:57 +00:00
|
|
|
multipartParts.associateBy { it.fileId }
|
2022-08-13 07:01:09 +00:00
|
|
|
)
|
|
|
|
} else {
|
|
|
|
data
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Serializable
|
2023-03-10 08:00:57 +00:00
|
|
|
sealed interface CreateNewStickerSet : CreateStickerSetAction {
|
|
|
|
val stickerType: StickerType
|
|
|
|
val stickers: List<InputSticker>
|
|
|
|
val stickersFormat: StickerFormat
|
2022-08-13 07:01:09 +00:00
|
|
|
|
|
|
|
override val requestSerializer: SerializationStrategy<*>
|
|
|
|
get() = serializer()
|
|
|
|
|
|
|
|
override fun method(): String = "createNewStickerSet"
|
2023-03-10 08:00:57 +00:00
|
|
|
|
|
|
|
@Serializable
|
|
|
|
data class Regular(
|
|
|
|
@SerialName(userIdField)
|
|
|
|
override val userId: UserId,
|
|
|
|
@SerialName(nameField)
|
|
|
|
override val name: String,
|
|
|
|
@SerialName(titleField)
|
|
|
|
override val title: String,
|
|
|
|
@SerialName(stickerFormatField)
|
|
|
|
override val stickersFormat: StickerFormat,
|
|
|
|
@SerialName(stickersField)
|
|
|
|
override val stickers: List<InputSticker.WithKeywords.Regular>
|
|
|
|
) : CreateNewStickerSet {
|
|
|
|
@SerialName(stickerTypeField)
|
|
|
|
override val stickerType: StickerType
|
|
|
|
get() = StickerType.Regular
|
|
|
|
}
|
|
|
|
@Serializable
|
|
|
|
data class Mask(
|
|
|
|
@SerialName(userIdField)
|
|
|
|
override val userId: UserId,
|
|
|
|
@SerialName(nameField)
|
|
|
|
override val name: String,
|
|
|
|
@SerialName(titleField)
|
|
|
|
override val title: String,
|
|
|
|
@SerialName(stickerFormatField)
|
|
|
|
override val stickersFormat: StickerFormat,
|
|
|
|
@SerialName(stickersField)
|
|
|
|
override val stickers: List<InputSticker.Mask>
|
|
|
|
) : CreateNewStickerSet {
|
|
|
|
@SerialName(stickerTypeField)
|
|
|
|
override val stickerType: StickerType
|
|
|
|
get() = StickerType.Mask
|
|
|
|
}
|
|
|
|
@Serializable
|
|
|
|
data class CustomEmoji(
|
|
|
|
@SerialName(userIdField)
|
|
|
|
override val userId: UserId,
|
|
|
|
@SerialName(nameField)
|
|
|
|
override val name: String,
|
|
|
|
@SerialName(titleField)
|
|
|
|
override val title: String,
|
|
|
|
@SerialName(stickerFormatField)
|
|
|
|
override val stickersFormat: StickerFormat,
|
|
|
|
@SerialName(stickersField)
|
|
|
|
override val stickers: List<InputSticker.WithKeywords.CustomEmoji>,
|
|
|
|
@SerialName(needsRepaintingField)
|
|
|
|
val needsRepainting: Boolean? = null
|
|
|
|
) : CreateNewStickerSet {
|
|
|
|
@SerialName(stickerTypeField)
|
|
|
|
override val stickerType: StickerType
|
|
|
|
get() = StickerType.CustomEmoji
|
|
|
|
}
|
2022-08-13 07:01:09 +00:00
|
|
|
}
|