From b99882951cff98f01f3e92ee9ffcd2f2adde1b1f Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Thu, 20 Apr 2023 02:56:41 +0200 Subject: [PATCH] wip --- common/api/common.api | 36 +++++++- .../dev/kord/common/entity/OnboardingMode.kt | 89 +++++++++++++++++++ .../kotlin/entity/DiscordGuildOnboarding.kt | 11 +++ core/api/core.api | 38 ++++++-- core/src/commonMain/kotlin/Unsafe.kt | 2 + .../behavior/GuildOnboardingBehavior.kt | 70 +++++++++++++++ .../kotlin/entity/GuildOnboarding.kt | 28 +++--- rest/api/rest.api | 56 ++++++++++++ .../guild/GuildOnboardingModifyBuilder.kt | 26 ++++++ .../request/GuildOnboardingModifyRequest.kt | 18 ++++ rest/src/commonMain/kotlin/route/Route.kt | 13 ++- .../commonMain/kotlin/service/GuildService.kt | 19 ++++ 12 files changed, 380 insertions(+), 26 deletions(-) create mode 100644 common/build/generated/ksp/metadata/commonMain/kotlin/dev/kord/common/entity/OnboardingMode.kt create mode 100644 core/src/commonMain/kotlin/behavior/GuildOnboardingBehavior.kt create mode 100644 rest/src/commonMain/kotlin/builder/guild/GuildOnboardingModifyBuilder.kt create mode 100644 rest/src/commonMain/kotlin/json/request/GuildOnboardingModifyRequest.kt diff --git a/common/api/common.api b/common/api/common.api index 28eae8e3fe12..09f92412f1f7 100644 --- a/common/api/common.api +++ b/common/api/common.api @@ -3804,18 +3804,20 @@ public final class dev/kord/common/entity/DiscordGuildMember$Companion { public final class dev/kord/common/entity/DiscordGuildOnboarding { public static final field Companion Ldev/kord/common/entity/DiscordGuildOnboarding$Companion; - public synthetic fun (ILdev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZLkotlinx/serialization/internal/SerializationConstructorMarker;)V - public fun (Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;Z)V + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZLdev/kord/common/entity/OnboardingMode;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZLdev/kord/common/entity/OnboardingMode;)V public final fun component1 ()Ldev/kord/common/entity/Snowflake; public final fun component2 ()Ljava/util/List; public final fun component3 ()Ljava/util/List; public final fun component4 ()Z - public final fun copy (Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;Z)Ldev/kord/common/entity/DiscordGuildOnboarding; - public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordGuildOnboarding;Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZILjava/lang/Object;)Ldev/kord/common/entity/DiscordGuildOnboarding; + public final fun component5 ()Ldev/kord/common/entity/OnboardingMode; + public final fun copy (Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZLdev/kord/common/entity/OnboardingMode;)Ldev/kord/common/entity/DiscordGuildOnboarding; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordGuildOnboarding;Ldev/kord/common/entity/Snowflake;Ljava/util/List;Ljava/util/List;ZLdev/kord/common/entity/OnboardingMode;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordGuildOnboarding; public fun equals (Ljava/lang/Object;)Z public final fun getDefaultChannelIds ()Ljava/util/List; public final fun getEnabled ()Z public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public final fun getMode ()Ldev/kord/common/entity/OnboardingMode; public final fun getPrompts ()Ljava/util/List; public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -7444,6 +7446,32 @@ public final class dev/kord/common/entity/NsfwLevel$Unknown : dev/kord/common/en public fun (I)V } +public abstract class dev/kord/common/entity/OnboardingMode { + public static final field Companion Ldev/kord/common/entity/OnboardingMode$Companion; + public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z + public final fun getValue ()I + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; +} + +public final class dev/kord/common/entity/OnboardingMode$Advanced : dev/kord/common/entity/OnboardingMode { + public static final field INSTANCE Ldev/kord/common/entity/OnboardingMode$Advanced; +} + +public final class dev/kord/common/entity/OnboardingMode$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/OnboardingMode$Default : dev/kord/common/entity/OnboardingMode { + public static final field INSTANCE Ldev/kord/common/entity/OnboardingMode$Default; +} + +public final class dev/kord/common/entity/OnboardingMode$Unknown : dev/kord/common/entity/OnboardingMode { + public fun (I)V +} + public abstract class dev/kord/common/entity/OnboardingPromptType { public static final field Companion Ldev/kord/common/entity/OnboardingPromptType$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V diff --git a/common/build/generated/ksp/metadata/commonMain/kotlin/dev/kord/common/entity/OnboardingMode.kt b/common/build/generated/ksp/metadata/commonMain/kotlin/dev/kord/common/entity/OnboardingMode.kt new file mode 100644 index 000000000000..cc9e1ecc4579 --- /dev/null +++ b/common/build/generated/ksp/metadata/commonMain/kotlin/dev/kord/common/entity/OnboardingMode.kt @@ -0,0 +1,89 @@ +// THIS FILE IS AUTO-GENERATED BY KordEnumProcessor.kt, DO NOT EDIT! +@file:Suppress(names = arrayOf("RedundantVisibilityModifier", "IncorrectFormatting", + "ReplaceArrayOfWithLiteral", "SpellCheckingInspection", "GrazieInspection")) + +package dev.kord.common.entity + +import kotlin.Any +import kotlin.Boolean +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +/** + * Defines the criteria used to satisfy Onboarding constraints that are required for enabling. + * + * See [OnboardingMode]s in the + * [Discord Developer Documentation](https://discord.com/developers/docs/resources/guild#guild-onboarding-object-onboarding-mode). + */ +@Serializable(with = OnboardingMode.Serializer::class) +public sealed class OnboardingMode( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is OnboardingMode && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "OnboardingMode.${this::class.simpleName}(value=$value)" + + /** + * An unknown [OnboardingMode]. + * + * This is used as a fallback for [OnboardingMode]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : OnboardingMode(value) + + /** + * Counts only Default Channels towards constraints. + */ + public object Default : OnboardingMode(0) + + /** + * Counts Default Channels and Questions towards constraints. + */ + public object Advanced : OnboardingMode(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.OnboardingMode", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: OnboardingMode) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> Default + 1 -> Advanced + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [OnboardingMode]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Default, + Advanced, + ) + } + + } +} diff --git a/common/src/commonMain/kotlin/entity/DiscordGuildOnboarding.kt b/common/src/commonMain/kotlin/entity/DiscordGuildOnboarding.kt index 4b8df0f40036..c6194fe4bed5 100644 --- a/common/src/commonMain/kotlin/entity/DiscordGuildOnboarding.kt +++ b/common/src/commonMain/kotlin/entity/DiscordGuildOnboarding.kt @@ -1,3 +1,13 @@ +@file:GenerateKordEnum( + name = "OnboardingMode", valueType = INT, + kDoc = "Defines the criteria used to satisfy Onboarding constraints that are required for enabling.", + docUrl = "https://discord.com/developers/docs/resources/guild#guild-onboarding-object-onboarding-mode", + entries = [ + Entry("Default", intValue = 0, kDoc = "Counts only Default Channels towards constraints."), + Entry("Advanced", intValue = 1, kDoc = "Counts Default Channels and Questions towards constraints."), + ], +) + @file:GenerateKordEnum( name = "OnboardingPromptType", valueType = INT, docUrl = "https://discord.com/developers/docs/resources/guild#guild-onboarding-object-prompt-types", @@ -21,6 +31,7 @@ public data class DiscordGuildOnboarding( val prompts: List, @SerialName("default_channel_ids") val defaultChannelIds: List, val enabled: Boolean, + val mode: OnboardingMode, ) @Serializable diff --git a/core/api/core.api b/core/api/core.api index 13833efbcee4..4e69857c5c42 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -127,6 +127,7 @@ public final class dev/kord/core/Unsafe { public final fun guildChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/GuildChannelBehavior; public final fun guildEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/core/Kord;)Ldev/kord/core/behavior/GuildEmojiBehavior; public final fun guildMessageChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/GuildMessageChannelBehavior; + public final fun guildOnboarding (Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/GuildOnboardingBehavior; public final fun guildScheduledEvent (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/GuildScheduledEventBehavior; public final fun keywordAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior; public final fun keywordPresetAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior; @@ -459,6 +460,29 @@ public final class dev/kord/core/behavior/GuildMessageCommandBehavior$DefaultImp public static fun edit (Ldev/kord/core/behavior/GuildMessageCommandBehavior;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } +public abstract interface class dev/kord/core/behavior/GuildOnboardingBehavior : dev/kord/core/KordObject, dev/kord/core/entity/Strategizable { + public abstract fun asGuildOnboarding (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asGuildOnboardingOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public abstract fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public abstract fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun toString ()Ljava/lang/String; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/GuildOnboardingBehavior; +} + +public final class dev/kord/core/behavior/GuildOnboardingBehavior$DefaultImpls { + public static fun asGuildOnboarding (Ldev/kord/core/behavior/GuildOnboardingBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asGuildOnboardingOrNull (Ldev/kord/core/behavior/GuildOnboardingBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/GuildOnboardingBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/GuildOnboardingBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/GuildOnboardingBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public final class dev/kord/core/behavior/GuildOnboardingBehaviorKt { + public static final fun edit (Ldev/kord/core/behavior/GuildOnboardingBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + public abstract interface class dev/kord/core/behavior/GuildScheduledEventBehavior : dev/kord/core/entity/KordEntity, dev/kord/core/entity/Strategizable { public abstract fun asGuildScheduledEvent (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun asGuildScheduledEventOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -6301,22 +6325,26 @@ public final class dev/kord/core/entity/GuildEmoji : dev/kord/core/entity/Emoji, public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; } -public final class dev/kord/core/entity/GuildOnboarding : dev/kord/core/KordObject, dev/kord/core/entity/Strategizable { +public final class dev/kord/core/entity/GuildOnboarding : dev/kord/core/behavior/GuildOnboardingBehavior { public fun (Ldev/kord/common/entity/DiscordGuildOnboarding;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V public synthetic fun (Ldev/kord/common/entity/DiscordGuildOnboarding;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun asGuildOnboarding (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asGuildOnboardingOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getData ()Ldev/kord/common/entity/DiscordGuildOnboarding; public final fun getDefaultChannelBehaviors ()Ljava/util/List; public final fun getDefaultChannelIds ()Ljava/util/List; public final fun getDefaultChannels ()Lkotlinx/coroutines/flow/Flow; - public final fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; - public final fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; - public final fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getKord ()Ldev/kord/core/Kord; + public final fun getMode ()Ldev/kord/common/entity/OnboardingMode; public final fun getPrompts ()Ljava/util/List; public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; public final fun isEnabled ()Z public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/GuildOnboardingBehavior; public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/GuildOnboarding; public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; } diff --git a/core/src/commonMain/kotlin/Unsafe.kt b/core/src/commonMain/kotlin/Unsafe.kt index 269d0676fb5c..ee75e742471a 100644 --- a/core/src/commonMain/kotlin/Unsafe.kt +++ b/core/src/commonMain/kotlin/Unsafe.kt @@ -95,6 +95,8 @@ public class Unsafe(private val kord: Kord) { public fun guildEmoji(guildId: Snowflake, id: Snowflake, kord: Kord): GuildEmojiBehavior = GuildEmojiBehavior(guildId = guildId, id = id, kord = kord) + public fun guildOnboarding(guildId: Snowflake): GuildOnboardingBehavior = GuildOnboardingBehaviorImpl(guildId, kord) + public fun role(guildId: Snowflake, id: Snowflake): RoleBehavior = RoleBehavior(guildId = guildId, id = id, kord = kord) diff --git a/core/src/commonMain/kotlin/behavior/GuildOnboardingBehavior.kt b/core/src/commonMain/kotlin/behavior/GuildOnboardingBehavior.kt new file mode 100644 index 000000000000..03a38ac80372 --- /dev/null +++ b/core/src/commonMain/kotlin/behavior/GuildOnboardingBehavior.kt @@ -0,0 +1,70 @@ +package dev.kord.core.behavior + +import dev.kord.common.entity.Snowflake +import dev.kord.common.exception.RequestException +import dev.kord.core.Kord +import dev.kord.core.KordObject +import dev.kord.core.entity.Guild +import dev.kord.core.entity.GuildOnboarding +import dev.kord.core.entity.Strategizable +import dev.kord.core.exception.EntityNotFoundException +import dev.kord.core.supplier.EntitySupplier +import dev.kord.core.supplier.EntitySupplyStrategy +import dev.kord.core.supplier.EntitySupplyStrategy.Companion.rest +import dev.kord.rest.builder.guild.GuildOnboardingModifyBuilder +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +public interface GuildOnboardingBehavior : KordObject, Strategizable { + + /** The ID of the [Guild] this onboarding is part of. */ + public val guildId: Snowflake + + /** The behavior of the [Guild] this onboarding is part of. */ + public val guild: GuildBehavior get() = GuildBehavior(guildId, kord) + + // todo docs + public suspend fun asGuildOnboarding(): GuildOnboarding = kord.with(rest).getGuildOnboarding(guildId) + + // todo docs + public suspend fun asGuildOnboardingOrNull(): GuildOnboarding? = kord.with(rest).getGuildOnboardingOrNull(guildId) + + /** + * Requests the [Guild] this onboarding is part of. + * + * @throws RequestException if something went wrong while retrieving the guild. + * @throws EntityNotFoundException if the guild is null. + */ + public suspend fun getGuild(): Guild = supplier.getGuild(guildId) + + /** + * Requests the [Guild] this onboarding is part of, returns `null` when the guild isn't present. + * + * @throws RequestException if something went wrong while retrieving the guild. + */ + public suspend fun getGuildOrNull(): Guild? = supplier.getGuildOrNull(guildId) + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): GuildOnboardingBehavior + + override fun toString(): String +} + +// todo docs +public suspend inline fun GuildOnboardingBehavior.edit( + builder: GuildOnboardingModifyBuilder.() -> Unit, +): GuildOnboarding { + contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) } + val onboarding = kord.rest.guild.modifyGuildOnboarding(guildId, builder) + return GuildOnboarding(onboarding, kord) +} + +internal class GuildOnboardingBehaviorImpl( + override val guildId: Snowflake, + override val kord: Kord, + override val supplier: EntitySupplier = kord.defaultSupplier, +) : GuildOnboardingBehavior { + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + GuildOnboardingBehaviorImpl(guildId, kord, strategy.supply(kord)) + + override fun toString() = "GuildOnboardingBehavior(guildId=$guildId, kord=$kord, supplier=$supplier)" +} diff --git a/core/src/commonMain/kotlin/entity/GuildOnboarding.kt b/core/src/commonMain/kotlin/entity/GuildOnboarding.kt index 089124d25c73..bdd221660488 100644 --- a/core/src/commonMain/kotlin/entity/GuildOnboarding.kt +++ b/core/src/commonMain/kotlin/entity/GuildOnboarding.kt @@ -3,13 +3,11 @@ package dev.kord.core.entity import dev.kord.common.entity.* import dev.kord.common.exception.RequestException import dev.kord.core.Kord -import dev.kord.core.KordObject -import dev.kord.core.behavior.GuildBehavior +import dev.kord.core.behavior.GuildOnboardingBehavior import dev.kord.core.behavior.RoleBehavior import dev.kord.core.behavior.channel.TopGuildChannelBehavior import dev.kord.core.cache.data.toData import dev.kord.core.entity.channel.TopGuildChannel -import dev.kord.core.exception.EntityNotFoundException import dev.kord.core.hash import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy @@ -25,12 +23,8 @@ public class GuildOnboarding( public val data: DiscordGuildOnboarding, override val kord: Kord, override val supplier: EntitySupplier = kord.defaultSupplier, -) : KordObject, Strategizable { - /** The ID of the [Guild] this onboarding is part of. */ - public val guildId: Snowflake get() = data.guildId - - /** The behavior of the [Guild] this onboarding is part of. */ - public val guild: GuildBehavior get() = GuildBehavior(guildId, kord) +) : GuildOnboardingBehavior { + override val guildId: Snowflake get() = data.guildId /** The [Prompt]s shown during onboarding and in customize community. */ public val prompts: List get() = data.prompts.map { Prompt(it, guildId, kord) } @@ -45,20 +39,22 @@ public class GuildOnboarding( /** Whether onboarding is enabled in the [guild]. */ public val isEnabled: Boolean get() = data.enabled + /** Current [mode][OnboardingMode] of onboarding. */ + public val mode: OnboardingMode get() = data.mode + /** - * Requests the [Guild] this onboarding is part of. + * Returns `this`. * - * @throws RequestException if something went wrong while retrieving the guild. - * @throws EntityNotFoundException if the guild is null. + * @suppress There is no need to call this function. Use `this` directly instead. */ - public suspend fun getGuild(): Guild = supplier.getGuild(guildId) + override suspend fun asGuildOnboarding(): GuildOnboarding = this /** - * Requests the [Guild] this onboarding is part of, returns `null` when the guild isn't present. + * Returns `this`. * - * @throws RequestException if something went wrong while retrieving the guild. + * @suppress There is no need to call this function. Use `this` directly instead. */ - public suspend fun getGuildOrNull(): Guild? = supplier.getGuildOrNull(guildId) + override suspend fun asGuildOnboardingOrNull(): GuildOnboarding = this /** * Requests the [channels][TopGuildChannel] that [Member]s get opted into automatically. diff --git a/rest/api/rest.api b/rest/api/rest.api index fd88e0baf7bd..7b5400e9e323 100644 --- a/rest/api/rest.api +++ b/rest/api/rest.api @@ -1112,6 +1112,18 @@ public final class dev/kord/rest/builder/guild/GuildModifyBuilder : dev/kord/res public synthetic fun toRequest ()Ljava/lang/Object; } +public final class dev/kord/rest/builder/guild/GuildOnboardingModifyBuilder : dev/kord/rest/builder/AuditRequestBuilder { + public fun ()V + public final fun getEnabled ()Ljava/lang/Boolean; + public final fun getMode ()Ldev/kord/common/entity/OnboardingMode; + public fun getReason ()Ljava/lang/String; + public final fun setEnabled (Ljava/lang/Boolean;)V + public final fun setMode (Ldev/kord/common/entity/OnboardingMode;)V + public fun setReason (Ljava/lang/String;)V + public fun toRequest ()Ldev/kord/rest/json/request/GuildOnboardingModifyRequest; + public synthetic fun toRequest ()Ljava/lang/Object; +} + public final class dev/kord/rest/builder/guild/GuildWidgetModifyBuilder : dev/kord/rest/builder/AuditRequestBuilder { public fun ()V public final fun getChannelId ()Ldev/kord/common/entity/Snowflake; @@ -4130,6 +4142,43 @@ public final class dev/kord/rest/json/request/GuildModifyRequest$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/kord/rest/json/request/GuildOnboardingModifyRequest { + public static final field Companion Ldev/kord/rest/json/request/GuildOnboardingModifyRequest$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/Optional; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun component3 ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun component4 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/rest/json/request/GuildOnboardingModifyRequest; + public static synthetic fun copy$default (Ldev/kord/rest/json/request/GuildOnboardingModifyRequest;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/rest/json/request/GuildOnboardingModifyRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getDefaultChannelIds ()Ldev/kord/common/entity/optional/Optional; + public final fun getEnabled ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun getMode ()Ldev/kord/common/entity/optional/Optional; + public final fun getPrompts ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/rest/json/request/GuildOnboardingModifyRequest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/rest/json/request/GuildOnboardingModifyRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/rest/json/request/GuildOnboardingModifyRequest$$serializer; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/rest/json/request/GuildOnboardingModifyRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/rest/json/request/GuildOnboardingModifyRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/rest/json/request/GuildOnboardingModifyRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/rest/json/request/GuildRoleCreateRequest { public static final field Companion Ldev/kord/rest/json/request/GuildRoleCreateRequest$Companion; public fun ()V @@ -6603,6 +6652,10 @@ public final class dev/kord/rest/route/Route$GuildOnboardingGet : dev/kord/rest/ public static final field INSTANCE Ldev/kord/rest/route/Route$GuildOnboardingGet; } +public final class dev/kord/rest/route/Route$GuildOnboardingModify : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$GuildOnboardingModify; +} + public final class dev/kord/rest/route/Route$GuildPatch : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$GuildPatch; } @@ -7193,6 +7246,9 @@ public final class dev/kord/rest/service/GuildService : dev/kord/rest/service/Re public final fun modifyGuildMFALevel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/MFALevel;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun modifyGuildMFALevel$default (Ldev/kord/rest/service/GuildService;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/MFALevel;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun modifyGuildMember (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyGuildOnboarding (Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/GuildOnboardingModifyRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyGuildOnboarding (Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun modifyGuildOnboarding$default (Ldev/kord/rest/service/GuildService;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/GuildOnboardingModifyRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun modifyGuildRole (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun modifyGuildRolePosition (Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun modifyGuildWelcomeScreen (Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/GuildWelcomeScreenModifyRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; diff --git a/rest/src/commonMain/kotlin/builder/guild/GuildOnboardingModifyBuilder.kt b/rest/src/commonMain/kotlin/builder/guild/GuildOnboardingModifyBuilder.kt new file mode 100644 index 000000000000..f194a63f7d72 --- /dev/null +++ b/rest/src/commonMain/kotlin/builder/guild/GuildOnboardingModifyBuilder.kt @@ -0,0 +1,26 @@ +package dev.kord.rest.builder.guild + +import dev.kord.common.annotation.KordDsl +import dev.kord.common.entity.OnboardingMode +import dev.kord.common.entity.optional.Optional +import dev.kord.common.entity.optional.OptionalBoolean +import dev.kord.common.entity.optional.delegate.delegate +import dev.kord.rest.builder.AuditRequestBuilder +import dev.kord.rest.json.request.GuildOnboardingModifyRequest + +@KordDsl +public class GuildOnboardingModifyBuilder : AuditRequestBuilder { + override var reason: String? = null + + private var _enabled: OptionalBoolean = OptionalBoolean.Missing + public var enabled: Boolean? by ::_enabled.delegate() + + private var _mode: Optional = Optional.Missing() + public var mode: OnboardingMode? by ::_mode.delegate() + + override fun toRequest(): GuildOnboardingModifyRequest = GuildOnboardingModifyRequest( + // todo + enabled = _enabled, + mode = _mode, + ) +} diff --git a/rest/src/commonMain/kotlin/json/request/GuildOnboardingModifyRequest.kt b/rest/src/commonMain/kotlin/json/request/GuildOnboardingModifyRequest.kt new file mode 100644 index 000000000000..f72c046103e8 --- /dev/null +++ b/rest/src/commonMain/kotlin/json/request/GuildOnboardingModifyRequest.kt @@ -0,0 +1,18 @@ +package dev.kord.rest.json.request + +import dev.kord.common.entity.DiscordOnboardingPrompt +import dev.kord.common.entity.OnboardingMode +import dev.kord.common.entity.Snowflake +import dev.kord.common.entity.optional.Optional +import dev.kord.common.entity.optional.OptionalBoolean +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +public data class GuildOnboardingModifyRequest( + val prompts: Optional> = Optional.Missing(), + @SerialName("default_channel_ids") + val defaultChannelIds: Optional> = Optional.Missing(), + val enabled: OptionalBoolean = OptionalBoolean.Missing, + val mode: Optional = Optional.Missing(), +) diff --git a/rest/src/commonMain/kotlin/route/Route.kt b/rest/src/commonMain/kotlin/route/Route.kt index a83f07f81e69..fdafdf59950f 100644 --- a/rest/src/commonMain/kotlin/route/Route.kt +++ b/rest/src/commonMain/kotlin/route/Route.kt @@ -572,7 +572,18 @@ public sealed class Route( Route(HttpMethod.Get, "/guilds/$GuildId/preview", DiscordGuildPreview.serializer()) public object GuildOnboardingGet : - Route(HttpMethod.Get, "/guilds/$GuildId/onboarding", DiscordGuildOnboarding.serializer()) + Route( + HttpMethod.Get, + "/guilds/$GuildId/onboarding", + DiscordGuildOnboarding.serializer(), + ) + + public object GuildOnboardingModify : + Route( + HttpMethod.Put, + "/guilds/$GuildId/onboarding", + DiscordGuildOnboarding.serializer(), + ) public object SelfVoiceStatePatch : Route(HttpMethod.Patch, "/guilds/$GuildId/voice-states/@me", NoStrategy) diff --git a/rest/src/commonMain/kotlin/service/GuildService.kt b/rest/src/commonMain/kotlin/service/GuildService.kt index b6131024d593..ffb18f9dd476 100644 --- a/rest/src/commonMain/kotlin/service/GuildService.kt +++ b/rest/src/commonMain/kotlin/service/GuildService.kt @@ -55,6 +55,25 @@ public class GuildService(requestHandler: RequestHandler) : RestService(requestH keys[Route.GuildId] = guildId } + public suspend fun modifyGuildOnboarding( + guildId: Snowflake, + request: GuildOnboardingModifyRequest, + reason: String? = null, + ): DiscordGuildOnboarding = call(Route.GuildOnboardingModify) { + keys[Route.GuildId] = guildId + body(GuildOnboardingModifyRequest.serializer(), request) + auditLogReason(reason) + } + + public suspend inline fun modifyGuildOnboarding( + guildId: Snowflake, + builder: GuildOnboardingModifyBuilder.() -> Unit, + ): DiscordGuildOnboarding { + contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) } + val request = GuildOnboardingModifyBuilder().apply(builder) + return modifyGuildOnboarding(guildId, request.toRequest(), request.reason) + } + public suspend inline fun modifyGuild(guildId: Snowflake, builder: GuildModifyBuilder.() -> Unit): DiscordGuild { contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE)