All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.service.StickerService.kt Maven / Gradle / Ivy

package dev.kord.rest.service

import dev.kord.common.entity.DiscordMessageSticker
import dev.kord.common.entity.Snowflake
import dev.kord.rest.builder.guild.StickerModifyBuilder
import dev.kord.rest.json.request.GuildStickerCreateRequest
import dev.kord.rest.json.request.GuildStickerModifyRequest
import dev.kord.rest.json.request.MultipartGuildStickerCreateRequest
import dev.kord.rest.json.response.NitroStickerPacksResponse
import dev.kord.rest.request.RequestHandler
import dev.kord.rest.route.Route
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract

public class StickerService(requestHandler: RequestHandler) : RestService(requestHandler) {

    public suspend fun getNitroStickerPacks(): NitroStickerPacksResponse = call(Route.NitroStickerPacks)

    public suspend fun getGuildStickers(guildId: Snowflake): List =
        call(Route.GuildStickersGet) {
            keys[Route.GuildId] = guildId
        }

    public suspend fun getSticker(id: Snowflake): DiscordMessageSticker = call(Route.StickerGet) {
        keys[Route.StickerId] = id
    }

    public suspend fun getGuildSticker(guildId: Snowflake, id: Snowflake): DiscordMessageSticker =
        call(Route.GuildStickerGet) {
            keys[Route.GuildId] = guildId
            keys[Route.StickerId] = id
        }

    public suspend fun createGuildSticker(
        guildId: Snowflake,
        multipartRequest: MultipartGuildStickerCreateRequest,
    ): DiscordMessageSticker = call(Route.GuildStickerPost) {
        keys[Route.GuildId] = guildId
        body(GuildStickerCreateRequest.serializer(), multipartRequest.request)
        file(multipartRequest.file)
    }

    public suspend fun modifyGuildSticker(
        guildId: Snowflake,
        id: Snowflake,
        request: GuildStickerModifyRequest,
    ): DiscordMessageSticker = call(Route.GuildStickerPatch) {
        keys[Route.GuildId] = guildId
        keys[Route.StickerId] = id
        body(GuildStickerModifyRequest.serializer(), request)
    }

    public suspend inline fun modifyGuildSticker(
        guildId: Snowflake,
        id: Snowflake,
        builder: StickerModifyBuilder.() -> Unit,
    ): DiscordMessageSticker {
        contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) }
        val request = StickerModifyBuilder().apply(builder).toRequest()
        return modifyGuildSticker(guildId, id, request)
    }

    public suspend fun deleteSticker(guildId: Snowflake, id: Snowflake): Unit = call(Route.GuildStickerDelete) {
        keys[Route.GuildId] = guildId
        keys[Route.StickerId] = id
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy