diff --git a/common/api/common.api b/common/api/common.api index c5b3b0f34e9..2c7851b0ba6 100644 --- a/common/api/common.api +++ b/common/api/common.api @@ -597,6 +597,67 @@ public final class dev/kord/common/entity/ApplicationCommandType$User : dev/kord public static final field INSTANCE Ldev/kord/common/entity/ApplicationCommandType$User; } +public final class dev/kord/common/entity/ApplicationEmojis : java/util/List, kotlin/jvm/internal/markers/KMappedMarker { + public static final field Companion Ldev/kord/common/entity/ApplicationEmojis$Companion; + public fun (Ljava/util/List;)V + public fun add (ILdev/kord/common/entity/DiscordEmoji;)V + public synthetic fun add (ILjava/lang/Object;)V + public fun add (Ldev/kord/common/entity/DiscordEmoji;)Z + public synthetic fun add (Ljava/lang/Object;)Z + public fun addAll (ILjava/util/Collection;)Z + public fun addAll (Ljava/util/Collection;)Z + public fun clear ()V + public final fun component1 ()Ljava/util/List; + public fun contains (Ldev/kord/common/entity/DiscordEmoji;)Z + public final fun contains (Ljava/lang/Object;)Z + public fun containsAll (Ljava/util/Collection;)Z + public final fun copy (Ljava/util/List;)Ldev/kord/common/entity/ApplicationEmojis; + public static synthetic fun copy$default (Ldev/kord/common/entity/ApplicationEmojis;Ljava/util/List;ILjava/lang/Object;)Ldev/kord/common/entity/ApplicationEmojis; + public fun equals (Ljava/lang/Object;)Z + public fun get (I)Ldev/kord/common/entity/DiscordEmoji; + public synthetic fun get (I)Ljava/lang/Object; + public final fun getItems ()Ljava/util/List; + public fun getSize ()I + public fun hashCode ()I + public fun indexOf (Ldev/kord/common/entity/DiscordEmoji;)I + public final fun indexOf (Ljava/lang/Object;)I + public fun isEmpty ()Z + public fun iterator ()Ljava/util/Iterator; + public fun lastIndexOf (Ldev/kord/common/entity/DiscordEmoji;)I + public final fun lastIndexOf (Ljava/lang/Object;)I + public fun listIterator ()Ljava/util/ListIterator; + public fun listIterator (I)Ljava/util/ListIterator; + public fun remove (I)Ldev/kord/common/entity/DiscordEmoji; + public synthetic fun remove (I)Ljava/lang/Object; + public fun remove (Ljava/lang/Object;)Z + public fun removeAll (Ljava/util/Collection;)Z + public fun replaceAll (Ljava/util/function/UnaryOperator;)V + public fun retainAll (Ljava/util/Collection;)Z + public fun set (ILdev/kord/common/entity/DiscordEmoji;)Ldev/kord/common/entity/DiscordEmoji; + public synthetic fun set (ILjava/lang/Object;)Ljava/lang/Object; + public final fun size ()I + public fun sort (Ljava/util/Comparator;)V + public fun subList (II)Ljava/util/List; + public fun toArray ()[Ljava/lang/Object; + public fun toArray ([Ljava/lang/Object;)[Ljava/lang/Object; + public fun toString ()Ljava/lang/String; +} + +public synthetic class dev/kord/common/entity/ApplicationEmojis$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/common/entity/ApplicationEmojis$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/ApplicationEmojis; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/common/entity/ApplicationEmojis;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/ApplicationEmojis$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public abstract class dev/kord/common/entity/ApplicationFlag { public static final field Companion Ldev/kord/common/entity/ApplicationFlag$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V diff --git a/common/api/common.klib.api b/common/api/common.klib.api index 9308b8f8f82..2eb9aba29c1 100644 --- a/common/api/common.klib.api +++ b/common/api/common.klib.api @@ -351,6 +351,47 @@ final class dev.kord.common.entity/ApplicationCommandOption { // dev.kord.common } } +final class dev.kord.common.entity/ApplicationEmojis : kotlin.collections/List { // dev.kord.common.entity/ApplicationEmojis|null[0] + constructor (kotlin.collections/List) // dev.kord.common.entity/ApplicationEmojis.|(kotlin.collections.List){}[0] + + final val items // dev.kord.common.entity/ApplicationEmojis.items|{}items[0] + final fun (): kotlin.collections/List // dev.kord.common.entity/ApplicationEmojis.items.|(){}[0] + final val size // dev.kord.common.entity/ApplicationEmojis.size|{}size[0] + final fun (): kotlin/Int // dev.kord.common.entity/ApplicationEmojis.size.|(){}[0] + + final fun asJsReadonlyArrayView(): kotlin.js.collections/JsReadonlyArray // dev.kord.common.entity/ApplicationEmojis.asJsReadonlyArrayView|asJsReadonlyArrayView(){}[0] + final fun component1(): kotlin.collections/List // dev.kord.common.entity/ApplicationEmojis.component1|component1(){}[0] + final fun contains(dev.kord.common.entity/DiscordEmoji): kotlin/Boolean // dev.kord.common.entity/ApplicationEmojis.contains|contains(dev.kord.common.entity.DiscordEmoji){}[0] + final fun containsAll(kotlin.collections/Collection): kotlin/Boolean // dev.kord.common.entity/ApplicationEmojis.containsAll|containsAll(kotlin.collections.Collection){}[0] + final fun copy(kotlin.collections/List = ...): dev.kord.common.entity/ApplicationEmojis // dev.kord.common.entity/ApplicationEmojis.copy|copy(kotlin.collections.List){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // dev.kord.common.entity/ApplicationEmojis.equals|equals(kotlin.Any?){}[0] + final fun get(kotlin/Int): dev.kord.common.entity/DiscordEmoji // dev.kord.common.entity/ApplicationEmojis.get|get(kotlin.Int){}[0] + final fun hashCode(): kotlin/Int // dev.kord.common.entity/ApplicationEmojis.hashCode|hashCode(){}[0] + final fun indexOf(dev.kord.common.entity/DiscordEmoji): kotlin/Int // dev.kord.common.entity/ApplicationEmojis.indexOf|indexOf(dev.kord.common.entity.DiscordEmoji){}[0] + final fun isEmpty(): kotlin/Boolean // dev.kord.common.entity/ApplicationEmojis.isEmpty|isEmpty(){}[0] + final fun iterator(): kotlin.collections/Iterator // dev.kord.common.entity/ApplicationEmojis.iterator|iterator(){}[0] + final fun lastIndexOf(dev.kord.common.entity/DiscordEmoji): kotlin/Int // dev.kord.common.entity/ApplicationEmojis.lastIndexOf|lastIndexOf(dev.kord.common.entity.DiscordEmoji){}[0] + final fun listIterator(): kotlin.collections/ListIterator // dev.kord.common.entity/ApplicationEmojis.listIterator|listIterator(){}[0] + final fun listIterator(kotlin/Int): kotlin.collections/ListIterator // dev.kord.common.entity/ApplicationEmojis.listIterator|listIterator(kotlin.Int){}[0] + final fun subList(kotlin/Int, kotlin/Int): kotlin.collections/List // dev.kord.common.entity/ApplicationEmojis.subList|subList(kotlin.Int;kotlin.Int){}[0] + final fun toString(): kotlin/String // dev.kord.common.entity/ApplicationEmojis.toString|toString(){}[0] + + final object $serializer : kotlinx.serialization.internal/GeneratedSerializer { // dev.kord.common.entity/ApplicationEmojis.$serializer|null[0] + final val descriptor // dev.kord.common.entity/ApplicationEmojis.$serializer.descriptor|{}descriptor[0] + final fun (): kotlinx.serialization.descriptors/SerialDescriptor // dev.kord.common.entity/ApplicationEmojis.$serializer.descriptor.|(){}[0] + + final fun childSerializers(): kotlin/Array> // dev.kord.common.entity/ApplicationEmojis.$serializer.childSerializers|childSerializers(){}[0] + final fun deserialize(kotlinx.serialization.encoding/Decoder): dev.kord.common.entity/ApplicationEmojis // dev.kord.common.entity/ApplicationEmojis.$serializer.deserialize|deserialize(kotlinx.serialization.encoding.Decoder){}[0] + final fun serialize(kotlinx.serialization.encoding/Encoder, dev.kord.common.entity/ApplicationEmojis) // dev.kord.common.entity/ApplicationEmojis.$serializer.serialize|serialize(kotlinx.serialization.encoding.Encoder;dev.kord.common.entity.ApplicationEmojis){}[0] + } + + final object Companion { // dev.kord.common.entity/ApplicationEmojis.Companion|null[0] + final val $childSerializers // dev.kord.common.entity/ApplicationEmojis.Companion.$childSerializers|{}$childSerializers[0] + + final fun serializer(): kotlinx.serialization/KSerializer // dev.kord.common.entity/ApplicationEmojis.Companion.serializer|serializer(){}[0] + } +} + final class dev.kord.common.entity/ApplicationFlags { // dev.kord.common.entity/ApplicationFlags|null[0] final val code // dev.kord.common.entity/ApplicationFlags.code|{}code[0] final fun (): kotlin/Int // dev.kord.common.entity/ApplicationFlags.code.|(){}[0] diff --git a/common/src/commonMain/kotlin/entity/DiscordEmoji.kt b/common/src/commonMain/kotlin/entity/DiscordEmoji.kt index 62ddba911fa..100f4bbcd81 100644 --- a/common/src/commonMain/kotlin/entity/DiscordEmoji.kt +++ b/common/src/commonMain/kotlin/entity/DiscordEmoji.kt @@ -51,3 +51,11 @@ public data class DiscordPartialEmoji( val name: String? = null, val animated: OptionalBoolean = OptionalBoolean.Missing, ) + +/** + * List of application [emojis][DiscordEmoji]. + * + * @property items the list of emojis + */ +@Serializable +public data class ApplicationEmojis(val items: List) : List by items diff --git a/core/api/core.api b/core/api/core.api index 19c163b67c2..7137b9d9d79 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -30,6 +30,7 @@ public final class dev/kord/core/Kord : kotlinx/coroutines/CoroutineScope { public final fun editPresence (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun editSelf (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun equals (Ljava/lang/Object;)Z + public final fun getApplicationEmoji (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getApplicationInfo (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getApplicationRoleConnectionMetadataRecords (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getCache ()Ldev/kord/cache/api/DataCache; @@ -37,6 +38,7 @@ public final class dev/kord/core/Kord : kotlinx/coroutines/CoroutineScope { public static synthetic fun getChannel$default (Ldev/kord/core/Kord;Ldev/kord/common/entity/Snowflake;Ldev/kord/core/supplier/EntitySupplyStrategy;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext; public final fun getDefaultSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public final fun getEmojis ()Lkotlinx/coroutines/flow/Flow; public final fun getEvents ()Lkotlinx/coroutines/flow/SharedFlow; public final fun getGateway ()Ldev/kord/core/gateway/MasterGateway; public final fun getGlobalApplicationCommand (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -5712,6 +5714,22 @@ public final class dev/kord/core/entity/Application : dev/kord/core/entity/BaseA public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; } +public final class dev/kord/core/entity/ApplicationEmoji : dev/kord/core/entity/CustomEmoji { + public fun (Ldev/kord/core/cache/data/EmojiData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public synthetic fun (Ldev/kord/core/cache/data/EmojiData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun edit (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun equals (Ljava/lang/Object;)Z + public final fun getApplicationId ()Ldev/kord/common/entity/Snowflake; + public fun getData ()Ldev/kord/core/cache/data/EmojiData; + public fun getKord ()Ldev/kord/core/Kord; + public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/ApplicationEmoji; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; +} + public final class dev/kord/core/entity/Asset : dev/kord/core/KordObject { public static final field Companion Ldev/kord/core/entity/Asset$Companion; public synthetic fun (ZLdev/kord/rest/route/CdnUrl;Ldev/kord/core/Kord;Ldev/kord/rest/Image$Format;Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -5885,6 +5903,25 @@ public final class dev/kord/core/entity/ClientStatus$Client$Web : dev/kord/core/ public fun (Ldev/kord/common/entity/PresenceStatus;)V } +public abstract class dev/kord/core/entity/CustomEmoji : dev/kord/core/entity/Emoji, dev/kord/core/entity/KordEntity, dev/kord/core/entity/Strategizable { + public fun compareTo (Ldev/kord/core/entity/Entity;)I + public synthetic fun compareTo (Ljava/lang/Object;)I + public abstract fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun delete$default (Ldev/kord/core/entity/CustomEmoji;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public abstract fun getData ()Ldev/kord/core/cache/data/EmojiData; + public fun getId ()Ldev/kord/common/entity/Snowflake; + public final fun getImage ()Ldev/kord/core/entity/Asset; + public fun getMention ()Ljava/lang/String; + public fun getName ()Ljava/lang/String; + public final fun getRequiresColons ()Z + public final fun getUser ()Ldev/kord/core/behavior/UserBehavior; + public final fun getUser (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getUserId ()Ldev/kord/common/entity/Snowflake; + public final fun isAnimated ()Z + public final fun isAvailable ()Z + public final fun isManaged ()Z +} + public final class dev/kord/core/entity/Embed : dev/kord/core/KordObject { public fun (Ldev/kord/core/cache/data/EmbedData;Ldev/kord/core/Kord;)V public final fun apply (Ldev/kord/rest/builder/message/EmbedBuilder;)V @@ -6198,36 +6235,22 @@ public final class dev/kord/core/entity/Guild : dev/kord/core/behavior/GuildBeha public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; } -public final class dev/kord/core/entity/GuildEmoji : dev/kord/core/entity/Emoji, dev/kord/core/entity/KordEntity, dev/kord/core/entity/Strategizable { +public final class dev/kord/core/entity/GuildEmoji : dev/kord/core/entity/CustomEmoji { public fun (Ldev/kord/core/cache/data/EmojiData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V public synthetic fun (Ldev/kord/core/cache/data/EmojiData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun compareTo (Ldev/kord/core/entity/Entity;)I - public synthetic fun compareTo (Ljava/lang/Object;)I - public final fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static synthetic fun delete$default (Ldev/kord/core/entity/GuildEmoji;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun edit (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun equals (Ljava/lang/Object;)Z - public final fun getData ()Ldev/kord/core/cache/data/EmojiData; + public fun getData ()Ldev/kord/core/cache/data/EmojiData; public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; - public fun getId ()Ldev/kord/common/entity/Snowflake; - public final fun getImage ()Ldev/kord/core/entity/Asset; public fun getKord ()Ldev/kord/core/Kord; public final fun getMember ()Ldev/kord/core/behavior/MemberBehavior; public final fun getMember (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun getMention ()Ljava/lang/String; - public fun getName ()Ljava/lang/String; - public final fun getRequiresColons ()Z public final fun getRoleBehaviors ()Ljava/util/Set; public final fun getRoleIds ()Ljava/util/Set; public final fun getRoles ()Lkotlinx/coroutines/flow/Flow; public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; - public final fun getUser ()Ldev/kord/core/behavior/UserBehavior; - public final fun getUser (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public final fun getUserId ()Ldev/kord/common/entity/Snowflake; public fun hashCode ()I - public final fun isAnimated ()Z - public final fun isAvailable ()Z - public final fun isManaged ()Z public fun toString ()Ljava/lang/String; public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/GuildEmoji; public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; diff --git a/core/api/core.klib.api b/core/api/core.klib.api index 1d39196ab5f..561fc360777 100644 --- a/core/api/core.klib.api +++ b/core/api/core.klib.api @@ -6923,6 +6923,26 @@ final class dev.kord.core.entity/Application : dev.kord.core.entity/BaseApplicat final fun withStrategy(dev.kord.core.supplier/EntitySupplyStrategy<*>): dev.kord.core.entity/Application // dev.kord.core.entity/Application.withStrategy|withStrategy(dev.kord.core.supplier.EntitySupplyStrategy<*>){}[0] } +final class dev.kord.core.entity/ApplicationEmoji : dev.kord.core.entity/CustomEmoji { // dev.kord.core.entity/ApplicationEmoji|null[0] + constructor (dev.kord.core.cache.data/EmojiData, dev.kord.core/Kord, dev.kord.core.supplier/EntitySupplier = ...) // dev.kord.core.entity/ApplicationEmoji.|(dev.kord.core.cache.data.EmojiData;dev.kord.core.Kord;dev.kord.core.supplier.EntitySupplier){}[0] + + final val applicationId // dev.kord.core.entity/ApplicationEmoji.applicationId|{}applicationId[0] + final fun (): dev.kord.common.entity/Snowflake // dev.kord.core.entity/ApplicationEmoji.applicationId.|(){}[0] + final val data // dev.kord.core.entity/ApplicationEmoji.data|{}data[0] + final fun (): dev.kord.core.cache.data/EmojiData // dev.kord.core.entity/ApplicationEmoji.data.|(){}[0] + final val kord // dev.kord.core.entity/ApplicationEmoji.kord|{}kord[0] + final fun (): dev.kord.core/Kord // dev.kord.core.entity/ApplicationEmoji.kord.|(){}[0] + final val supplier // dev.kord.core.entity/ApplicationEmoji.supplier|{}supplier[0] + final fun (): dev.kord.core.supplier/EntitySupplier // dev.kord.core.entity/ApplicationEmoji.supplier.|(){}[0] + + final fun equals(kotlin/Any?): kotlin/Boolean // dev.kord.core.entity/ApplicationEmoji.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // dev.kord.core.entity/ApplicationEmoji.hashCode|hashCode(){}[0] + final fun toString(): kotlin/String // dev.kord.core.entity/ApplicationEmoji.toString|toString(){}[0] + final fun withStrategy(dev.kord.core.supplier/EntitySupplyStrategy<*>): dev.kord.core.entity/ApplicationEmoji // dev.kord.core.entity/ApplicationEmoji.withStrategy|withStrategy(dev.kord.core.supplier.EntitySupplyStrategy<*>){}[0] + final suspend fun delete(kotlin/String?) // dev.kord.core.entity/ApplicationEmoji.delete|delete(kotlin.String?){}[0] + final suspend inline fun edit(kotlin/Function1) // dev.kord.core.entity/ApplicationEmoji.edit|edit(kotlin.Function1){}[0] +} + final class dev.kord.core.entity/Asset : dev.kord.core/KordObject { // dev.kord.core.entity/Asset|null[0] final val cdnUrl // dev.kord.core.entity/Asset.cdnUrl|{}cdnUrl[0] final fun (): dev.kord.rest.route/CdnUrl // dev.kord.core.entity/Asset.cdnUrl.|(){}[0] @@ -7463,33 +7483,17 @@ final class dev.kord.core.entity/Guild : dev.kord.core.behavior/GuildBehavior { final suspend fun getWidgetChannel(): dev.kord.core.entity.channel/TopGuildMessageChannel? // dev.kord.core.entity/Guild.getWidgetChannel|getWidgetChannel(){}[0] } -final class dev.kord.core.entity/GuildEmoji : dev.kord.core.entity/Emoji, dev.kord.core.entity/KordEntity, dev.kord.core.entity/Strategizable { // dev.kord.core.entity/GuildEmoji|null[0] +final class dev.kord.core.entity/GuildEmoji : dev.kord.core.entity/CustomEmoji { // dev.kord.core.entity/GuildEmoji|null[0] constructor (dev.kord.core.cache.data/EmojiData, dev.kord.core/Kord, dev.kord.core.supplier/EntitySupplier = ...) // dev.kord.core.entity/GuildEmoji.|(dev.kord.core.cache.data.EmojiData;dev.kord.core.Kord;dev.kord.core.supplier.EntitySupplier){}[0] final val data // dev.kord.core.entity/GuildEmoji.data|{}data[0] final fun (): dev.kord.core.cache.data/EmojiData // dev.kord.core.entity/GuildEmoji.data.|(){}[0] final val guildId // dev.kord.core.entity/GuildEmoji.guildId|{}guildId[0] final fun (): dev.kord.common.entity/Snowflake // dev.kord.core.entity/GuildEmoji.guildId.|(){}[0] - final val id // dev.kord.core.entity/GuildEmoji.id|{}id[0] - final fun (): dev.kord.common.entity/Snowflake // dev.kord.core.entity/GuildEmoji.id.|(){}[0] - final val image // dev.kord.core.entity/GuildEmoji.image|{}image[0] - final fun (): dev.kord.core.entity/Asset // dev.kord.core.entity/GuildEmoji.image.|(){}[0] - final val isAnimated // dev.kord.core.entity/GuildEmoji.isAnimated|{}isAnimated[0] - final fun (): kotlin/Boolean // dev.kord.core.entity/GuildEmoji.isAnimated.|(){}[0] - final val isAvailable // dev.kord.core.entity/GuildEmoji.isAvailable|{}isAvailable[0] - final fun (): kotlin/Boolean // dev.kord.core.entity/GuildEmoji.isAvailable.|(){}[0] - final val isManaged // dev.kord.core.entity/GuildEmoji.isManaged|{}isManaged[0] - final fun (): kotlin/Boolean // dev.kord.core.entity/GuildEmoji.isManaged.|(){}[0] final val kord // dev.kord.core.entity/GuildEmoji.kord|{}kord[0] final fun (): dev.kord.core/Kord // dev.kord.core.entity/GuildEmoji.kord.|(){}[0] final val member // dev.kord.core.entity/GuildEmoji.member|{}member[0] final fun (): dev.kord.core.behavior/MemberBehavior? // dev.kord.core.entity/GuildEmoji.member.|(){}[0] - final val mention // dev.kord.core.entity/GuildEmoji.mention|{}mention[0] - final fun (): kotlin/String // dev.kord.core.entity/GuildEmoji.mention.|(){}[0] - final val name // dev.kord.core.entity/GuildEmoji.name|{}name[0] - final fun (): kotlin/String? // dev.kord.core.entity/GuildEmoji.name.|(){}[0] - final val requiresColons // dev.kord.core.entity/GuildEmoji.requiresColons|{}requiresColons[0] - final fun (): kotlin/Boolean // dev.kord.core.entity/GuildEmoji.requiresColons.|(){}[0] final val roleBehaviors // dev.kord.core.entity/GuildEmoji.roleBehaviors|{}roleBehaviors[0] final fun (): kotlin.collections/Set // dev.kord.core.entity/GuildEmoji.roleBehaviors.|(){}[0] final val roleIds // dev.kord.core.entity/GuildEmoji.roleIds|{}roleIds[0] @@ -7498,18 +7502,13 @@ final class dev.kord.core.entity/GuildEmoji : dev.kord.core.entity/Emoji, dev.ko final fun (): kotlinx.coroutines.flow/Flow // dev.kord.core.entity/GuildEmoji.roles.|(){}[0] final val supplier // dev.kord.core.entity/GuildEmoji.supplier|{}supplier[0] final fun (): dev.kord.core.supplier/EntitySupplier // dev.kord.core.entity/GuildEmoji.supplier.|(){}[0] - final val user // dev.kord.core.entity/GuildEmoji.user|{}user[0] - final fun (): dev.kord.core.behavior/UserBehavior? // dev.kord.core.entity/GuildEmoji.user.|(){}[0] - final val userId // dev.kord.core.entity/GuildEmoji.userId|{}userId[0] - final fun (): dev.kord.common.entity/Snowflake? // dev.kord.core.entity/GuildEmoji.userId.|(){}[0] final fun equals(kotlin/Any?): kotlin/Boolean // dev.kord.core.entity/GuildEmoji.equals|equals(kotlin.Any?){}[0] final fun hashCode(): kotlin/Int // dev.kord.core.entity/GuildEmoji.hashCode|hashCode(){}[0] final fun toString(): kotlin/String // dev.kord.core.entity/GuildEmoji.toString|toString(){}[0] final fun withStrategy(dev.kord.core.supplier/EntitySupplyStrategy<*>): dev.kord.core.entity/GuildEmoji // dev.kord.core.entity/GuildEmoji.withStrategy|withStrategy(dev.kord.core.supplier.EntitySupplyStrategy<*>){}[0] - final suspend fun delete(kotlin/String? = ...) // dev.kord.core.entity/GuildEmoji.delete|delete(kotlin.String?){}[0] + final suspend fun delete(kotlin/String?) // dev.kord.core.entity/GuildEmoji.delete|delete(kotlin.String?){}[0] final suspend fun getMember(): dev.kord.core.entity/Member? // dev.kord.core.entity/GuildEmoji.getMember|getMember(){}[0] - final suspend fun getUser(): dev.kord.core.entity/User? // dev.kord.core.entity/GuildEmoji.getUser|getUser(){}[0] final suspend inline fun edit(kotlin/Function1) // dev.kord.core.entity/GuildEmoji.edit|edit(kotlin.Function1){}[0] } @@ -11297,6 +11296,8 @@ final class dev.kord.core/Kord : kotlinx.coroutines/CoroutineScope { // dev.kord final fun (): kotlin.coroutines/CoroutineContext // dev.kord.core/Kord.coroutineContext.|(){}[0] final val defaultSupplier // dev.kord.core/Kord.defaultSupplier|{}defaultSupplier[0] final fun (): dev.kord.core.supplier/EntitySupplier // dev.kord.core/Kord.defaultSupplier.|(){}[0] + final val emojis // dev.kord.core/Kord.emojis|{}emojis[0] + final fun (): kotlinx.coroutines.flow/Flow // dev.kord.core/Kord.emojis.|(){}[0] final val events // dev.kord.core/Kord.events|{}events[0] final fun (): kotlinx.coroutines.flow/SharedFlow // dev.kord.core/Kord.events.|(){}[0] final val gateway // dev.kord.core/Kord.gateway|{}gateway[0] @@ -11325,6 +11326,7 @@ final class dev.kord.core/Kord : kotlinx.coroutines/CoroutineScope { // dev.kord final suspend fun <#A1: kotlin/Any?> getGlobalApplicationCommandOf(dev.kord.common.entity/Snowflake): #A1 // dev.kord.core/Kord.getGlobalApplicationCommandOf|getGlobalApplicationCommandOf(dev.kord.common.entity.Snowflake){0§}[0] final suspend fun <#A1: kotlin/Any?> getGlobalApplicationCommandOfOrNull(dev.kord.common.entity/Snowflake): #A1? // dev.kord.core/Kord.getGlobalApplicationCommandOfOrNull|getGlobalApplicationCommandOfOrNull(dev.kord.common.entity.Snowflake){0§}[0] final suspend fun editSelf(kotlin/Function1): dev.kord.core.entity/User // dev.kord.core/Kord.editSelf|editSelf(kotlin.Function1){}[0] + final suspend fun getApplicationEmoji(dev.kord.common.entity/Snowflake): dev.kord.core.entity/ApplicationEmoji // dev.kord.core/Kord.getApplicationEmoji|getApplicationEmoji(dev.kord.common.entity.Snowflake){}[0] final suspend fun getApplicationInfo(): dev.kord.core.entity/Application // dev.kord.core/Kord.getApplicationInfo|getApplicationInfo(){}[0] final suspend fun getApplicationRoleConnectionMetadataRecords(): kotlin.collections/List // dev.kord.core/Kord.getApplicationRoleConnectionMetadataRecords|getApplicationRoleConnectionMetadataRecords(){}[0] final suspend fun getChannel(dev.kord.common.entity/Snowflake, dev.kord.core.supplier/EntitySupplyStrategy<*> = ...): dev.kord.core.entity.channel/Channel? // dev.kord.core/Kord.getChannel|getChannel(dev.kord.common.entity.Snowflake;dev.kord.core.supplier.EntitySupplyStrategy<*>){}[0] @@ -11776,6 +11778,36 @@ sealed class dev.kord.core.entity/BaseApplication : dev.kord.core.entity/KordEnt final suspend fun getOwnerOrNull(): dev.kord.core.entity/User? // dev.kord.core.entity/BaseApplication.getOwnerOrNull|getOwnerOrNull(){}[0] } +sealed class dev.kord.core.entity/CustomEmoji : dev.kord.core.entity/Emoji, dev.kord.core.entity/KordEntity, dev.kord.core.entity/Strategizable { // dev.kord.core.entity/CustomEmoji|null[0] + constructor () // dev.kord.core.entity/CustomEmoji.|(){}[0] + + abstract val data // dev.kord.core.entity/CustomEmoji.data|{}data[0] + abstract fun (): dev.kord.core.cache.data/EmojiData // dev.kord.core.entity/CustomEmoji.data.|(){}[0] + final val image // dev.kord.core.entity/CustomEmoji.image|{}image[0] + final fun (): dev.kord.core.entity/Asset // dev.kord.core.entity/CustomEmoji.image.|(){}[0] + final val isAnimated // dev.kord.core.entity/CustomEmoji.isAnimated|{}isAnimated[0] + final fun (): kotlin/Boolean // dev.kord.core.entity/CustomEmoji.isAnimated.|(){}[0] + final val isAvailable // dev.kord.core.entity/CustomEmoji.isAvailable|{}isAvailable[0] + final fun (): kotlin/Boolean // dev.kord.core.entity/CustomEmoji.isAvailable.|(){}[0] + final val isManaged // dev.kord.core.entity/CustomEmoji.isManaged|{}isManaged[0] + final fun (): kotlin/Boolean // dev.kord.core.entity/CustomEmoji.isManaged.|(){}[0] + final val requiresColons // dev.kord.core.entity/CustomEmoji.requiresColons|{}requiresColons[0] + final fun (): kotlin/Boolean // dev.kord.core.entity/CustomEmoji.requiresColons.|(){}[0] + final val user // dev.kord.core.entity/CustomEmoji.user|{}user[0] + final fun (): dev.kord.core.behavior/UserBehavior? // dev.kord.core.entity/CustomEmoji.user.|(){}[0] + final val userId // dev.kord.core.entity/CustomEmoji.userId|{}userId[0] + final fun (): dev.kord.common.entity/Snowflake? // dev.kord.core.entity/CustomEmoji.userId.|(){}[0] + open val id // dev.kord.core.entity/CustomEmoji.id|{}id[0] + open fun (): dev.kord.common.entity/Snowflake // dev.kord.core.entity/CustomEmoji.id.|(){}[0] + open val mention // dev.kord.core.entity/CustomEmoji.mention|{}mention[0] + open fun (): kotlin/String // dev.kord.core.entity/CustomEmoji.mention.|(){}[0] + open val name // dev.kord.core.entity/CustomEmoji.name|{}name[0] + open fun (): kotlin/String? // dev.kord.core.entity/CustomEmoji.name.|(){}[0] + + abstract suspend fun delete(kotlin/String? = ...) // dev.kord.core.entity/CustomEmoji.delete|delete(kotlin.String?){}[0] + final suspend fun getUser(): dev.kord.core.entity/User? // dev.kord.core.entity/CustomEmoji.getUser|getUser(){}[0] +} + sealed class dev.kord.core.entity/ReactionEmoji { // dev.kord.core.entity/ReactionEmoji|null[0] constructor () // dev.kord.core.entity/ReactionEmoji.|(){}[0] diff --git a/core/src/commonMain/kotlin/Kord.kt b/core/src/commonMain/kotlin/Kord.kt index 0ae5ec4fae1..19f67eaf948 100644 --- a/core/src/commonMain/kotlin/Kord.kt +++ b/core/src/commonMain/kotlin/Kord.kt @@ -10,6 +10,7 @@ import dev.kord.core.builder.kord.KordBuilder import dev.kord.core.builder.kord.KordProxyBuilder import dev.kord.core.builder.kord.KordRestOnlyBuilder import dev.kord.core.cache.data.ApplicationCommandData +import dev.kord.core.cache.data.EmojiData import dev.kord.core.cache.data.GuildData import dev.kord.core.cache.data.UserData import dev.kord.core.entity.* @@ -105,6 +106,16 @@ public class Kord( public val guilds: Flow get() = defaultSupplier.guilds + /** + * Flow of [application emojis][ApplicationEmoji]. + */ + public val emojis: Flow = flow { + rest.application.getApplicationEmojis(selfId).forEach { + val data = EmojiData.from(selfId, it.id!!, it) + ApplicationEmoji(data, this@Kord) + } + } + init { gateway.events .buffer(kotlinx.coroutines.channels.Channel.UNLIMITED) @@ -609,6 +620,16 @@ public class Kord( } } } + + /** + * Retrieves an [ApplicationEmoji] by its [id]. + */ + public suspend fun getApplicationEmoji(id: Snowflake): ApplicationEmoji { + val emoji = rest.application.getApplicationEmoji(selfId, id) + val data = EmojiData.from(selfId, id, emoji) + + return ApplicationEmoji(data, this) + } } /** diff --git a/core/src/commonMain/kotlin/entity/Emoji.kt b/core/src/commonMain/kotlin/entity/Emoji.kt index fe8b21eeb95..937cc9d10c7 100644 --- a/core/src/commonMain/kotlin/entity/Emoji.kt +++ b/core/src/commonMain/kotlin/entity/Emoji.kt @@ -48,21 +48,17 @@ public class StandardEmoji(override val name: String) : Emoji { } /** - * An instance of an [emoji](https://discord.com/developers/docs/resources/emoji#emoji-object) belonging to a specific - * [Guild]. + * Superclass for all non standard emojis. + * + * @see GuildEmoji + * @see ApplicationEmoji */ -public class GuildEmoji( - public val data: EmojiData, - override val kord: Kord, - override val supplier: EntitySupplier = kord.defaultSupplier -) : Emoji, KordEntity, Strategizable { +public sealed class CustomEmoji : Emoji, KordEntity, Strategizable { + public abstract val data: EmojiData override val id: Snowflake get() = data.id - public val guildId: Snowflake - get() = data.guildId - override val mention: String get() = if (isAnimated) "" else "<:$name:$id>" @@ -93,16 +89,55 @@ public class GuildEmoji( */ public val requiresColons: Boolean get() = data.requireColons.discordBoolean + /** - * The ids of the [roles][Role] for which this emoji was whitelisted. + * The id of the [User] who created the emote, if present. */ - public val roleIds: Set get() = data.roles.orEmpty().toSet() + public val userId: Snowflake? get() = data.userId.value /** - * The behaviors of the [roles][Role] for which this emoji was whitelisted. + * The [User] who created the emote, if present. */ - public val roleBehaviors: Set - get() = data.roles.orEmpty().map { roleId -> RoleBehavior(guildId = guildId, id = roleId, kord = kord) }.toSet() + public val user: UserBehavior? get() = userId?.let { UserBehavior(it, kord) } + + /** The image of this emoji as an [Asset]. */ + public val image: Asset get() = Asset.emoji(id, isAnimated, kord) + + + /** + * Requests to delete this emoji, with the given [reason]. + * + * @param reason the reason showing up in the audit log + * @throws RequestException if anything went wrong during the request. + */ + public abstract suspend fun delete(reason: String? = null) + + /** + * Requests to get the creator of the emoji as a [User], + * returns null if the [User] isn't present or [userId] is null. + * + * @throws [RequestException] if anything went wrong during the request. + */ + public suspend fun getUser(): User? = userId?.let { supplier.getUserOrNull(it) } +} + +/** + * An instance of an [emoji](https://discord.com/developers/docs/resources/emoji#emoji-object) belonging to a specific + * [Guild]. + */ +public class GuildEmoji( + override val data: EmojiData, + override val kord: Kord, + override val supplier: EntitySupplier = kord.defaultSupplier +) : CustomEmoji() { + + public val guildId: Snowflake + get() = data.guildId + + /** + * The ids of the [roles][Role] for which this emoji was whitelisted. + */ + public val roleIds: Set get() = data.roles.orEmpty().toSet() /** * The [roles][Role] for which this emoji was whitelisted. @@ -118,22 +153,15 @@ public class GuildEmoji( else supplier.getGuildRoles(guildId).filter { it.id in roleIds } /** - * The behavior of the [Member] who created the emote, if present. - */ - public val member: MemberBehavior? get() = userId?.let { MemberBehavior(guildId, it, kord) } - - /** - * The id of the [User] who created the emote, if present. + * The behaviors of the [roles][Role] for which this emoji was whitelisted. */ - public val userId: Snowflake? get() = data.userId.value + public val roleBehaviors: Set + get() = data.roles.orEmpty().map { roleId -> RoleBehavior(guildId = guildId, id = roleId, kord = kord) }.toSet() /** - * The [User] who created the emote, if present. + * The behavior of the [Member] who created the emote, if present. */ - public val user: UserBehavior? get() = userId?.let { UserBehavior(it, kord) } - - /** The image of this emoji as an [Asset]. */ - public val image: Asset get() = Asset.emoji(id, isAnimated, kord) + public val member: MemberBehavior? get() = userId?.let { MemberBehavior(guildId, it, kord) } /** * Requests to delete this emoji, with the given [reason]. @@ -141,7 +169,7 @@ public class GuildEmoji( * @param reason the reason showing up in the audit log * @throws RequestException if anything went wrong during the request. */ - public suspend fun delete(reason: String? = null) { + public override suspend fun delete(reason: String?) { kord.rest.emoji.deleteEmoji(guildId = guildId, emojiId = id, reason = reason) } @@ -165,13 +193,6 @@ public class GuildEmoji( */ public suspend fun getMember(): Member? = userId?.let { supplier.getMemberOrNull(guildId = guildId, userId = it) } - /** - * Requests to get the creator of the emoji as a [User], - * returns null if the [User] isn't present or [userId] is null. - * - * @throws [RequestException] if anything went wrong during the request. - */ - public suspend fun getUser(): User? = userId?.let { supplier.getUserOrNull(it) } /** * Returns a new [GuildEmoji] with the given [strategy]. @@ -188,5 +209,55 @@ public class GuildEmoji( override fun toString(): String { return "GuildEmoji(data=$data, kord=$kord, supplier=$supplier)" } +} +/** + * An instance of an [emoji](https://discord.com/developers/docs/resources/emoji#emoji-object) belonging to a specific + * [Application]. + */ +public class ApplicationEmoji( + override val data: EmojiData, + override val kord: Kord, + override val supplier: EntitySupplier = kord.defaultSupplier +) : CustomEmoji() { + public val applicationId: Snowflake + get() = kord.selfId + + /** + * Requests to delete this emoji, with the given [reason]. + * + * @param reason the reason showing up in the audit log + * @throws RequestException if anything went wrong during the request. + */ + public override suspend fun delete(reason: String?) { + kord.rest.application.deleteApplicationEmoji(appId = applicationId, emojiId = id, reason = reason) + } + + /** + * Requests to edit the emoji. + * + * @throws [RequestException] if anything went wrong during the request. + */ + public suspend inline fun edit(builder: EmojiModifyBuilder.() -> Unit) { + contract { + callsInPlace(builder, InvocationKind.EXACTLY_ONCE) + } + kord.rest.application.modifyApplicationEmoji(appId = applicationId, emojiId = id, builder = builder) + } + + /** + * Returns a new [ApplicationEmoji] with the given [strategy]. + */ + override fun withStrategy(strategy: EntitySupplyStrategy<*>): ApplicationEmoji = ApplicationEmoji(data, kord, strategy.supply(kord)) + + override fun hashCode(): Int = hash(id, applicationId) + + override fun equals(other: Any?): Boolean = when (other) { + is ApplicationEmoji -> other.id == id && other.applicationId == applicationId + else -> super.equals(other) + } + + override fun toString(): String { + return "ApplicationEmoji(data=$data, kord=$kord, supplier=$supplier)" + } } diff --git a/rest/api/rest.api b/rest/api/rest.api index 91bf1d6b21b..afeabf31688 100644 --- a/rest/api/rest.api +++ b/rest/api/rest.api @@ -6454,6 +6454,10 @@ public final class dev/kord/rest/route/Route$DeleteAllReactionsForEmoji : dev/ko public static final field INSTANCE Ldev/kord/rest/route/Route$DeleteAllReactionsForEmoji; } +public final class dev/kord/rest/route/Route$DeleteApplicationEmoji : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$DeleteApplicationEmoji; +} + public final class dev/kord/rest/route/Route$DeleteWebhookMessage : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$DeleteWebhookMessage; } @@ -6510,6 +6514,14 @@ public final class dev/kord/rest/route/Route$GatewayGet : dev/kord/rest/route/Ro public static final field INSTANCE Ldev/kord/rest/route/Route$GatewayGet; } +public final class dev/kord/rest/route/Route$GetApplicationEmoji : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$GetApplicationEmoji; +} + +public final class dev/kord/rest/route/Route$GetApplicationEmojis : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$GetApplicationEmojis; +} + public final class dev/kord/rest/route/Route$GetWebhookMessage : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$GetWebhookMessage; } @@ -6946,6 +6958,10 @@ public final class dev/kord/rest/route/Route$OwnReactionDelete : dev/kord/rest/r public static final field INSTANCE Ldev/kord/rest/route/Route$OwnReactionDelete; } +public final class dev/kord/rest/route/Route$PatchApplicationEmoji : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$PatchApplicationEmoji; +} + public final class dev/kord/rest/route/Route$PinDelete : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$PinDelete; } @@ -6958,6 +6974,10 @@ public final class dev/kord/rest/route/Route$PinsGet : dev/kord/rest/route/Route public static final field INSTANCE Ldev/kord/rest/route/Route$PinsGet; } +public final class dev/kord/rest/route/Route$PostApplicationEmoji : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$PostApplicationEmoji; +} + public final class dev/kord/rest/route/Route$PrivateArchivedThreadsGet : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$PrivateArchivedThreadsGet; } @@ -7119,7 +7139,15 @@ public final class dev/kord/rest/service/ApplicationRoleConnectionMetadataServic public final class dev/kord/rest/service/ApplicationService : dev/kord/rest/service/RestService { public fun (Ldev/kord/rest/request/RequestHandler;)V + public final fun createApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/EmojiCreateRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun createApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/rest/Image;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun deleteApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun deleteApplicationEmoji$default (Ldev/kord/rest/service/ApplicationService;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun getApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getApplicationEmojis (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getCurrentApplicationInfo (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/EmojiModifyRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyApplicationEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public final class dev/kord/rest/service/AuditLogService : dev/kord/rest/service/RestService { diff --git a/rest/api/rest.klib.api b/rest/api/rest.klib.api index 569a77c7fb9..c1951a46cf4 100644 --- a/rest/api/rest.klib.api +++ b/rest/api/rest.klib.api @@ -6510,7 +6510,14 @@ final class dev.kord.rest.service/ApplicationRoleConnectionMetadataService : dev final class dev.kord.rest.service/ApplicationService : dev.kord.rest.service/RestService { // dev.kord.rest.service/ApplicationService|null[0] constructor (dev.kord.rest.request/RequestHandler) // dev.kord.rest.service/ApplicationService.|(dev.kord.rest.request.RequestHandler){}[0] + final suspend fun createApplicationEmoji(dev.kord.common.entity/Snowflake, dev.kord.rest.json.request/EmojiCreateRequest): dev.kord.common.entity/DiscordEmoji // dev.kord.rest.service/ApplicationService.createApplicationEmoji|createApplicationEmoji(dev.kord.common.entity.Snowflake;dev.kord.rest.json.request.EmojiCreateRequest){}[0] + final suspend fun getApplicationEmoji(dev.kord.common.entity/Snowflake, dev.kord.common.entity/Snowflake): dev.kord.common.entity/DiscordEmoji // dev.kord.rest.service/ApplicationService.getApplicationEmoji|getApplicationEmoji(dev.kord.common.entity.Snowflake;dev.kord.common.entity.Snowflake){}[0] + final suspend fun getApplicationEmojis(dev.kord.common.entity/Snowflake): dev.kord.common.entity/ApplicationEmojis // dev.kord.rest.service/ApplicationService.getApplicationEmojis|getApplicationEmojis(dev.kord.common.entity.Snowflake){}[0] final suspend fun getCurrentApplicationInfo(): dev.kord.common.entity/DiscordApplication // dev.kord.rest.service/ApplicationService.getCurrentApplicationInfo|getCurrentApplicationInfo(){}[0] + final suspend inline fun createApplicationEmoji(dev.kord.common.entity/Snowflake, kotlin/String, dev.kord.rest/Image, kotlin/Function1): dev.kord.common.entity/DiscordEmoji // dev.kord.rest.service/ApplicationService.createApplicationEmoji|createApplicationEmoji(dev.kord.common.entity.Snowflake;kotlin.String;dev.kord.rest.Image;kotlin.Function1){}[0] + final suspend inline fun deleteApplicationEmoji(dev.kord.common.entity/Snowflake, dev.kord.common.entity/Snowflake, kotlin/String? = ...) // dev.kord.rest.service/ApplicationService.deleteApplicationEmoji|deleteApplicationEmoji(dev.kord.common.entity.Snowflake;dev.kord.common.entity.Snowflake;kotlin.String?){}[0] + final suspend inline fun modifyApplicationEmoji(dev.kord.common.entity/Snowflake, dev.kord.common.entity/Snowflake, dev.kord.rest.json.request/EmojiModifyRequest): dev.kord.common.entity/DiscordEmoji // dev.kord.rest.service/ApplicationService.modifyApplicationEmoji|modifyApplicationEmoji(dev.kord.common.entity.Snowflake;dev.kord.common.entity.Snowflake;dev.kord.rest.json.request.EmojiModifyRequest){}[0] + final suspend inline fun modifyApplicationEmoji(dev.kord.common.entity/Snowflake, dev.kord.common.entity/Snowflake, kotlin/Function1): dev.kord.common.entity/DiscordEmoji // dev.kord.rest.service/ApplicationService.modifyApplicationEmoji|modifyApplicationEmoji(dev.kord.common.entity.Snowflake;dev.kord.common.entity.Snowflake;kotlin.Function1){}[0] } final class dev.kord.rest.service/AuditLogService : dev.kord.rest.service/RestService { // dev.kord.rest.service/AuditLogService|null[0] @@ -7087,6 +7094,8 @@ sealed class <#A: kotlin/Any?> dev.kord.rest.route/Route { // dev.kord.rest.rout final object DeleteAllReactionsForEmoji : dev.kord.rest.route/Route // dev.kord.rest.route/Route.DeleteAllReactionsForEmoji|null[0] + final object DeleteApplicationEmoji : dev.kord.rest.route/Route // dev.kord.rest.route/Route.DeleteApplicationEmoji|null[0] + final object DeleteWebhookMessage : dev.kord.rest.route/Route // dev.kord.rest.route/Route.DeleteWebhookMessage|null[0] final object EditMessagePatch : dev.kord.rest.route/Route // dev.kord.rest.route/Route.EditMessagePatch|null[0] @@ -7115,6 +7124,10 @@ sealed class <#A: kotlin/Any?> dev.kord.rest.route/Route { // dev.kord.rest.rout final object GatewayGet : dev.kord.rest.route/Route // dev.kord.rest.route/Route.GatewayGet|null[0] + final object GetApplicationEmoji : dev.kord.rest.route/Route // dev.kord.rest.route/Route.GetApplicationEmoji|null[0] + + final object GetApplicationEmojis : dev.kord.rest.route/Route // dev.kord.rest.route/Route.GetApplicationEmojis|null[0] + final object GetWebhookMessage : dev.kord.rest.route/Route // dev.kord.rest.route/Route.GetWebhookMessage|null[0] final object GlobalApplicationCommandCreate : dev.kord.rest.route/Route // dev.kord.rest.route/Route.GlobalApplicationCommandCreate|null[0] @@ -7329,12 +7342,16 @@ sealed class <#A: kotlin/Any?> dev.kord.rest.route/Route { // dev.kord.rest.rout final object OwnReactionDelete : dev.kord.rest.route/Route // dev.kord.rest.route/Route.OwnReactionDelete|null[0] + final object PatchApplicationEmoji : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PatchApplicationEmoji|null[0] + final object PinDelete : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PinDelete|null[0] final object PinPut : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PinPut|null[0] final object PinsGet : dev.kord.rest.route/Route> // dev.kord.rest.route/Route.PinsGet|null[0] + final object PostApplicationEmoji : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PostApplicationEmoji|null[0] + final object PrivateArchivedThreadsGet : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PrivateArchivedThreadsGet|null[0] final object PrivateThreadsGet : dev.kord.rest.route/Route // dev.kord.rest.route/Route.PrivateThreadsGet|null[0] diff --git a/rest/src/commonMain/kotlin/route/Route.kt b/rest/src/commonMain/kotlin/route/Route.kt index d861a485263..41193ab8e75 100644 --- a/rest/src/commonMain/kotlin/route/Route.kt +++ b/rest/src/commonMain/kotlin/route/Route.kt @@ -10,6 +10,7 @@ import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.descriptors.StructureKind import kotlinx.serialization.descriptors.buildSerialDescriptor @@ -1046,4 +1047,34 @@ public sealed class Route( "/guilds/$GuildId/stickers/$StickerId", DiscordMessageSticker.serializer() ) + + public object GetApplicationEmojis : Route( + HttpMethod.Get, + "/applications/$ApplicationId/emojis", + ApplicationEmojis.serializer() + ) + + public object GetApplicationEmoji : Route( + HttpMethod.Get, + "/applications/$ApplicationId/emojis/$EmojiId", + DiscordEmoji.serializer() + ) + + public object PostApplicationEmoji : Route( + HttpMethod.Post, + "/applications/$ApplicationId/emojis/", + DiscordEmoji.serializer() + ) + + public object PatchApplicationEmoji : Route( + HttpMethod.Patch, + "/applications/$ApplicationId/emojis/$EmojiId", + DiscordEmoji.serializer() + ) + + public object DeleteApplicationEmoji : Route( + HttpMethod.Delete, + "/applications/$ApplicationId/emojis/$EmojiId", + Unit.serializer() + ) } diff --git a/rest/src/commonMain/kotlin/service/ApplicationService.kt b/rest/src/commonMain/kotlin/service/ApplicationService.kt index 4d08e864859..37dd5131b18 100644 --- a/rest/src/commonMain/kotlin/service/ApplicationService.kt +++ b/rest/src/commonMain/kotlin/service/ApplicationService.kt @@ -1,10 +1,81 @@ package dev.kord.rest.service +import dev.kord.common.entity.ApplicationEmojis import dev.kord.common.entity.DiscordApplication +import dev.kord.common.entity.DiscordEmoji +import dev.kord.common.entity.Snowflake +import dev.kord.rest.Image +import dev.kord.rest.builder.guild.EmojiCreateBuilder +import dev.kord.rest.builder.guild.EmojiModifyBuilder +import dev.kord.rest.json.request.EmojiCreateRequest +import dev.kord.rest.json.request.EmojiModifyRequest import dev.kord.rest.request.RequestHandler +import dev.kord.rest.request.auditLogReason import dev.kord.rest.route.Route +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract public class ApplicationService(handler: RequestHandler) : RestService(handler) { public suspend fun getCurrentApplicationInfo(): DiscordApplication = call(Route.CurrentApplicationInfo) + + public suspend fun getApplicationEmojis(appId: Snowflake): ApplicationEmojis = call(Route.GetApplicationEmojis) { + keys[Route.ApplicationId] = appId + } + + public suspend fun getApplicationEmoji(appId: Snowflake, emojiId: Snowflake): DiscordEmoji = + call(Route.GetApplicationEmoji) { + keys[Route.ApplicationId] = appId + keys[Route.EmojiId] = emojiId + } + + public suspend fun createApplicationEmoji(appId: Snowflake, request: EmojiCreateRequest): DiscordEmoji = + call(Route.PostApplicationEmoji) { + keys[Route.ApplicationId] = appId + + body(EmojiCreateRequest.serializer(), request) + } + + public suspend inline fun createApplicationEmoji( + appId: Snowflake, + name: String, + image: Image, + builder: EmojiCreateBuilder.() -> Unit + ): DiscordEmoji { + contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) } + return createApplicationEmoji(appId, EmojiCreateBuilder(name, image).apply(builder).toRequest()) + } + + public suspend inline fun modifyApplicationEmoji( + appId: Snowflake, + emojiId: Snowflake, + request: EmojiModifyRequest + ): DiscordEmoji = + call(Route.PatchApplicationEmoji) { + keys[Route.ApplicationId] = appId + keys[Route.ApplicationId] = emojiId + + body(EmojiModifyRequest.serializer(), request) + } + + public suspend inline fun modifyApplicationEmoji( + appId: Snowflake, + emojiId: Snowflake, + builder: EmojiModifyBuilder.() -> Unit + ): DiscordEmoji { + contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) } + return modifyApplicationEmoji(appId, emojiId, EmojiModifyBuilder().apply(builder).toRequest()) + } + + public suspend inline fun deleteApplicationEmoji( + appId: Snowflake, + emojiId: Snowflake, + reason: String? = null, + ): Unit = + call(Route.DeleteApplicationEmoji) { + keys[Route.ApplicationId] = appId + keys[Route.ApplicationId] = emojiId + + auditLogReason(reason) + } }