diff --git a/.gitignore b/.gitignore index b0e37fe09644..e87f660a34c2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ .gradle/ .idea/ -build/ out/ dokka/ + +**/build/* +!**/build/generated/ +# re-exclude BuildConfigGenerated.kt +common/build/generated/source/buildConfig/main/main/dev/kord/common/BuildConfigGenerated.kt diff --git a/build.gradle.kts b/build.gradle.kts index 87f8ac0cde27..0f5de4ba2de9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -46,3 +46,7 @@ tasks { outputDirectory.set(dokkaOutputDir) } } + +apiValidation { + ignoredProjects += listOf("ksp-annotations", "ksp-processors") +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index cac5793b9918..093f53146914 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -13,5 +13,6 @@ dependencies { implementation(kotlin("serialization", kotlinVersion)) implementation("org.jetbrains.dokka", "dokka-gradle-plugin", "1.7.10") implementation("org.jetbrains.kotlinx", "atomicfu-gradle-plugin", "0.18.3") + implementation("com.google.devtools.ksp", "symbol-processing-gradle-plugin", "1.7.10-1.0.6") implementation(gradleApi()) } diff --git a/buildSrc/src/main/kotlin/Compiler.kt b/buildSrc/src/main/kotlin/Compiler.kt index 1bf29f34152d..d0e75c32e579 100644 --- a/buildSrc/src/main/kotlin/Compiler.kt +++ b/buildSrc/src/main/kotlin/Compiler.kt @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions + object CompilerArguments { const val time = "-opt-in=kotlin.time.ExperimentalTime" const val contracts = "-opt-in=kotlin.contracts.ExperimentalContracts" @@ -14,3 +16,9 @@ object Jvm { const val targetString = "1.8" const val targetInt = 8 } + +fun KotlinJvmOptions.applyKordKotlinOptions() { + jvmTarget = Jvm.targetString + allWarningsAsErrors = true + freeCompilerArgs += CompilerArguments.progressive +} diff --git a/buildSrc/src/main/kotlin/kord-internal-module.gradle.kts b/buildSrc/src/main/kotlin/kord-internal-module.gradle.kts new file mode 100644 index 000000000000..723a330e392c --- /dev/null +++ b/buildSrc/src/main/kotlin/kord-internal-module.gradle.kts @@ -0,0 +1,22 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") +} + +repositories { + mavenCentral() +} + +tasks { + withType { + sourceCompatibility = Jvm.targetString + targetCompatibility = Jvm.targetString + } + + withType { + kotlinOptions { + applyKordKotlinOptions() + } + } +} diff --git a/buildSrc/src/main/kotlin/kord-module.gradle.kts b/buildSrc/src/main/kotlin/kord-module.gradle.kts index 7be08c741675..62bdb6d48afb 100644 --- a/buildSrc/src/main/kotlin/kord-module.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-module.gradle.kts @@ -8,6 +8,7 @@ plugins { kotlin("plugin.serialization") id("org.jetbrains.dokka") id("kotlinx-atomicfu") + id("com.google.devtools.ksp") `maven-publish` } @@ -24,8 +25,13 @@ dependencies { kotlin { explicitApi() - // allow ExperimentalCoroutinesApi for `runTest {}` - sourceSets["test"].languageSettings.optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") + sourceSets { + // mark ksp src dir + main { kotlin.srcDir("build/generated/ksp/main/kotlin") } + + // allow `ExperimentalCoroutinesApi` for `runTest {}` + test { languageSettings.optIn("kotlinx.coroutines.ExperimentalCoroutinesApi") } + } } tasks { @@ -36,17 +42,14 @@ tasks { withType { kotlinOptions { - jvmTarget = Jvm.targetString - allWarningsAsErrors = true - freeCompilerArgs = listOf( + applyKordKotlinOptions() + freeCompilerArgs += listOf( CompilerArguments.time, CompilerArguments.contracts, CompilerArguments.kordPreview, CompilerArguments.kordExperimental, CompilerArguments.kordVoice, - - CompilerArguments.progressive, ) } } @@ -60,15 +63,30 @@ tasks { withType { // see https://kotlin.github.io/dokka//user_guide/gradle/usage/#configuration-options + // make sure ksp generates files before building docs + dependsOn(compileKotlin) + failOnWarning.set(true) dokkaSourceSets.configureEach { jdkVersion.set(Jvm.targetInt) + val baseRemoteUrl = + "https://github.com/kordlib/kord/blob/${Library.commitHashOrDefault("0.8.x")}/${project.name}" + sourceLink { localDirectory.set(file("src/main/kotlin")) - remoteUrl.set(URL("https://github.com/kordlib/kord/blob/${Library.commitHashOrDefault("0.8.x")}/${project.name}/src/main/kotlin/")) + remoteUrl.set(URL("$baseRemoteUrl/src/main/kotlin")) + remoteLineSuffix.set("#L") + } + + // config for files generated by ksp + suppressGeneratedFiles.set(false) + sourceLink { + // will fail if dir doesn't exist -> always create it, won't harm if not needed + localDirectory.set(file("build/generated/ksp/main/kotlin").apply { mkdirs() }) + remoteUrl.set(URL("$baseRemoteUrl/build/generated/ksp/main/kotlin")) remoteLineSuffix.set("#L") } @@ -89,8 +107,6 @@ tasks { from(sourceSets.main.get().allSource) } - val dokkaHtml by getting - val dokkaJar by registering(Jar::class) { group = JavaBasePlugin.DOCUMENTATION_GROUP description = "Assembles Kotlin docs with Dokka" diff --git a/common/api/common.api b/common/api/common.api index 55786141313f..0106099252ae 100644 --- a/common/api/common.api +++ b/common/api/common.api @@ -263,10 +263,14 @@ public final class dev/kord/common/entity/AllRemovedMessageReactions$Companion { public abstract class dev/kord/common/entity/AllowedMentionType { public static final field Companion Ldev/kord/common/entity/AllowedMentionType$Companion; public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getValue ()Ljava/lang/String; + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/AllowedMentionType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -385,7 +389,10 @@ public final class dev/kord/common/entity/ApplicationCommandOption$Companion { public abstract class dev/kord/common/entity/ApplicationCommandOptionType { public static final field Companion Ldev/kord/common/entity/ApplicationCommandOptionType$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getType ()I + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/ApplicationCommandOptionType$Attachment : dev/kord/common/entity/ApplicationCommandOptionType { @@ -401,6 +408,7 @@ public final class dev/kord/common/entity/ApplicationCommandOptionType$Channel : } public final class dev/kord/common/entity/ApplicationCommandOptionType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -440,10 +448,43 @@ public final class dev/kord/common/entity/ApplicationCommandOptionType$User : de public static final field INSTANCE Ldev/kord/common/entity/ApplicationCommandOptionType$User; } +public abstract class dev/kord/common/entity/ApplicationCommandPermissionType { + public static final field Companion Ldev/kord/common/entity/ApplicationCommandPermissionType$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/ApplicationCommandPermissionType$Channel : dev/kord/common/entity/ApplicationCommandPermissionType { + public static final field INSTANCE Ldev/kord/common/entity/ApplicationCommandPermissionType$Channel; +} + +public final class dev/kord/common/entity/ApplicationCommandPermissionType$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/ApplicationCommandPermissionType$Role : dev/kord/common/entity/ApplicationCommandPermissionType { + public static final field INSTANCE Ldev/kord/common/entity/ApplicationCommandPermissionType$Role; +} + +public final class dev/kord/common/entity/ApplicationCommandPermissionType$Unknown : dev/kord/common/entity/ApplicationCommandPermissionType { + public fun (I)V +} + +public final class dev/kord/common/entity/ApplicationCommandPermissionType$User : dev/kord/common/entity/ApplicationCommandPermissionType { + public static final field INSTANCE Ldev/kord/common/entity/ApplicationCommandPermissionType$User; +} + public abstract class dev/kord/common/entity/ApplicationCommandType { public static final field Companion Ldev/kord/common/entity/ApplicationCommandType$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/ApplicationCommandType$ChatInput : dev/kord/common/entity/ApplicationCommandType { @@ -451,6 +492,7 @@ public final class dev/kord/common/entity/ApplicationCommandType$ChatInput : dev } public final class dev/kord/common/entity/ApplicationCommandType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -878,7 +920,10 @@ public final class dev/kord/common/entity/AuditLogEntryOptionalInfo$Companion { public abstract class dev/kord/common/entity/AuditLogEvent { public static final field Companion Ldev/kord/common/entity/AuditLogEvent$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/AuditLogEvent$ApplicationCommandPermissionUpdate : dev/kord/common/entity/AuditLogEvent { @@ -930,6 +975,7 @@ public final class dev/kord/common/entity/AuditLogEvent$ChannelUpdate : dev/kord } public final class dev/kord/common/entity/AuditLogEvent$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1103,6 +1149,7 @@ public abstract class dev/kord/common/entity/AutoModerationActionType { 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/AutoModerationActionType$BlockMessage : dev/kord/common/entity/AutoModerationActionType { @@ -1110,6 +1157,7 @@ public final class dev/kord/common/entity/AutoModerationActionType$BlockMessage } public final class dev/kord/common/entity/AutoModerationActionType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1131,9 +1179,11 @@ public abstract class dev/kord/common/entity/AutoModerationRuleEventType { 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/AutoModerationRuleEventType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1151,9 +1201,11 @@ public abstract class dev/kord/common/entity/AutoModerationRuleKeywordPresetType 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/AutoModerationRuleKeywordPresetType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1179,9 +1231,11 @@ public abstract class dev/kord/common/entity/AutoModerationRuleTriggerType { 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/AutoModerationRuleTriggerType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1275,9 +1329,18 @@ public final class dev/kord/common/entity/BulkDeleteData$Companion { } public abstract class dev/kord/common/entity/ButtonStyle { + public static final field Companion Ldev/kord/common/entity/ButtonStyle$Companion; public static final field Serializer Ldev/kord/common/entity/ButtonStyle$Serializer; 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/ButtonStyle$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/ButtonStyle$Danger : dev/kord/common/entity/ButtonStyle { @@ -1297,6 +1360,7 @@ public final class dev/kord/common/entity/ButtonStyle$Secondary : dev/kord/commo } public final class dev/kord/common/entity/ButtonStyle$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/ButtonStyle$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/ButtonStyle; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -1316,10 +1380,14 @@ public final class dev/kord/common/entity/ButtonStyle$Unknown : dev/kord/common/ public abstract class dev/kord/common/entity/ChannelType { public static final field Companion Ldev/kord/common/entity/ChannelType$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/ChannelType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -1640,9 +1708,13 @@ public final class dev/kord/common/entity/CommandGroup : dev/kord/common/entity/ } public abstract class dev/kord/common/entity/ComponentType { + public static final field Companion Ldev/kord/common/entity/ComponentType$Companion; public static final field Serializer Ldev/kord/common/entity/ComponentType$Serializer; 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/ComponentType$ActionRow : dev/kord/common/entity/ComponentType { @@ -1653,11 +1725,17 @@ public final class dev/kord/common/entity/ComponentType$Button : dev/kord/common public static final field INSTANCE Ldev/kord/common/entity/ComponentType$Button; } +public final class dev/kord/common/entity/ComponentType$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/common/entity/ComponentType$SelectMenu : dev/kord/common/entity/ComponentType { public static final field INSTANCE Ldev/kord/common/entity/ComponentType$SelectMenu; } public final class dev/kord/common/entity/ComponentType$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/ComponentType$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/ComponentType; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -1677,7 +1755,10 @@ public final class dev/kord/common/entity/ComponentType$Unknown : dev/kord/commo public abstract class dev/kord/common/entity/DefaultMessageNotificationLevel { public static final field Companion Ldev/kord/common/entity/DefaultMessageNotificationLevel$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/DefaultMessageNotificationLevel$AllMessages : dev/kord/common/entity/DefaultMessageNotificationLevel { @@ -1685,6 +1766,7 @@ public final class dev/kord/common/entity/DefaultMessageNotificationLevel$AllMes } public final class dev/kord/common/entity/DefaultMessageNotificationLevel$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -2817,10 +2899,14 @@ public final class dev/kord/common/entity/DiscordConnection$Companion { public abstract class dev/kord/common/entity/DiscordConnectionVisibility { public static final field Companion Ldev/kord/common/entity/DiscordConnectionVisibility$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/DiscordConnectionVisibility$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -3358,17 +3444,22 @@ public final class dev/kord/common/entity/DiscordGuild$Companion { public final class dev/kord/common/entity/DiscordGuildApplicationCommandPermission { public static final field Companion Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Companion; - public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;ZLkotlinx/serialization/internal/SerializationConstructorMarker;)V + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;ZLkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;Z)V public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;Z)V public final fun component1 ()Ldev/kord/common/entity/Snowflake; - public final fun component2 ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; + public final fun component2 ()Ldev/kord/common/entity/ApplicationCommandPermissionType; + public final synthetic fun component2 ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; public final fun component3 ()Z + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;Z)Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission; public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;Z)Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;ZILjava/lang/Object;)Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission; public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;ZILjava/lang/Object;)Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission; public fun equals (Ljava/lang/Object;)Z public final fun getId ()Ldev/kord/common/entity/Snowflake; public final fun getPermission ()Z - public final fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; + public final fun getType ()Ldev/kord/common/entity/ApplicationCommandPermissionType; + public final synthetic fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; public fun hashCode ()I public fun toString ()Ljava/lang/String; public static final fun write$Self (Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V @@ -5953,7 +6044,10 @@ public final class dev/kord/common/entity/DiscordWelcomeScreenChannel$Companion public abstract class dev/kord/common/entity/EmbedType { public static final field Companion Ldev/kord/common/entity/EmbedType$Companion; public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getValue ()Ljava/lang/String; + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/EmbedType$Article : dev/kord/common/entity/EmbedType { @@ -5961,6 +6055,7 @@ public final class dev/kord/common/entity/EmbedType$Article : dev/kord/common/en } public final class dev/kord/common/entity/EmbedType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -5991,7 +6086,10 @@ public final class dev/kord/common/entity/EmbedType$Video : dev/kord/common/enti public abstract class dev/kord/common/entity/ExplicitContentFilter { public static final field Companion Ldev/kord/common/entity/ExplicitContentFilter$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/ExplicitContentFilter$AllMembers : dev/kord/common/entity/ExplicitContentFilter { @@ -5999,6 +6097,7 @@ public final class dev/kord/common/entity/ExplicitContentFilter$AllMembers : dev } public final class dev/kord/common/entity/ExplicitContentFilter$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6048,6 +6147,7 @@ public final class dev/kord/common/entity/GuildFeature$Community : dev/kord/comm } public final class dev/kord/common/entity/GuildFeature$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6162,10 +6262,14 @@ public final class dev/kord/common/entity/GuildScheduledEventEntityMetadata$Comp public abstract class dev/kord/common/entity/GuildScheduledEventPrivacyLevel { public static final field Companion Ldev/kord/common/entity/GuildScheduledEventPrivacyLevel$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/GuildScheduledEventPrivacyLevel$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6178,9 +6282,13 @@ public final class dev/kord/common/entity/GuildScheduledEventPrivacyLevel$Unknow } public abstract class dev/kord/common/entity/GuildScheduledEventStatus { + public static final field Companion Ldev/kord/common/entity/GuildScheduledEventStatus$Companion; public static final field Serializer Ldev/kord/common/entity/GuildScheduledEventStatus$Serializer; 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/GuildScheduledEventStatus$Active : dev/kord/common/entity/GuildScheduledEventStatus { @@ -6191,6 +6299,11 @@ public final class dev/kord/common/entity/GuildScheduledEventStatus$Cancelled : public static final field INSTANCE Ldev/kord/common/entity/GuildScheduledEventStatus$Cancelled; } +public final class dev/kord/common/entity/GuildScheduledEventStatus$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/common/entity/GuildScheduledEventStatus$Completed : dev/kord/common/entity/GuildScheduledEventStatus { public static final field INSTANCE Ldev/kord/common/entity/GuildScheduledEventStatus$Completed; } @@ -6200,6 +6313,7 @@ public final class dev/kord/common/entity/GuildScheduledEventStatus$Scheduled : } public final class dev/kord/common/entity/GuildScheduledEventStatus$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/GuildScheduledEventStatus$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/GuildScheduledEventStatus; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -6286,9 +6400,18 @@ public final class dev/kord/common/entity/IntegrationApplication$Companion { } public abstract class dev/kord/common/entity/IntegrationExpireBehavior { + public static final field Companion Ldev/kord/common/entity/IntegrationExpireBehavior$Companion; public static final field Serializer Ldev/kord/common/entity/IntegrationExpireBehavior$Serializer; 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/IntegrationExpireBehavior$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/IntegrationExpireBehavior$Kick : dev/kord/common/entity/IntegrationExpireBehavior { @@ -6300,6 +6423,7 @@ public final class dev/kord/common/entity/IntegrationExpireBehavior$RemoveRole : } public final class dev/kord/common/entity/IntegrationExpireBehavior$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/IntegrationExpireBehavior$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/IntegrationExpireBehavior; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -6367,7 +6491,10 @@ public final class dev/kord/common/entity/InteractionCallbackData$Companion { public abstract class dev/kord/common/entity/InteractionResponseType { public static final field Companion Ldev/kord/common/entity/InteractionResponseType$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getType ()I + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/InteractionResponseType$ApplicationCommandAutoCompleteResult : dev/kord/common/entity/InteractionResponseType { @@ -6379,6 +6506,7 @@ public final class dev/kord/common/entity/InteractionResponseType$ChannelMessage } public final class dev/kord/common/entity/InteractionResponseType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6409,8 +6537,10 @@ public final class dev/kord/common/entity/InteractionResponseType$UpdateMessage public abstract class dev/kord/common/entity/InteractionType { public static final field Companion Ldev/kord/common/entity/InteractionType$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getType ()I - public fun toString ()Ljava/lang/String; + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/InteractionType$ApplicationCommand : dev/kord/common/entity/InteractionType { @@ -6422,6 +6552,7 @@ public final class dev/kord/common/entity/InteractionType$AutoComplete : dev/kor } public final class dev/kord/common/entity/InteractionType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6451,10 +6582,14 @@ public final class dev/kord/common/entity/InteractionsKt { public abstract class dev/kord/common/entity/InviteTargetType { public static final field Companion Ldev/kord/common/entity/InviteTargetType$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/InviteTargetType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6473,10 +6608,14 @@ public final class dev/kord/common/entity/InviteTargetType$Unknown : dev/kord/co public abstract class dev/kord/common/entity/MFALevel { public static final field Companion Ldev/kord/common/entity/MFALevel$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/MFALevel$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6528,10 +6667,14 @@ public final class dev/kord/common/entity/MessageActivity$Companion { public abstract class dev/kord/common/entity/MessageActivityType { public static final field Companion Ldev/kord/common/entity/MessageActivityType$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/MessageActivityType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6726,7 +6869,10 @@ public final class dev/kord/common/entity/MessageReactionRemoveData$Companion { public abstract class dev/kord/common/entity/MessageStickerType { public static final field Companion Ldev/kord/common/entity/MessageStickerType$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/MessageStickerType$APNG : dev/kord/common/entity/MessageStickerType { @@ -6734,6 +6880,7 @@ public final class dev/kord/common/entity/MessageStickerType$APNG : dev/kord/com } public final class dev/kord/common/entity/MessageStickerType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun getValues ()Ljava/util/Set; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6756,6 +6903,7 @@ public abstract class dev/kord/common/entity/MessageType { public final fun equals (Ljava/lang/Object;)Z public final fun getCode ()I public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/MessageType$AutoModerationAction : dev/kord/common/entity/MessageType { @@ -6787,6 +6935,7 @@ public final class dev/kord/common/entity/MessageType$ChatInputCommand : dev/kor } public final class dev/kord/common/entity/MessageType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun getValues ()Ljava/util/Set; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6895,7 +7044,10 @@ public final class dev/kord/common/entity/NotSerializable : kotlinx/serializatio public abstract class dev/kord/common/entity/NsfwLevel { public static final field Companion Ldev/kord/common/entity/NsfwLevel$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/NsfwLevel$AgeRestricted : dev/kord/common/entity/NsfwLevel { @@ -6903,6 +7055,7 @@ public final class dev/kord/common/entity/NsfwLevel$AgeRestricted : dev/kord/com } public final class dev/kord/common/entity/NsfwLevel$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -6971,10 +7124,14 @@ public final class dev/kord/common/entity/Overwrite$Companion { public abstract class dev/kord/common/entity/OverwriteType { public static final field Companion Ldev/kord/common/entity/OverwriteType$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/OverwriteType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -7227,10 +7384,14 @@ public final class dev/kord/common/entity/Permissions$PermissionsBuilder { public abstract class dev/kord/common/entity/PremiumTier { public static final field Companion Ldev/kord/common/entity/PremiumTier$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/PremiumTier$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -7255,9 +7416,18 @@ public final class dev/kord/common/entity/PremiumTier$Unknown : dev/kord/common/ } public abstract class dev/kord/common/entity/PresenceStatus { + public static final field Companion Ldev/kord/common/entity/PresenceStatus$Companion; public static final field StatusSerializer Ldev/kord/common/entity/PresenceStatus$StatusSerializer; public synthetic fun (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun equals (Ljava/lang/Object;)Z public final fun getValue ()Ljava/lang/String; + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; +} + +public final class dev/kord/common/entity/PresenceStatus$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/PresenceStatus$DoNotDisturb : dev/kord/common/entity/PresenceStatus { @@ -7281,6 +7451,7 @@ public final class dev/kord/common/entity/PresenceStatus$Online : dev/kord/commo } public final class dev/kord/common/entity/PresenceStatus$StatusSerializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/PresenceStatus$StatusSerializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/PresenceStatus; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -7370,9 +7541,18 @@ public final class dev/kord/common/entity/ResolvedObjects$Companion { } public abstract class dev/kord/common/entity/ScheduledEntityType { + public static final field Companion Ldev/kord/common/entity/ScheduledEntityType$Companion; public static final field Serializer Ldev/kord/common/entity/ScheduledEntityType$Serializer; 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/ScheduledEntityType$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/ScheduledEntityType$External : dev/kord/common/entity/ScheduledEntityType { @@ -7380,6 +7560,7 @@ public final class dev/kord/common/entity/ScheduledEntityType$External : dev/kor } public final class dev/kord/common/entity/ScheduledEntityType$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/ScheduledEntityType$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/ScheduledEntityType; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -7439,9 +7620,18 @@ public final class dev/kord/common/entity/SnowflakeKt { } public abstract class dev/kord/common/entity/StageInstancePrivacyLevel { + public static final field Companion Ldev/kord/common/entity/StageInstancePrivacyLevel$Companion; public static final field Serializer Ldev/kord/common/entity/StageInstancePrivacyLevel$Serializer; 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/StageInstancePrivacyLevel$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/StageInstancePrivacyLevel$GuildOnly : dev/kord/common/entity/StageInstancePrivacyLevel { @@ -7453,6 +7643,7 @@ public final class dev/kord/common/entity/StageInstancePrivacyLevel$Public : dev } public final class dev/kord/common/entity/StageInstancePrivacyLevel$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/StageInstancePrivacyLevel$Serializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/StageInstancePrivacyLevel; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -7548,20 +7739,30 @@ public final class dev/kord/common/entity/TargetUserType$Unknown : dev/kord/comm } public abstract class dev/kord/common/entity/TeamMembershipState { + public static final field Companion Ldev/kord/common/entity/TeamMembershipState$Companion; public static final field TeamMembershipStateSerializer Ldev/kord/common/entity/TeamMembershipState$TeamMembershipStateSerializer; 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/TeamMembershipState$Accepted : dev/kord/common/entity/TeamMembershipState { public static final field INSTANCE Ldev/kord/common/entity/TeamMembershipState$Accepted; } +public final class dev/kord/common/entity/TeamMembershipState$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/common/entity/TeamMembershipState$Invited : dev/kord/common/entity/TeamMembershipState { public static final field INSTANCE Ldev/kord/common/entity/TeamMembershipState$Invited; } public final class dev/kord/common/entity/TeamMembershipState$TeamMembershipStateSerializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/kord/common/entity/TeamMembershipState$TeamMembershipStateSerializer; public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/TeamMembershipState; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; @@ -7575,8 +7776,17 @@ public final class dev/kord/common/entity/TeamMembershipState$Unknown : dev/kord } public abstract class dev/kord/common/entity/TextInputStyle { + public static final field Companion Ldev/kord/common/entity/TextInputStyle$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/TextInputStyle$Companion { + public final fun getEntries ()Ljava/util/List; + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public final class dev/kord/common/entity/TextInputStyle$Paragraph : dev/kord/common/entity/TextInputStyle { @@ -7650,10 +7860,14 @@ public final class dev/kord/common/entity/UserFlags$UserFlagsSerializer : kotlin public abstract class dev/kord/common/entity/UserPremium { public static final field Companion Ldev/kord/common/entity/UserPremium$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/UserPremium$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -7676,10 +7890,14 @@ public final class dev/kord/common/entity/UserPremium$Unknown : dev/kord/common/ public abstract class dev/kord/common/entity/VerificationLevel { public static final field Companion Ldev/kord/common/entity/VerificationLevel$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/VerificationLevel$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -7713,6 +7931,7 @@ public abstract class dev/kord/common/entity/VideoQualityMode { 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/VideoQualityMode$Auto : dev/kord/common/entity/VideoQualityMode { @@ -7720,6 +7939,7 @@ public final class dev/kord/common/entity/VideoQualityMode$Auto : dev/kord/commo } public final class dev/kord/common/entity/VideoQualityMode$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -7734,7 +7954,14 @@ public final class dev/kord/common/entity/VideoQualityMode$Unknown : dev/kord/co public abstract class dev/kord/common/entity/WebhookType { public static final field Companion Ldev/kord/common/entity/WebhookType$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/WebhookType$Application : dev/kord/common/entity/WebhookType { + public static final field INSTANCE Ldev/kord/common/entity/WebhookType$Application; } public final class dev/kord/common/entity/WebhookType$ChannelFollower : dev/kord/common/entity/WebhookType { @@ -7742,6 +7969,7 @@ public final class dev/kord/common/entity/WebhookType$ChannelFollower : dev/kord } public final class dev/kord/common/entity/WebhookType$Companion { + public final fun getEntries ()Ljava/util/List; public final fun serializer ()Lkotlinx/serialization/KSerializer; } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 754c8ffafa9b..28ea464a6a35 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -19,6 +19,9 @@ dependencies { api(libs.bundles.common) testImplementation(libs.bundles.test.implementation) testRuntimeOnly(libs.bundles.test.runtime) + + compileOnly(projects.kspAnnotations) + ksp(projects.kspProcessors) } /* diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AllowedMentionType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AllowedMentionType.kt new file mode 100644 index 000000000000..2feddd0df80f --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AllowedMentionType.kt @@ -0,0 +1,91 @@ +// 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 + +@Serializable(with = AllowedMentionType.Serializer::class) +public sealed class AllowedMentionType( + /** + * The raw value used by Discord. + */ + public val `value`: String, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AllowedMentionType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AllowedMentionType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AllowedMentionType]. + * + * This is used as a fallback for [AllowedMentionType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: String, + ) : AllowedMentionType(value) + + /** + * Controls role mentions. + */ + public object RoleMentions : AllowedMentionType("roles") + + /** + * Controls user mentions + */ + public object UserMentions : AllowedMentionType("users") + + /** + * Controls @everyone and @here mentions. + */ + public object EveryoneMentions : AllowedMentionType("everyone") + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AllowedMentionType", + PrimitiveKind.STRING) + + public override fun serialize(encoder: Encoder, `value`: AllowedMentionType) = + encoder.encodeString(value.value) + + public override fun deserialize(decoder: Decoder) = + when (val value = decoder.decodeString()) { + "everyone" -> EveryoneMentions + "roles" -> RoleMentions + "users" -> UserMentions + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AllowedMentionType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + EveryoneMentions, + RoleMentions, + UserMentions, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandOptionType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandOptionType.kt new file mode 100644 index 000000000000..49838edd4625 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandOptionType.kt @@ -0,0 +1,124 @@ +// 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.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +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 + +@Serializable(with = ApplicationCommandOptionType.Serializer::class) +public sealed class ApplicationCommandOptionType( + /** + * The raw type used by Discord. + */ + public val type: Int, +) { + public final override fun equals(other: Any?): kotlin.Boolean = this === other || + (other is ApplicationCommandOptionType && this.type == other.type) + + public final override fun hashCode(): Int = type.hashCode() + + public final override fun toString(): kotlin.String = + "ApplicationCommandOptionType.${this::class.simpleName}(type=$type)" + + /** + * An unknown [ApplicationCommandOptionType]. + * + * This is used as a fallback for [ApplicationCommandOptionType]s that haven't been added to + * Kord yet. + */ + public class Unknown( + type: Int, + ) : ApplicationCommandOptionType(type) + + public object SubCommand : ApplicationCommandOptionType(1) + + public object SubCommandGroup : ApplicationCommandOptionType(2) + + public object String : ApplicationCommandOptionType(3) + + /** + * Any integer between `-2^53` and `2^53`. + */ + public object Integer : ApplicationCommandOptionType(4) + + public object Boolean : ApplicationCommandOptionType(5) + + public object User : ApplicationCommandOptionType(6) + + /** + * Includes all channel types + categories. + */ + public object Channel : ApplicationCommandOptionType(7) + + public object Role : ApplicationCommandOptionType(8) + + /** + * Includes users and roles. + */ + public object Mentionable : ApplicationCommandOptionType(9) + + /** + * Any double between `-2^53` and `2^53`. + */ + public object Number : ApplicationCommandOptionType(10) + + public object Attachment : ApplicationCommandOptionType(11) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ApplicationCommandOptionType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ApplicationCommandOptionType) = + encoder.encodeInt(value.type) + + public override fun deserialize(decoder: Decoder) = when (val type = decoder.decodeInt()) { + 1 -> SubCommand + 2 -> SubCommandGroup + 3 -> String + 4 -> Integer + 5 -> Boolean + 6 -> User + 7 -> Channel + 8 -> Role + 9 -> Mentionable + 10 -> Number + 11 -> Attachment + else -> Unknown(type) + } + } + + public companion object { + /** + * A [List] of all known [ApplicationCommandOptionType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + SubCommand, + SubCommandGroup, + String, + Integer, + Boolean, + User, + Channel, + Role, + Mentionable, + Number, + Attachment, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandPermissionType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandPermissionType.kt new file mode 100644 index 000000000000..389e729f9c8b --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandPermissionType.kt @@ -0,0 +1,82 @@ +// 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 + +@Serializable(with = ApplicationCommandPermissionType.Serializer::class) +public sealed class ApplicationCommandPermissionType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ApplicationCommandPermissionType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ApplicationCommandPermissionType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ApplicationCommandPermissionType]. + * + * This is used as a fallback for [ApplicationCommandPermissionType]s that haven't been added to + * Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ApplicationCommandPermissionType(value) + + public object Role : ApplicationCommandPermissionType(1) + + public object User : ApplicationCommandPermissionType(2) + + public object Channel : ApplicationCommandPermissionType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ApplicationCommandPermissionType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ApplicationCommandPermissionType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Role + 2 -> User + 3 -> Channel + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [ApplicationCommandPermissionType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Role, + User, + Channel, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandType.kt new file mode 100644 index 000000000000..f4873233bcd8 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ApplicationCommandType.kt @@ -0,0 +1,90 @@ +// 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 + +@Serializable(with = ApplicationCommandType.Serializer::class) +public sealed class ApplicationCommandType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ApplicationCommandType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ApplicationCommandType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ApplicationCommandType]. + * + * This is used as a fallback for [ApplicationCommandType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ApplicationCommandType(value) + + /** + * A text-based command that shows up when a user types `/`. + */ + public object ChatInput : ApplicationCommandType(1) + + /** + * A UI-based command that shows up when you right-click or tap on a user. + */ + public object User : ApplicationCommandType(2) + + /** + * A UI-based command that shows up when you right-click or tap on a message. + */ + public object Message : ApplicationCommandType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ApplicationCommandType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ApplicationCommandType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> ChatInput + 2 -> User + 3 -> Message + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [ApplicationCommandType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + ChatInput, + User, + Message, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AuditLogEvent.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AuditLogEvent.kt new file mode 100644 index 000000000000..e0062d9919d5 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AuditLogEvent.kt @@ -0,0 +1,432 @@ +// 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 + +@Serializable(with = AuditLogEvent.Serializer::class) +public sealed class AuditLogEvent( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AuditLogEvent && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AuditLogEvent.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AuditLogEvent]. + * + * This is used as a fallback for [AuditLogEvent]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : AuditLogEvent(value) + + /** + * Server settings were updated. + */ + public object GuildUpdate : AuditLogEvent(1) + + /** + * Channel was created. + */ + public object ChannelCreate : AuditLogEvent(10) + + /** + * Channel settings were updated. + */ + public object ChannelUpdate : AuditLogEvent(11) + + /** + * Channel was deleted. + */ + public object ChannelDelete : AuditLogEvent(12) + + /** + * Permission overwrite was added to a channel. + */ + public object ChannelOverwriteCreate : AuditLogEvent(13) + + /** + * Permission overwrite was updated for a channel. + */ + public object ChannelOverwriteUpdate : AuditLogEvent(14) + + /** + * Permission overwrite was deleted from a channel. + */ + public object ChannelOverwriteDelete : AuditLogEvent(15) + + /** + * Member was removed from server. + */ + public object MemberKick : AuditLogEvent(20) + + /** + * Members were pruned from server. + */ + public object MemberPrune : AuditLogEvent(21) + + /** + * Member was banned from server. + */ + public object MemberBanAdd : AuditLogEvent(22) + + /** + * Server ban was lifted for a member. + */ + public object MemberBanRemove : AuditLogEvent(23) + + /** + * Member was updated in server. + */ + public object MemberUpdate : AuditLogEvent(24) + + /** + * Member was added or removed from a role. + */ + public object MemberRoleUpdate : AuditLogEvent(25) + + /** + * Member was moved to a different voice channel. + */ + public object MemberMove : AuditLogEvent(26) + + /** + * Member was disconnected from a voice channel. + */ + public object MemberDisconnect : AuditLogEvent(27) + + /** + * Bot user was added to server. + */ + public object BotAdd : AuditLogEvent(28) + + /** + * Role was created. + */ + public object RoleCreate : AuditLogEvent(30) + + /** + * Role was edited. + */ + public object RoleUpdate : AuditLogEvent(31) + + /** + * Role was deleted. + */ + public object RoleDelete : AuditLogEvent(32) + + /** + * Server invite was created. + */ + public object InviteCreate : AuditLogEvent(40) + + /** + * Server invite was updated. + */ + public object InviteUpdate : AuditLogEvent(41) + + /** + * Server invite was deleted. + */ + public object InviteDelete : AuditLogEvent(42) + + /** + * Webhook was created. + */ + public object WebhookCreate : AuditLogEvent(50) + + /** + * Webhook properties or channel were updated. + */ + public object WebhookUpdate : AuditLogEvent(51) + + /** + * Webhook was deleted. + */ + public object WebhookDelete : AuditLogEvent(52) + + /** + * Emoji was created. + */ + public object EmojiCreate : AuditLogEvent(60) + + /** + * Emoji name was updated. + */ + public object EmojiUpdate : AuditLogEvent(61) + + /** + * Emoji was deleted. + */ + public object EmojiDelete : AuditLogEvent(62) + + /** + * Single message was deleted. + */ + public object MessageDelete : AuditLogEvent(72) + + /** + * Multiple messages were deleted. + */ + public object MessageBulkDelete : AuditLogEvent(73) + + /** + * Message was pinned to a channel. + */ + public object MessagePin : AuditLogEvent(74) + + /** + * Message was unpinned from a channel. + */ + public object MessageUnpin : AuditLogEvent(75) + + /** + * App was added to server. + */ + public object IntegrationCreate : AuditLogEvent(80) + + /** + * App was updated (as an example, its scopes were updated). + */ + public object IntegrationUpdate : AuditLogEvent(81) + + /** + * App was removed from server. + */ + public object IntegrationDelete : AuditLogEvent(82) + + /** + * Stage instance was created (stage channel becomes live). + */ + public object StageInstanceCreate : AuditLogEvent(83) + + /** + * Stage instance details were updated. + */ + public object StageInstanceUpdate : AuditLogEvent(84) + + /** + * Stage instance was deleted (stage channel no longer live). + */ + public object StageInstanceDelete : AuditLogEvent(85) + + /** + * Sticker was created. + */ + public object StickerCreate : AuditLogEvent(90) + + /** + * Sticker details were updated. + */ + public object StickerUpdate : AuditLogEvent(91) + + /** + * Sticker was deleted. + */ + public object StickerDelete : AuditLogEvent(92) + + /** + * Event was created. + */ + public object GuildScheduledEventCreate : AuditLogEvent(100) + + /** + * Event was updated. + */ + public object GuildScheduledEventUpdate : AuditLogEvent(101) + + /** + * Event was cancelled. + */ + public object GuildScheduledEventDelete : AuditLogEvent(102) + + /** + * Thread was created in a channel. + */ + public object ThreadCreate : AuditLogEvent(110) + + /** + * Thread was updated. + */ + public object ThreadUpdate : AuditLogEvent(111) + + /** + * Thread was deleted. + */ + public object ThreadDelete : AuditLogEvent(112) + + /** + * Permissions were updated for a command. + */ + public object ApplicationCommandPermissionUpdate : AuditLogEvent(121) + + /** + * Auto Moderation rule was created. + */ + public object AutoModerationRuleCreate : AuditLogEvent(140) + + /** + * Auto Moderation rule was updated. + */ + public object AutoModerationRuleUpdate : AuditLogEvent(141) + + /** + * Auto Moderation rule was deleted. + */ + public object AutoModerationRuleDelete : AuditLogEvent(142) + + /** + * Message was blocked by AutoMod (according to a rule). + */ + public object AutoModerationBlockMessage : AuditLogEvent(143) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AuditLogEvent", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: AuditLogEvent) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> GuildUpdate + 10 -> ChannelCreate + 11 -> ChannelUpdate + 12 -> ChannelDelete + 13 -> ChannelOverwriteCreate + 14 -> ChannelOverwriteUpdate + 15 -> ChannelOverwriteDelete + 20 -> MemberKick + 21 -> MemberPrune + 22 -> MemberBanAdd + 23 -> MemberBanRemove + 24 -> MemberUpdate + 25 -> MemberRoleUpdate + 26 -> MemberMove + 27 -> MemberDisconnect + 28 -> BotAdd + 30 -> RoleCreate + 31 -> RoleUpdate + 32 -> RoleDelete + 40 -> InviteCreate + 41 -> InviteUpdate + 42 -> InviteDelete + 50 -> WebhookCreate + 51 -> WebhookUpdate + 52 -> WebhookDelete + 60 -> EmojiCreate + 61 -> EmojiUpdate + 62 -> EmojiDelete + 72 -> MessageDelete + 73 -> MessageBulkDelete + 74 -> MessagePin + 75 -> MessageUnpin + 80 -> IntegrationCreate + 81 -> IntegrationUpdate + 82 -> IntegrationDelete + 83 -> StageInstanceCreate + 84 -> StageInstanceUpdate + 85 -> StageInstanceDelete + 90 -> StickerCreate + 91 -> StickerUpdate + 92 -> StickerDelete + 100 -> GuildScheduledEventCreate + 101 -> GuildScheduledEventUpdate + 102 -> GuildScheduledEventDelete + 110 -> ThreadCreate + 111 -> ThreadUpdate + 112 -> ThreadDelete + 121 -> ApplicationCommandPermissionUpdate + 140 -> AutoModerationRuleCreate + 141 -> AutoModerationRuleUpdate + 142 -> AutoModerationRuleDelete + 143 -> AutoModerationBlockMessage + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AuditLogEvent]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + GuildUpdate, + ChannelCreate, + ChannelUpdate, + ChannelDelete, + ChannelOverwriteCreate, + ChannelOverwriteUpdate, + ChannelOverwriteDelete, + MemberKick, + MemberPrune, + MemberBanAdd, + MemberBanRemove, + MemberUpdate, + MemberRoleUpdate, + MemberMove, + MemberDisconnect, + BotAdd, + RoleCreate, + RoleUpdate, + RoleDelete, + InviteCreate, + InviteUpdate, + InviteDelete, + WebhookCreate, + WebhookUpdate, + WebhookDelete, + EmojiCreate, + EmojiUpdate, + EmojiDelete, + MessageDelete, + MessageBulkDelete, + MessagePin, + MessageUnpin, + IntegrationCreate, + IntegrationUpdate, + IntegrationDelete, + StageInstanceCreate, + StageInstanceUpdate, + StageInstanceDelete, + StickerCreate, + StickerUpdate, + StickerDelete, + GuildScheduledEventCreate, + GuildScheduledEventUpdate, + GuildScheduledEventDelete, + ThreadCreate, + ThreadUpdate, + ThreadDelete, + ApplicationCommandPermissionUpdate, + AutoModerationRuleCreate, + AutoModerationRuleUpdate, + AutoModerationRuleDelete, + AutoModerationBlockMessage, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationActionType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationActionType.kt new file mode 100644 index 000000000000..4bea21c6f84f --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationActionType.kt @@ -0,0 +1,100 @@ +// 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 + +/** + * The type of action. + */ +@Serializable(with = AutoModerationActionType.Serializer::class) +public sealed class AutoModerationActionType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AutoModerationActionType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AutoModerationActionType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AutoModerationActionType]. + * + * This is used as a fallback for [AutoModerationActionType]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : AutoModerationActionType(value) + + /** + * Blocks the content of a message according to the rule. + */ + public object BlockMessage : AutoModerationActionType(1) + + /** + * Logs user content to a specified channel. + */ + public object SendAlertMessage : AutoModerationActionType(2) + + /** + * Timeout user for a specified duration. + * + * A [Timeout] action can only be set up for + * [Keyword][dev.kord.common.entity.AutoModerationRuleTriggerType.Keyword] and + * [MentionSpam][dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam] rules. The + * [ModerateMembers][dev.kord.common.entity.Permission.ModerateMembers] permission is required to + * use the [Timeout] action type. + */ + public object Timeout : AutoModerationActionType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationActionType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: AutoModerationActionType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> BlockMessage + 2 -> SendAlertMessage + 3 -> Timeout + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AutoModerationActionType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + BlockMessage, + SendAlertMessage, + Timeout, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleEventType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleEventType.kt new file mode 100644 index 000000000000..88ae933669d8 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleEventType.kt @@ -0,0 +1,80 @@ +// 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 + +/** + * Indicates in what event context a rule should be checked. + */ +@Serializable(with = AutoModerationRuleEventType.Serializer::class) +public sealed class AutoModerationRuleEventType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AutoModerationRuleEventType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AutoModerationRuleEventType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AutoModerationRuleEventType]. + * + * This is used as a fallback for [AutoModerationRuleEventType]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : AutoModerationRuleEventType(value) + + /** + * When a member sends or edits a message in the guild. + */ + public object MessageSend : AutoModerationRuleEventType(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleEventType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: AutoModerationRuleEventType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> MessageSend + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AutoModerationRuleEventType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + MessageSend, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleKeywordPresetType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleKeywordPresetType.kt new file mode 100644 index 000000000000..00009f875466 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleKeywordPresetType.kt @@ -0,0 +1,94 @@ +// 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 + +/** + * An internally pre-defined wordset which will be searched for in content. + */ +@Serializable(with = AutoModerationRuleKeywordPresetType.Serializer::class) +public sealed class AutoModerationRuleKeywordPresetType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AutoModerationRuleKeywordPresetType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AutoModerationRuleKeywordPresetType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AutoModerationRuleKeywordPresetType]. + * + * This is used as a fallback for [AutoModerationRuleKeywordPresetType]s that haven't been added + * to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : AutoModerationRuleKeywordPresetType(value) + + /** + * Words that may be considered forms of swearing or cursing. + */ + public object Profanity : AutoModerationRuleKeywordPresetType(1) + + /** + * Words that refer to sexually explicit behavior or activity. + */ + public object SexualContent : AutoModerationRuleKeywordPresetType(2) + + /** + * Personal insults or words that may be considered hate speech. + */ + public object Slurs : AutoModerationRuleKeywordPresetType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleKeywordPresetType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, + `value`: AutoModerationRuleKeywordPresetType) = encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Profanity + 2 -> SexualContent + 3 -> Slurs + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AutoModerationRuleKeywordPresetType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Profanity, + SexualContent, + Slurs, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleTriggerType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleTriggerType.kt new file mode 100644 index 000000000000..241a44984a57 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/AutoModerationRuleTriggerType.kt @@ -0,0 +1,110 @@ +// 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 dev.kord.common.`annotation`.KordExperimental +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 + +/** + * Characterizes the type of content which can trigger the rule. + */ +@Serializable(with = AutoModerationRuleTriggerType.Serializer::class) +public sealed class AutoModerationRuleTriggerType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is AutoModerationRuleTriggerType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "AutoModerationRuleTriggerType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [AutoModerationRuleTriggerType]. + * + * This is used as a fallback for [AutoModerationRuleTriggerType]s that haven't been added to + * Kord yet. + */ + public class Unknown( + `value`: Int, + ) : AutoModerationRuleTriggerType(value) + + /** + * Check if content contains words from a user defined list of keywords. + */ + public object Keyword : AutoModerationRuleTriggerType(1) + + /** + * Check if content represents generic spam. + * + * This [trigger type][AutoModerationRuleTriggerType] is not yet released, so it cannot be used + * in most servers. + */ + @KordExperimental + public object Spam : AutoModerationRuleTriggerType(3) + + /** + * Check if content contains words from internal pre-defined wordsets. + */ + public object KeywordPreset : AutoModerationRuleTriggerType(4) + + /** + * Check if content contains more mentions than allowed. + * + * This [trigger type][AutoModerationRuleTriggerType] is not yet released, so it cannot be used + * in most servers. + */ + @KordExperimental + public object MentionSpam : AutoModerationRuleTriggerType(5) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleTriggerType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: AutoModerationRuleTriggerType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Keyword + 3 -> Spam + 4 -> KeywordPreset + 5 -> MentionSpam + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [AutoModerationRuleTriggerType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Keyword, + Spam, + KeywordPreset, + MentionSpam, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ButtonStyle.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ButtonStyle.kt new file mode 100644 index 000000000000..25694f3a4056 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ButtonStyle.kt @@ -0,0 +1,135 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +/** + * Style of a [button][dev.kord.common.entity.ComponentType.Button]. + * + * A preview of the different styles can be found + * [here](https://discord.com/developers/docs/interactions/message-components#button-object-button-styles). + */ +@Serializable(with = ButtonStyle.NewSerializer::class) +public sealed class ButtonStyle( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ButtonStyle && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ButtonStyle.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ButtonStyle]. + * + * This is used as a fallback for [ButtonStyle]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ButtonStyle(value) + + /** + * Blurple. + */ + public object Primary : ButtonStyle(1) + + /** + * Grey. + */ + public object Secondary : ButtonStyle(2) + + /** + * Green. + */ + public object Success : ButtonStyle(3) + + /** + * Red. + */ + public object Danger : ButtonStyle(4) + + /** + * Grey, navigates to a URL. + */ + public object Link : ButtonStyle(5) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ButtonStyle", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ButtonStyle) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Primary + 2 -> Secondary + 3 -> Success + 4 -> Danger + 5 -> Link + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'ButtonStyle.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ButtonStyle.serializer()", imports = + arrayOf("dev.kord.common.entity.ButtonStyle")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'ButtonStyle.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ButtonStyle.serializer()", imports = + arrayOf("dev.kord.common.entity.ButtonStyle")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [ButtonStyle]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Primary, + Secondary, + Success, + Danger, + Link, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ChannelType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ChannelType.kt new file mode 100644 index 000000000000..d5880fa1e184 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ChannelType.kt @@ -0,0 +1,168 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +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 + +@Serializable(with = ChannelType.Serializer::class) +public sealed class ChannelType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ChannelType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ChannelType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ChannelType]. + * + * This is used as a fallback for [ChannelType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ChannelType(value) + + /** + * A text channel within a server. + */ + public object GuildText : ChannelType(0) + + /** + * A direct message between users. + */ + public object DM : ChannelType(1) + + /** + * A voice channel within a server. + */ + public object GuildVoice : ChannelType(2) + + /** + * A direct message between multiple users. + */ + public object GroupDM : ChannelType(3) + + /** + * An + * [organizational category](https://support.discord.com/hc/en-us/articles/115001580171-Channel-Categories-101) + * that contains up to 50 channels. + */ + public object GuildCategory : ChannelType(4) + + /** + * A channel that + * [users can follow and crosspost into their own server](https://support.discord.com/hc/en-us/articles/360032008192). + */ + public object GuildNews : ChannelType(5) + + /** + * A temporary sub-channel within a [GuildNews] channel. + */ + public object PublicNewsThread : ChannelType(10) + + /** + * A temporary sub-channel within a [GuildText] channel. + */ + public object PublicGuildThread : ChannelType(11) + + /** + * A temporary sub-channel within a [GuildText] channel that is only viewable by those invited + * and those with the [ManageThreads][dev.kord.common.entity.Permission.ManageThreads] permission. + */ + public object PrivateThread : ChannelType(12) + + /** + * A voice channel for + * [hosting events with an audience](https://support.discord.com/hc/en-us/articles/1500005513722). + */ + public object GuildStageVoice : ChannelType(13) + + /** + * The channel in a + * [hub](https://support.discord.com/hc/en-us/articles/4406046651927-Discord-Student-Hubs-FAQ) + * containing the listed servers. + */ + public object GuildDirectory : ChannelType(14) + + /** + * A channel in which game developers can sell their game on Discord. + * + * @suppress + */ + @Deprecated( + level = DeprecationLevel.ERROR, + message = + "Discord no longer offers the ability to purchase a license to sell PC games on Discord and store channels were removed on March 10, 2022. See https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation for more information.", + ) + public object GuildStore : ChannelType(6) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ChannelType", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ChannelType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> GuildText + 1 -> DM + 2 -> GuildVoice + 3 -> GroupDM + 4 -> GuildCategory + 5 -> GuildNews + 6 -> @Suppress("DEPRECATION_ERROR") GuildStore + 10 -> PublicNewsThread + 11 -> PublicGuildThread + 12 -> PrivateThread + 13 -> GuildStageVoice + 14 -> GuildDirectory + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [ChannelType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + GuildText, + DM, + GuildVoice, + GroupDM, + GuildCategory, + GuildNews, + @Suppress("DEPRECATION_ERROR") GuildStore, + PublicNewsThread, + PublicGuildThread, + PrivateThread, + GuildStageVoice, + GuildDirectory, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ComponentType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ComponentType.kt new file mode 100644 index 000000000000..26eecbabcda1 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ComponentType.kt @@ -0,0 +1,122 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = ComponentType.NewSerializer::class) +public sealed class ComponentType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ComponentType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ComponentType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ComponentType]. + * + * This is used as a fallback for [ComponentType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ComponentType(value) + + /** + * A container for other components. + */ + public object ActionRow : ComponentType(1) + + /** + * A button object. + */ + public object Button : ComponentType(2) + + /** + * A select menu for picking from choices. + */ + public object SelectMenu : ComponentType(3) + + /** + * A text input object. + */ + public object TextInput : ComponentType(4) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ComponentType", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ComponentType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> ActionRow + 2 -> Button + 3 -> SelectMenu + 4 -> TextInput + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'ComponentType.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ComponentType.serializer()", imports = + arrayOf("dev.kord.common.entity.ComponentType")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'ComponentType.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ComponentType.serializer()", imports = + arrayOf("dev.kord.common.entity.ComponentType")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [ComponentType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + ActionRow, + Button, + SelectMenu, + TextInput, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DefaultMessageNotificationLevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DefaultMessageNotificationLevel.kt new file mode 100644 index 000000000000..c94b50eda964 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DefaultMessageNotificationLevel.kt @@ -0,0 +1,84 @@ +// 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 + +@Serializable(with = DefaultMessageNotificationLevel.Serializer::class) +public sealed class DefaultMessageNotificationLevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is DefaultMessageNotificationLevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "DefaultMessageNotificationLevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [DefaultMessageNotificationLevel]. + * + * This is used as a fallback for [DefaultMessageNotificationLevel]s that haven't been added to + * Kord yet. + */ + public class Unknown( + `value`: Int, + ) : DefaultMessageNotificationLevel(value) + + /** + * Members will receive notifications for all messages by default. + */ + public object AllMessages : DefaultMessageNotificationLevel(0) + + /** + * Members will receive notifications only for messages that @mention them by default. + */ + public object OnlyMentions : DefaultMessageNotificationLevel(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.DefaultMessageNotificationLevel", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: DefaultMessageNotificationLevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> AllMessages + 1 -> OnlyMentions + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [DefaultMessageNotificationLevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + AllMessages, + OnlyMentions, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DiscordConnectionVisibility.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DiscordConnectionVisibility.kt new file mode 100644 index 000000000000..1645f0e18fb1 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/DiscordConnectionVisibility.kt @@ -0,0 +1,84 @@ +// 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 + +@Serializable(with = DiscordConnectionVisibility.Serializer::class) +public sealed class DiscordConnectionVisibility( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is DiscordConnectionVisibility && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "DiscordConnectionVisibility.${this::class.simpleName}(value=$value)" + + /** + * An unknown [DiscordConnectionVisibility]. + * + * This is used as a fallback for [DiscordConnectionVisibility]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : DiscordConnectionVisibility(value) + + /** + * Invisible to everyone except the user themselves. + */ + public object None : DiscordConnectionVisibility(0) + + /** + * Visible to everyone. + */ + public object Everyone : DiscordConnectionVisibility(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.DiscordConnectionVisibility", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: DiscordConnectionVisibility) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> None + 1 -> Everyone + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [DiscordConnectionVisibility]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + None, + Everyone, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/EmbedType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/EmbedType.kt new file mode 100644 index 000000000000..9b469bbbde8c --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/EmbedType.kt @@ -0,0 +1,111 @@ +// 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 + +@Serializable(with = EmbedType.Serializer::class) +public sealed class EmbedType( + /** + * The raw value used by Discord. + */ + public val `value`: String, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is EmbedType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "EmbedType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [EmbedType]. + * + * This is used as a fallback for [EmbedType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: String, + ) : EmbedType(value) + + /** + * Generic embed rendered from embed attributes. + */ + public object Rich : EmbedType("rich") + + /** + * Image embed. + */ + public object Image : EmbedType("image") + + /** + * Video embed. + */ + public object Video : EmbedType("video") + + /** + * Animated gif image embed rendered as a video embed. + */ + public object Gifv : EmbedType("gifv") + + /** + * Article embed. + */ + public object Article : EmbedType("article") + + /** + * Link embed. + */ + public object Link : EmbedType("link") + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.EmbedType", PrimitiveKind.STRING) + + public override fun serialize(encoder: Encoder, `value`: EmbedType) = + encoder.encodeString(value.value) + + public override fun deserialize(decoder: Decoder) = + when (val value = decoder.decodeString()) { + "article" -> Article + "gifv" -> Gifv + "image" -> Image + "link" -> Link + "rich" -> Rich + "video" -> Video + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [EmbedType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Article, + Gifv, + Image, + Link, + Rich, + Video, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ExplicitContentFilter.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ExplicitContentFilter.kt new file mode 100644 index 000000000000..aabaa5d1d001 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ExplicitContentFilter.kt @@ -0,0 +1,90 @@ +// 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 + +@Serializable(with = ExplicitContentFilter.Serializer::class) +public sealed class ExplicitContentFilter( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ExplicitContentFilter && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ExplicitContentFilter.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ExplicitContentFilter]. + * + * This is used as a fallback for [ExplicitContentFilter]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ExplicitContentFilter(value) + + /** + * Media content will not be scanned. + */ + public object Disabled : ExplicitContentFilter(0) + + /** + * Media content sent by members without roles will be scanned. + */ + public object MembersWithoutRoles : ExplicitContentFilter(1) + + /** + * Media content sent by all members will be scanned. + */ + public object AllMembers : ExplicitContentFilter(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ExplicitContentFilter", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ExplicitContentFilter) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> Disabled + 1 -> MembersWithoutRoles + 2 -> AllMembers + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [ExplicitContentFilter]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Disabled, + MembersWithoutRoles, + AllMembers, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildFeature.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildFeature.kt new file mode 100644 index 000000000000..b40841537e6a --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildFeature.kt @@ -0,0 +1,254 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +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 + +@Serializable(with = GuildFeature.Serializer::class) +public sealed class GuildFeature( + /** + * The raw value used by Discord. + */ + public val `value`: String, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is GuildFeature && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "GuildFeature.${this::class.simpleName}(value=$value)" + + /** + * An unknown [GuildFeature]. + * + * This is used as a fallback for [GuildFeature]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: String, + ) : GuildFeature(value) + + /** + * Guild has access to set an animated guild banner image. + */ + public object AnimatedBanner : GuildFeature("ANIMATED_BANNER") + + /** + * Guild has access to set an animated guild icon. + */ + public object AnimatedIcon : GuildFeature("ANIMATED_ICON") + + /** + * Guild has set up auto moderation rules. + */ + public object AutoModeration : GuildFeature("AUTO_MODERATION") + + /** + * Guild has access to set a guild banner image. + */ + public object Banner : GuildFeature("BANNER") + + /** + * Guild can enable welcome screen, Membership Screening, stage channels and discovery, and + * receives community updates. + */ + public object Community : GuildFeature("COMMUNITY") + + /** + * Guild is able to be discovered in the directory. + */ + public object Discoverable : GuildFeature("DISCOVERABLE") + + /** + * Guild is able to be featured in the directory. + */ + public object Featurable : GuildFeature("FEATURABLE") + + /** + * Guild has access to set an invite splash background. + */ + public object InviteSplash : GuildFeature("INVITE_SPLASH") + + /** + * Guild has enabled Membership Screening. + */ + public object MemberVerificationGateEnabled : GuildFeature("MEMBER_VERIFICATION_GATE_ENABLED") + + /** + * Guild has enabled monetization. + */ + public object MonetizationEnabled : GuildFeature("MONETIZATION_ENABLED") + + /** + * Guild has increased custom sticker slots. + */ + public object MoreStickers : GuildFeature("MORE_STICKERS") + + /** + * Guild has access to create announcement channels. + */ + public object News : GuildFeature("NEWS") + + /** + * Guild is partnered. + */ + public object Partnered : GuildFeature("PARTNERED") + + /** + * Guild can be previewed before joining via Membership Screening or the directory. + */ + public object PreviewEnabled : GuildFeature("PREVIEW_ENABLED") + + /** + * Guild has access to create private threads + */ + public object PrivateThreads : GuildFeature("PRIVATE_THREADS") + + /** + * Guild is able to set role icons. + */ + public object RoleIcons : GuildFeature("ROLE_ICONS") + + /** + * Guild has enabled ticketed events. + */ + public object TicketedEventsEnabled : GuildFeature("TICKETED_EVENTS_ENABLED") + + /** + * Guild has access to set a vanity URL. + */ + public object VanityUrl : GuildFeature("VANITY_URL") + + /** + * Guild is verified. + */ + public object Verified : GuildFeature("VERIFIED") + + /** + * Guild has access to set 384kbps bitrate in voice (previously VIP voice servers). + */ + public object VIPRegions : GuildFeature("VIP_REGIONS") + + /** + * Guild has enabled the welcome screen. + */ + public object WelcomeScreenEnabled : GuildFeature("WELCOME_SCREEN_ENABLED") + + /** + * Guild has access to use commerce features (i.e. create store channels). + * + * @suppress + */ + @Deprecated( + level = DeprecationLevel.ERROR, + message = + "Discord no longer offers the ability to purchase a license to sell PC games on Discord and store channels were removed on March 10, 2022. See https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation for more information.", + ) + public object Commerce : GuildFeature("COMMERCE") + + /** + * Guild has access to the three-day archive time for threads + * + * @suppress. + */ + @Deprecated(message = "Thread archive durations are no longer boost locked.") + public object ThreeDayThreadArchive : GuildFeature("THREE_DAY_THREAD_ARCHIVE") + + /** + * Guild has access to the seven day archive time for threads. + * + * @suppress + */ + @Deprecated(message = "Thread archive durations are no longer boost locked.") + public object SevenDayThreadArchive : GuildFeature("SEVEN_DAY_THREAD_ARCHIVE") + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.GuildFeature", + PrimitiveKind.STRING) + + public override fun serialize(encoder: Encoder, `value`: GuildFeature) = + encoder.encodeString(value.value) + + public override fun deserialize(decoder: Decoder) = + when (val value = decoder.decodeString()) { + "ANIMATED_BANNER" -> AnimatedBanner + "ANIMATED_ICON" -> AnimatedIcon + "AUTO_MODERATION" -> AutoModeration + "BANNER" -> Banner + "COMMERCE" -> @Suppress("DEPRECATION_ERROR") Commerce + "COMMUNITY" -> Community + "DISCOVERABLE" -> Discoverable + "FEATURABLE" -> Featurable + "INVITE_SPLASH" -> InviteSplash + "MEMBER_VERIFICATION_GATE_ENABLED" -> MemberVerificationGateEnabled + "MONETIZATION_ENABLED" -> MonetizationEnabled + "MORE_STICKERS" -> MoreStickers + "NEWS" -> News + "PARTNERED" -> Partnered + "PREVIEW_ENABLED" -> PreviewEnabled + "PRIVATE_THREADS" -> PrivateThreads + "ROLE_ICONS" -> RoleIcons + "SEVEN_DAY_THREAD_ARCHIVE" -> @Suppress("DEPRECATION") SevenDayThreadArchive + "THREE_DAY_THREAD_ARCHIVE" -> @Suppress("DEPRECATION") ThreeDayThreadArchive + "TICKETED_EVENTS_ENABLED" -> TicketedEventsEnabled + "VANITY_URL" -> VanityUrl + "VERIFIED" -> Verified + "VIP_REGIONS" -> VIPRegions + "WELCOME_SCREEN_ENABLED" -> WelcomeScreenEnabled + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [GuildFeature]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + AnimatedBanner, + AnimatedIcon, + AutoModeration, + Banner, + @Suppress("DEPRECATION_ERROR") Commerce, + Community, + Discoverable, + Featurable, + InviteSplash, + MemberVerificationGateEnabled, + MonetizationEnabled, + MoreStickers, + News, + Partnered, + PreviewEnabled, + PrivateThreads, + RoleIcons, + @Suppress("DEPRECATION") SevenDayThreadArchive, + @Suppress("DEPRECATION") ThreeDayThreadArchive, + TicketedEventsEnabled, + VanityUrl, + Verified, + VIPRegions, + WelcomeScreenEnabled, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventPrivacyLevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventPrivacyLevel.kt new file mode 100644 index 000000000000..d82a3c345bda --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventPrivacyLevel.kt @@ -0,0 +1,77 @@ +// 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 + +@Serializable(with = GuildScheduledEventPrivacyLevel.Serializer::class) +public sealed class GuildScheduledEventPrivacyLevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is GuildScheduledEventPrivacyLevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "GuildScheduledEventPrivacyLevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [GuildScheduledEventPrivacyLevel]. + * + * This is used as a fallback for [GuildScheduledEventPrivacyLevel]s that haven't been added to + * Kord yet. + */ + public class Unknown( + `value`: Int, + ) : GuildScheduledEventPrivacyLevel(value) + + /** + * The scheduled event is only accessible to guild members. + */ + public object GuildOnly : GuildScheduledEventPrivacyLevel(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.GuildScheduledEventPrivacyLevel", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: GuildScheduledEventPrivacyLevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 2 -> GuildOnly + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [GuildScheduledEventPrivacyLevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + GuildOnly, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventStatus.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventStatus.kt new file mode 100644 index 000000000000..facf2fc8afcc --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/GuildScheduledEventStatus.kt @@ -0,0 +1,112 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = GuildScheduledEventStatus.NewSerializer::class) +public sealed class GuildScheduledEventStatus( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is GuildScheduledEventStatus && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "GuildScheduledEventStatus.${this::class.simpleName}(value=$value)" + + /** + * An unknown [GuildScheduledEventStatus]. + * + * This is used as a fallback for [GuildScheduledEventStatus]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : GuildScheduledEventStatus(value) + + public object Scheduled : GuildScheduledEventStatus(1) + + public object Active : GuildScheduledEventStatus(2) + + public object Completed : GuildScheduledEventStatus(3) + + public object Cancelled : GuildScheduledEventStatus(4) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.GuildScheduledEventStatus", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: GuildScheduledEventStatus) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Scheduled + 2 -> Active + 3 -> Completed + 4 -> Cancelled + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'GuildScheduledEventStatus.serializer()' instead.", + replaceWith = ReplaceWith(expression = "GuildScheduledEventStatus.serializer()", imports = + arrayOf("dev.kord.common.entity.GuildScheduledEventStatus")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'GuildScheduledEventStatus.serializer()' instead.", + replaceWith = ReplaceWith(expression = "GuildScheduledEventStatus.serializer()", imports + = arrayOf("dev.kord.common.entity.GuildScheduledEventStatus")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [GuildScheduledEventStatus]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Scheduled, + Active, + Completed, + Cancelled, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/IntegrationExpireBehavior.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/IntegrationExpireBehavior.kt new file mode 100644 index 000000000000..d265b7936470 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/IntegrationExpireBehavior.kt @@ -0,0 +1,104 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = IntegrationExpireBehavior.NewSerializer::class) +public sealed class IntegrationExpireBehavior( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is IntegrationExpireBehavior && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "IntegrationExpireBehavior.${this::class.simpleName}(value=$value)" + + /** + * An unknown [IntegrationExpireBehavior]. + * + * This is used as a fallback for [IntegrationExpireBehavior]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : IntegrationExpireBehavior(value) + + public object RemoveRole : IntegrationExpireBehavior(0) + + public object Kick : IntegrationExpireBehavior(1) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.IntegrationExpireBehavior", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: IntegrationExpireBehavior) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> RemoveRole + 1 -> Kick + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'IntegrationExpireBehavior.serializer()' instead.", + replaceWith = ReplaceWith(expression = "IntegrationExpireBehavior.serializer()", imports = + arrayOf("dev.kord.common.entity.IntegrationExpireBehavior")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'IntegrationExpireBehavior.serializer()' instead.", + replaceWith = ReplaceWith(expression = "IntegrationExpireBehavior.serializer()", imports + = arrayOf("dev.kord.common.entity.IntegrationExpireBehavior")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [IntegrationExpireBehavior]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + RemoveRole, + Kick, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionResponseType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionResponseType.kt new file mode 100644 index 000000000000..7b3caee4b911 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionResponseType.kt @@ -0,0 +1,120 @@ +// 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 + +@Serializable(with = InteractionResponseType.Serializer::class) +public sealed class InteractionResponseType( + /** + * The raw type used by Discord. + */ + public val type: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is InteractionResponseType && this.type == other.type) + + public final override fun hashCode(): Int = type.hashCode() + + public final override fun toString(): String = + "InteractionResponseType.${this::class.simpleName}(type=$type)" + + /** + * An unknown [InteractionResponseType]. + * + * This is used as a fallback for [InteractionResponseType]s that haven't been added to Kord + * yet. + */ + public class Unknown( + type: Int, + ) : InteractionResponseType(type) + + /** + * ACK a [Ping][dev.kord.common.entity.InteractionType.Ping]. + */ + public object Pong : InteractionResponseType(1) + + /** + * Respond to an interaction with a message. + */ + public object ChannelMessageWithSource : InteractionResponseType(4) + + /** + * ACK an interaction and edit a response later, the user sees a loading state. + */ + public object DeferredChannelMessageWithSource : InteractionResponseType(5) + + /** + * For components, ACK an interaction and edit the original message later; the user does not see + * a loading state. + */ + public object DeferredUpdateMessage : InteractionResponseType(6) + + /** + * For components, edit the message the component was attached to. + */ + public object UpdateMessage : InteractionResponseType(7) + + /** + * Respond to an autocomplete interaction with suggested choices. + */ + public object ApplicationCommandAutoCompleteResult : InteractionResponseType(8) + + /** + * Respond to an interaction with a popup modal. + */ + public object Modal : InteractionResponseType(9) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.InteractionResponseType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: InteractionResponseType) = + encoder.encodeInt(value.type) + + public override fun deserialize(decoder: Decoder) = when (val type = decoder.decodeInt()) { + 1 -> Pong + 4 -> ChannelMessageWithSource + 5 -> DeferredChannelMessageWithSource + 6 -> DeferredUpdateMessage + 7 -> UpdateMessage + 8 -> ApplicationCommandAutoCompleteResult + 9 -> Modal + else -> Unknown(type) + } + } + + public companion object { + /** + * A [List] of all known [InteractionResponseType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Pong, + ChannelMessageWithSource, + DeferredChannelMessageWithSource, + DeferredUpdateMessage, + UpdateMessage, + ApplicationCommandAutoCompleteResult, + Modal, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionType.kt new file mode 100644 index 000000000000..cd00f7b34afb --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InteractionType.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 + +@Serializable(with = InteractionType.Serializer::class) +public sealed class InteractionType( + /** + * The raw type used by Discord. + */ + public val type: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is InteractionType && this.type == other.type) + + public final override fun hashCode(): Int = type.hashCode() + + public final override fun toString(): String = + "InteractionType.${this::class.simpleName}(type=$type)" + + /** + * An unknown [InteractionType]. + * + * This is used as a fallback for [InteractionType]s that haven't been added to Kord yet. + */ + public class Unknown( + type: Int, + ) : InteractionType(type) + + public object Ping : InteractionType(1) + + public object ApplicationCommand : InteractionType(2) + + public object Component : InteractionType(3) + + public object AutoComplete : InteractionType(4) + + public object ModalSubmit : InteractionType(5) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.InteractionType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: InteractionType) = + encoder.encodeInt(value.type) + + public override fun deserialize(decoder: Decoder) = when (val type = decoder.decodeInt()) { + 1 -> Ping + 2 -> ApplicationCommand + 3 -> Component + 4 -> AutoComplete + 5 -> ModalSubmit + else -> Unknown(type) + } + } + + public companion object { + /** + * A [List] of all known [InteractionType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Ping, + ApplicationCommand, + Component, + AutoComplete, + ModalSubmit, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InviteTargetType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InviteTargetType.kt new file mode 100644 index 000000000000..38347da753f2 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/InviteTargetType.kt @@ -0,0 +1,77 @@ +// 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 + +@Serializable(with = InviteTargetType.Serializer::class) +public sealed class InviteTargetType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is InviteTargetType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "InviteTargetType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [InviteTargetType]. + * + * This is used as a fallback for [InviteTargetType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : InviteTargetType(value) + + public object Stream : InviteTargetType(1) + + public object EmbeddedApplication : InviteTargetType(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.InviteTargetType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: InviteTargetType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Stream + 2 -> EmbeddedApplication + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [InviteTargetType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Stream, + EmbeddedApplication, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MFALevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MFALevel.kt new file mode 100644 index 000000000000..4a481c372f63 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MFALevel.kt @@ -0,0 +1,82 @@ +// 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 + +@Serializable(with = MFALevel.Serializer::class) +public sealed class MFALevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is MFALevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "MFALevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [MFALevel]. + * + * This is used as a fallback for [MFALevel]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : MFALevel(value) + + /** + * Guild has no MFA/2FA requirement for moderation actions. + */ + public object None : MFALevel(0) + + /** + * Guild has a 2FA requirement for moderation actions. + */ + public object Elevated : MFALevel(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.MFALevel", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: MFALevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> None + 1 -> Elevated + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [MFALevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + None, + Elevated, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageActivityType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageActivityType.kt new file mode 100644 index 000000000000..9447811be291 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageActivityType.kt @@ -0,0 +1,85 @@ +// 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 + +@Serializable(with = MessageActivityType.Serializer::class) +public sealed class MessageActivityType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is MessageActivityType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "MessageActivityType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [MessageActivityType]. + * + * This is used as a fallback for [MessageActivityType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : MessageActivityType(value) + + public object Join : MessageActivityType(1) + + public object Spectate : MessageActivityType(2) + + public object Listen : MessageActivityType(3) + + public object JoinRequest : MessageActivityType(5) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.MessageActivityType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: MessageActivityType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Join + 2 -> Spectate + 3 -> Listen + 5 -> JoinRequest + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [MessageActivityType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Join, + Spectate, + Listen, + JoinRequest, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageStickerType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageStickerType.kt new file mode 100644 index 000000000000..72e6d25e624e --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageStickerType.kt @@ -0,0 +1,91 @@ +// 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.Deprecated +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.collections.Set +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 + +@Serializable(with = MessageStickerType.Serializer::class) +public sealed class MessageStickerType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is MessageStickerType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "MessageStickerType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [MessageStickerType]. + * + * This is used as a fallback for [MessageStickerType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : MessageStickerType(value) + + public object PNG : MessageStickerType(1) + + public object APNG : MessageStickerType(2) + + public object LOTTIE : MessageStickerType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.MessageStickerType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: MessageStickerType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> PNG + 2 -> APNG + 3 -> LOTTIE + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [MessageStickerType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + PNG, + APNG, + LOTTIE, + ) + } + + + @Deprecated( + message = "Renamed to 'entries'.", + replaceWith = ReplaceWith(expression = "this.entries", imports = arrayOf()), + ) + public val values: Set + get() = entries.toSet() + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageType.kt new file mode 100644 index 000000000000..db6c3049c82a --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/MessageType.kt @@ -0,0 +1,224 @@ +// 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.Deprecated +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.collections.Set +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 + +@Serializable(with = MessageType.Serializer::class) +public sealed class MessageType( + /** + * The raw code used by Discord. + */ + public val code: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is MessageType && this.code == other.code) + + public final override fun hashCode(): Int = code.hashCode() + + public final override fun toString(): String = + "MessageType.${this::class.simpleName}(code=$code)" + + /** + * An unknown [MessageType]. + * + * This is used as a fallback for [MessageType]s that haven't been added to Kord yet. + */ + public class Unknown( + code: Int, + ) : MessageType(code) + + public object Default : MessageType(0) + + public object RecipientAdd : MessageType(1) + + public object RecipientRemove : MessageType(2) + + public object Call : MessageType(3) + + public object ChannelNameChange : MessageType(4) + + public object ChannelIconChange : MessageType(5) + + public object ChannelPinnedMessage : MessageType(6) + + public object UserJoin : MessageType(7) + + public object GuildBoost : MessageType(8) + + public object GuildBoostTier1 : MessageType(9) + + public object GuildBoostTier2 : MessageType(10) + + public object GuildBoostTier3 : MessageType(11) + + public object ChannelFollowAdd : MessageType(12) + + public object GuildDiscoveryDisqualified : MessageType(14) + + public object GuildDiscoveryRequalified : MessageType(15) + + public object GuildDiscoveryGracePeriodInitialWarning : MessageType(16) + + public object GuildDiscoveryGracePeriodFinalWarning : MessageType(17) + + public object ThreadCreated : MessageType(18) + + public object Reply : MessageType(19) + + public object ChatInputCommand : MessageType(20) + + public object ThreadStarterMessage : MessageType(21) + + public object GuildInviteReminder : MessageType(22) + + public object ContextMenuCommand : MessageType(23) + + public object AutoModerationAction : MessageType(24) + + /** + * @suppress + */ + @Deprecated( + message = "Renamed to 'UserJoin'.", + replaceWith = ReplaceWith(expression = "UserJoin", imports = + arrayOf("dev.kord.common.entity.MessageType.UserJoin")), + ) + public object GuildMemberJoin : MessageType(7) + + /** + * @suppress + */ + @Deprecated( + message = "Renamed to 'GuildBoost'.", + replaceWith = ReplaceWith(expression = "GuildBoost", imports = + arrayOf("dev.kord.common.entity.MessageType.GuildBoost")), + ) + public object UserPremiumGuildSubscription : MessageType(8) + + /** + * @suppress + */ + @Deprecated( + message = "Renamed to 'GuildBoostTier1'.", + replaceWith = ReplaceWith(expression = "GuildBoostTier1", imports = + arrayOf("dev.kord.common.entity.MessageType.GuildBoostTier1")), + ) + public object UserPremiumGuildSubscriptionTierOne : MessageType(9) + + /** + * @suppress + */ + @Deprecated( + message = "Renamed to 'GuildBoostTier2'.", + replaceWith = ReplaceWith(expression = "GuildBoostTier2", imports = + arrayOf("dev.kord.common.entity.MessageType.GuildBoostTier2")), + ) + public object UserPremiumGuildSubscriptionTwo : MessageType(10) + + /** + * @suppress + */ + @Deprecated( + message = "Renamed to 'GuildBoostTier3'.", + replaceWith = ReplaceWith(expression = "GuildBoostTier3", imports = + arrayOf("dev.kord.common.entity.MessageType.GuildBoostTier3")), + ) + public object UserPremiumGuildSubscriptionThree : MessageType(11) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.MessageType", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: MessageType) = + encoder.encodeInt(value.code) + + public override fun deserialize(decoder: Decoder) = when (val code = decoder.decodeInt()) { + 0 -> Default + 1 -> RecipientAdd + 2 -> RecipientRemove + 3 -> Call + 4 -> ChannelNameChange + 5 -> ChannelIconChange + 6 -> ChannelPinnedMessage + 7 -> UserJoin + 8 -> GuildBoost + 9 -> GuildBoostTier1 + 10 -> GuildBoostTier2 + 11 -> GuildBoostTier3 + 12 -> ChannelFollowAdd + 14 -> GuildDiscoveryDisqualified + 15 -> GuildDiscoveryRequalified + 16 -> GuildDiscoveryGracePeriodInitialWarning + 17 -> GuildDiscoveryGracePeriodFinalWarning + 18 -> ThreadCreated + 19 -> Reply + 20 -> ChatInputCommand + 21 -> ThreadStarterMessage + 22 -> GuildInviteReminder + 23 -> ContextMenuCommand + 24 -> AutoModerationAction + else -> Unknown(code) + } + } + + public companion object { + /** + * A [List] of all known [MessageType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Default, + RecipientAdd, + RecipientRemove, + Call, + ChannelNameChange, + ChannelIconChange, + ChannelPinnedMessage, + UserJoin, + GuildBoost, + GuildBoostTier1, + GuildBoostTier2, + GuildBoostTier3, + ChannelFollowAdd, + GuildDiscoveryDisqualified, + GuildDiscoveryRequalified, + GuildDiscoveryGracePeriodInitialWarning, + GuildDiscoveryGracePeriodFinalWarning, + ThreadCreated, + Reply, + ChatInputCommand, + ThreadStarterMessage, + GuildInviteReminder, + ContextMenuCommand, + AutoModerationAction, + ) + } + + + @Deprecated( + message = "Renamed to 'entries'.", + replaceWith = ReplaceWith(expression = "this.entries", imports = arrayOf()), + ) + public val values: Set + get() = entries.toSet() + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/NsfwLevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/NsfwLevel.kt new file mode 100644 index 000000000000..6b8241cad028 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/NsfwLevel.kt @@ -0,0 +1,84 @@ +// 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 + +@Serializable(with = NsfwLevel.Serializer::class) +public sealed class NsfwLevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is NsfwLevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "NsfwLevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [NsfwLevel]. + * + * This is used as a fallback for [NsfwLevel]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : NsfwLevel(value) + + public object Default : NsfwLevel(0) + + public object Explicit : NsfwLevel(1) + + public object Safe : NsfwLevel(2) + + public object AgeRestricted : NsfwLevel(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.NsfwLevel", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: NsfwLevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> Default + 1 -> Explicit + 2 -> Safe + 3 -> AgeRestricted + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [NsfwLevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Default, + Explicit, + Safe, + AgeRestricted, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/OverwriteType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/OverwriteType.kt new file mode 100644 index 000000000000..1fb5d6485b6a --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/OverwriteType.kt @@ -0,0 +1,76 @@ +// 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 + +@Serializable(with = OverwriteType.Serializer::class) +public sealed class OverwriteType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is OverwriteType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "OverwriteType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [OverwriteType]. + * + * This is used as a fallback for [OverwriteType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : OverwriteType(value) + + public object Role : OverwriteType(0) + + public object Member : OverwriteType(1) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.OverwriteType", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: OverwriteType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> Role + 1 -> Member + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [OverwriteType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Role, + Member, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PremiumTier.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PremiumTier.kt new file mode 100644 index 000000000000..3cecba0ea8d9 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PremiumTier.kt @@ -0,0 +1,96 @@ +// 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 + +@Serializable(with = PremiumTier.Serializer::class) +public sealed class PremiumTier( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is PremiumTier && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "PremiumTier.${this::class.simpleName}(value=$value)" + + /** + * An unknown [PremiumTier]. + * + * This is used as a fallback for [PremiumTier]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : PremiumTier(value) + + /** + * Guild has not unlocked any Server Boost perks. + */ + public object None : PremiumTier(0) + + /** + * Guild has unlocked Server Boost level 1 perks. + */ + public object One : PremiumTier(1) + + /** + * Guild has unlocked Server Boost level 2 perks. + */ + public object Two : PremiumTier(2) + + /** + * Guild has unlocked Server Boost level 3 perks. + */ + public object Three : PremiumTier(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.PremiumTier", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: PremiumTier) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> None + 1 -> One + 2 -> Two + 3 -> Three + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [PremiumTier]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + None, + One, + Two, + Three, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PresenceStatus.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PresenceStatus.kt new file mode 100644 index 000000000000..27fa0e83b06c --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/PresenceStatus.kt @@ -0,0 +1,131 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = PresenceStatus.Serializer::class) +public sealed class PresenceStatus( + /** + * The raw value used by Discord. + */ + public val `value`: String, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is PresenceStatus && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "PresenceStatus.${this::class.simpleName}(value=$value)" + + /** + * An unknown [PresenceStatus]. + * + * This is used as a fallback for [PresenceStatus]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: String, + ) : PresenceStatus(value) + + /** + * Online. + */ + public object Online : PresenceStatus("online") + + /** + * Do Not Disturb. + */ + public object DoNotDisturb : PresenceStatus("dnd") + + /** + * AFK. + */ + public object Idle : PresenceStatus("idle") + + /** + * Invisible and shown as offline. + */ + public object Invisible : PresenceStatus("invisible") + + /** + * Offline. + */ + public object Offline : PresenceStatus("offline") + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.PresenceStatus", + PrimitiveKind.STRING) + + public override fun serialize(encoder: Encoder, `value`: PresenceStatus) = + encoder.encodeString(value.value) + + public override fun deserialize(decoder: Decoder) = + when (val value = decoder.decodeString()) { + "dnd" -> DoNotDisturb + "idle" -> Idle + "invisible" -> Invisible + "offline" -> Offline + "online" -> Online + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'PresenceStatus.serializer()' instead.", + replaceWith = ReplaceWith(expression = "PresenceStatus.serializer()", imports = + arrayOf("dev.kord.common.entity.PresenceStatus")), + ) + public object StatusSerializer : KSerializer by Serializer { + @Deprecated( + message = "Use 'PresenceStatus.serializer()' instead.", + replaceWith = ReplaceWith(expression = "PresenceStatus.serializer()", imports = + arrayOf("dev.kord.common.entity.PresenceStatus")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [PresenceStatus]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + DoNotDisturb, + Idle, + Invisible, + Offline, + Online, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val StatusSerializer: StatusSerializer = StatusSerializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ScheduledEntityType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ScheduledEntityType.kt new file mode 100644 index 000000000000..d2401a610806 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/ScheduledEntityType.kt @@ -0,0 +1,107 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = ScheduledEntityType.NewSerializer::class) +public sealed class ScheduledEntityType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is ScheduledEntityType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "ScheduledEntityType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [ScheduledEntityType]. + * + * This is used as a fallback for [ScheduledEntityType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : ScheduledEntityType(value) + + public object StageInstance : ScheduledEntityType(1) + + public object Voice : ScheduledEntityType(2) + + public object External : ScheduledEntityType(3) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.ScheduledEntityType", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: ScheduledEntityType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> StageInstance + 2 -> Voice + 3 -> External + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'ScheduledEntityType.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ScheduledEntityType.serializer()", imports = + arrayOf("dev.kord.common.entity.ScheduledEntityType")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'ScheduledEntityType.serializer()' instead.", + replaceWith = ReplaceWith(expression = "ScheduledEntityType.serializer()", imports = + arrayOf("dev.kord.common.entity.ScheduledEntityType")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [ScheduledEntityType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + StageInstance, + Voice, + External, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/StageInstancePrivacyLevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/StageInstancePrivacyLevel.kt new file mode 100644 index 000000000000..9c652f0d9284 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/StageInstancePrivacyLevel.kt @@ -0,0 +1,111 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = StageInstancePrivacyLevel.NewSerializer::class) +public sealed class StageInstancePrivacyLevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is StageInstancePrivacyLevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "StageInstancePrivacyLevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [StageInstancePrivacyLevel]. + * + * This is used as a fallback for [StageInstancePrivacyLevel]s that haven't been added to Kord + * yet. + */ + public class Unknown( + `value`: Int, + ) : StageInstancePrivacyLevel(value) + + /** + * The Stage instance is visible to only guild members. + */ + public object GuildOnly : StageInstancePrivacyLevel(2) + + /** + * The Stage instance is visible publicly. + */ + @Deprecated(message = "Stages are no longer discoverable") + public object Public : StageInstancePrivacyLevel(1) + + internal object NewSerializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.StageInstancePrivacyLevel", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: StageInstancePrivacyLevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> @Suppress("DEPRECATION") Public + 2 -> GuildOnly + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'StageInstancePrivacyLevel.serializer()' instead.", + replaceWith = ReplaceWith(expression = "StageInstancePrivacyLevel.serializer()", imports = + arrayOf("dev.kord.common.entity.StageInstancePrivacyLevel")), + ) + public object Serializer : KSerializer by NewSerializer { + @Deprecated( + message = "Use 'StageInstancePrivacyLevel.serializer()' instead.", + replaceWith = ReplaceWith(expression = "StageInstancePrivacyLevel.serializer()", imports + = arrayOf("dev.kord.common.entity.StageInstancePrivacyLevel")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [StageInstancePrivacyLevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + @Suppress("DEPRECATION") Public, + GuildOnly, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val Serializer: Serializer = Serializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TeamMembershipState.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TeamMembershipState.kt new file mode 100644 index 000000000000..5447a0b0e01b --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TeamMembershipState.kt @@ -0,0 +1,104 @@ +// 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.Deprecated +import kotlin.DeprecationLevel +import kotlin.Int +import kotlin.LazyThreadSafetyMode.PUBLICATION +import kotlin.ReplaceWith +import kotlin.String +import kotlin.Suppress +import kotlin.collections.List +import kotlin.jvm.JvmField +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 + +@Serializable(with = TeamMembershipState.Serializer::class) +public sealed class TeamMembershipState( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is TeamMembershipState && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "TeamMembershipState.${this::class.simpleName}(value=$value)" + + /** + * An unknown [TeamMembershipState]. + * + * This is used as a fallback for [TeamMembershipState]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : TeamMembershipState(value) + + public object Invited : TeamMembershipState(1) + + public object Accepted : TeamMembershipState(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.TeamMembershipState", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: TeamMembershipState) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Invited + 2 -> Accepted + else -> Unknown(value) + } + } + + @Deprecated( + message = "Use 'TeamMembershipState.serializer()' instead.", + replaceWith = ReplaceWith(expression = "TeamMembershipState.serializer()", imports = + arrayOf("dev.kord.common.entity.TeamMembershipState")), + ) + public object TeamMembershipStateSerializer : KSerializer by Serializer { + @Deprecated( + message = "Use 'TeamMembershipState.serializer()' instead.", + replaceWith = ReplaceWith(expression = "TeamMembershipState.serializer()", imports = + arrayOf("dev.kord.common.entity.TeamMembershipState")), + ) + public fun serializer(): KSerializer = this + } + + public companion object { + /** + * A [List] of all known [TeamMembershipState]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Invited, + Accepted, + ) + } + + + @Suppress(names = arrayOf("DEPRECATION")) + @Deprecated( + level = DeprecationLevel.HIDDEN, + message = "Binary compatibility", + ) + @JvmField + public val TeamMembershipStateSerializer: TeamMembershipStateSerializer = + TeamMembershipStateSerializer + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TextInputStyle.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TextInputStyle.kt new file mode 100644 index 000000000000..c02f7d955acf --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/TextInputStyle.kt @@ -0,0 +1,86 @@ +// 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 + +/** + * Style of a [text input][dev.kord.common.entity.ComponentType.TextInput]. + */ +@Serializable(with = TextInputStyle.Serializer::class) +public sealed class TextInputStyle( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is TextInputStyle && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "TextInputStyle.${this::class.simpleName}(value=$value)" + + /** + * An unknown [TextInputStyle]. + * + * This is used as a fallback for [TextInputStyle]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : TextInputStyle(value) + + /** + * A single-line input. + */ + public object Short : TextInputStyle(1) + + /** + * A multi-line input. + */ + public object Paragraph : TextInputStyle(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.TextInputStyle", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: TextInputStyle) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Short + 2 -> Paragraph + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [TextInputStyle]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Short, + Paragraph, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/UserPremium.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/UserPremium.kt new file mode 100644 index 000000000000..858567d6f134 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/UserPremium.kt @@ -0,0 +1,83 @@ +// 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 + +/** + * Premium types denote the level of premium a user has. + */ +@Serializable(with = UserPremium.Serializer::class) +public sealed class UserPremium( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is UserPremium && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "UserPremium.${this::class.simpleName}(value=$value)" + + /** + * An unknown [UserPremium]. + * + * This is used as a fallback for [UserPremium]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : UserPremium(value) + + public object None : UserPremium(0) + + public object NitroClassic : UserPremium(1) + + public object Nitro : UserPremium(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.UserPremium", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: UserPremium) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> None + 1 -> NitroClassic + 2 -> Nitro + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [UserPremium]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + None, + NitroClassic, + Nitro, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VerificationLevel.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VerificationLevel.kt new file mode 100644 index 000000000000..c8d45ed6d162 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VerificationLevel.kt @@ -0,0 +1,104 @@ +// 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 + +@Serializable(with = VerificationLevel.Serializer::class) +public sealed class VerificationLevel( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is VerificationLevel && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "VerificationLevel.${this::class.simpleName}(value=$value)" + + /** + * An unknown [VerificationLevel]. + * + * This is used as a fallback for [VerificationLevel]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : VerificationLevel(value) + + /** + * Unrestricted. + */ + public object None : VerificationLevel(0) + + /** + * Must have verified email on account. + */ + public object Low : VerificationLevel(1) + + /** + * Must be registered on Discord for longer than 5 minutes. + */ + public object Medium : VerificationLevel(2) + + /** + * Must be a member of the server for longer than 10 minutes. + */ + public object High : VerificationLevel(3) + + /** + * Must have a verified phone number. + */ + public object VeryHigh : VerificationLevel(4) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.VerificationLevel", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: VerificationLevel) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 0 -> None + 1 -> Low + 2 -> Medium + 3 -> High + 4 -> VeryHigh + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [VerificationLevel]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + None, + Low, + Medium, + High, + VeryHigh, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VideoQualityMode.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VideoQualityMode.kt new file mode 100644 index 000000000000..d395f3be386f --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/VideoQualityMode.kt @@ -0,0 +1,83 @@ +// 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 + +@Serializable(with = VideoQualityMode.Serializer::class) +public sealed class VideoQualityMode( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is VideoQualityMode && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "VideoQualityMode.${this::class.simpleName}(value=$value)" + + /** + * An unknown [VideoQualityMode]. + * + * This is used as a fallback for [VideoQualityMode]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : VideoQualityMode(value) + + /** + * Discord chooses the quality for optimal performance. + */ + public object Auto : VideoQualityMode(1) + + /** + * 720p. + */ + public object Full : VideoQualityMode(2) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.VideoQualityMode", + PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: VideoQualityMode) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Auto + 2 -> Full + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [VideoQualityMode]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Auto, + Full, + ) + } + + } +} diff --git a/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/WebhookType.kt b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/WebhookType.kt new file mode 100644 index 000000000000..211eeb857128 --- /dev/null +++ b/common/build/generated/ksp/main/kotlin/dev/kord/common/entity/WebhookType.kt @@ -0,0 +1,90 @@ +// 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 + +@Serializable(with = WebhookType.Serializer::class) +public sealed class WebhookType( + /** + * The raw value used by Discord. + */ + public val `value`: Int, +) { + public final override fun equals(other: Any?): Boolean = this === other || + (other is WebhookType && this.value == other.value) + + public final override fun hashCode(): Int = value.hashCode() + + public final override fun toString(): String = + "WebhookType.${this::class.simpleName}(value=$value)" + + /** + * An unknown [WebhookType]. + * + * This is used as a fallback for [WebhookType]s that haven't been added to Kord yet. + */ + public class Unknown( + `value`: Int, + ) : WebhookType(value) + + /** + * Incoming Webhooks can post messages to channels with a generated token. + */ + public object Incoming : WebhookType(1) + + /** + * Channel Follower Webhooks are internal webhooks used with Channel Following to post new + * messages into channels. + */ + public object ChannelFollower : WebhookType(2) + + /** + * Application webhooks are webhooks used with Interactions. + */ + public object Application : WebhookType(3) + + internal object Serializer : KSerializer { + public override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.kord.common.entity.WebhookType", PrimitiveKind.INT) + + public override fun serialize(encoder: Encoder, `value`: WebhookType) = + encoder.encodeInt(value.value) + + public override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { + 1 -> Incoming + 2 -> ChannelFollower + 3 -> Application + else -> Unknown(value) + } + } + + public companion object { + /** + * A [List] of all known [WebhookType]s. + */ + public val entries: List by lazy(mode = PUBLICATION) { + listOf( + Incoming, + ChannelFollower, + Application, + ) + } + + } +} diff --git a/common/src/main/kotlin/entity/AuditLog.kt b/common/src/main/kotlin/entity/AuditLog.kt index 83c755210705..4a125a5777be 100644 --- a/common/src/main/kotlin/entity/AuditLog.kt +++ b/common/src/main/kotlin/entity/AuditLog.kt @@ -1,3 +1,61 @@ +@file:GenerateKordEnum( + name = "AuditLogEvent", valueType = INT, + entries = [ + Entry("GuildUpdate", intValue = 1, kDoc = "Server settings were updated."), + Entry("ChannelCreate", intValue = 10, kDoc = "Channel was created."), + Entry("ChannelUpdate", intValue = 11, kDoc = "Channel settings were updated."), + Entry("ChannelDelete", intValue = 12, kDoc = "Channel was deleted."), + Entry("ChannelOverwriteCreate", intValue = 13, kDoc = "Permission overwrite was added to a channel."), + Entry("ChannelOverwriteUpdate", intValue = 14, kDoc = "Permission overwrite was updated for a channel."), + Entry("ChannelOverwriteDelete", intValue = 15, kDoc = "Permission overwrite was deleted from a channel."), + Entry("MemberKick", intValue = 20, kDoc = "Member was removed from server."), + Entry("MemberPrune", intValue = 21, kDoc = "Members were pruned from server."), + Entry("MemberBanAdd", intValue = 22, kDoc = "Member was banned from server."), + Entry("MemberBanRemove", intValue = 23, kDoc = "Server ban was lifted for a member."), + Entry("MemberUpdate", intValue = 24, kDoc = "Member was updated in server."), + Entry("MemberRoleUpdate", intValue = 25, kDoc = "Member was added or removed from a role."), + Entry("MemberMove", intValue = 26, kDoc = "Member was moved to a different voice channel."), + Entry("MemberDisconnect", intValue = 27, kDoc = "Member was disconnected from a voice channel."), + Entry("BotAdd", intValue = 28, kDoc = "Bot user was added to server."), + Entry("RoleCreate", intValue = 30, kDoc = "Role was created."), + Entry("RoleUpdate", intValue = 31, kDoc = "Role was edited."), + Entry("RoleDelete", intValue = 32, kDoc = "Role was deleted."), + Entry("InviteCreate", intValue = 40, kDoc = "Server invite was created."), + Entry("InviteUpdate", intValue = 41, kDoc = "Server invite was updated."), + Entry("InviteDelete", intValue = 42, kDoc = "Server invite was deleted."), + Entry("WebhookCreate", intValue = 50, kDoc = "Webhook was created."), + Entry("WebhookUpdate", intValue = 51, kDoc = "Webhook properties or channel were updated."), + Entry("WebhookDelete", intValue = 52, kDoc = "Webhook was deleted."), + Entry("EmojiCreate", intValue = 60, kDoc = "Emoji was created."), + Entry("EmojiUpdate", intValue = 61, kDoc = "Emoji name was updated."), + Entry("EmojiDelete", intValue = 62, kDoc = "Emoji was deleted."), + Entry("MessageDelete", intValue = 72, kDoc = "Single message was deleted."), + Entry("MessageBulkDelete", intValue = 73, kDoc = "Multiple messages were deleted."), + Entry("MessagePin", intValue = 74, kDoc = "Message was pinned to a channel."), + Entry("MessageUnpin", intValue = 75, kDoc = "Message was unpinned from a channel."), + Entry("IntegrationCreate", intValue = 80, kDoc = "App was added to server."), + Entry("IntegrationUpdate", intValue = 81, kDoc = "App was updated (as an example, its scopes were updated)."), + Entry("IntegrationDelete", intValue = 82, kDoc = "App was removed from server."), + Entry("StageInstanceCreate", intValue = 83, kDoc = "Stage instance was created (stage channel becomes live)."), + Entry("StageInstanceUpdate", intValue = 84, kDoc = "Stage instance details were updated."), + Entry("StageInstanceDelete", intValue = 85, kDoc = "Stage instance was deleted (stage channel no longer live)."), + Entry("StickerCreate", intValue = 90, kDoc = "Sticker was created."), + Entry("StickerUpdate", intValue = 91, kDoc = "Sticker details were updated."), + Entry("StickerDelete", intValue = 92, kDoc = "Sticker was deleted."), + Entry("GuildScheduledEventCreate", intValue = 100, kDoc = "Event was created."), + Entry("GuildScheduledEventUpdate", intValue = 101, kDoc = "Event was updated."), + Entry("GuildScheduledEventDelete", intValue = 102, kDoc = "Event was cancelled."), + Entry("ThreadCreate", intValue = 110, kDoc = "Thread was created in a channel."), + Entry("ThreadUpdate", intValue = 111, kDoc = "Thread was updated."), + Entry("ThreadDelete", intValue = 112, kDoc = "Thread was deleted."), + Entry("ApplicationCommandPermissionUpdate", intValue = 121, kDoc = "Permissions were updated for a command."), + Entry("AutoModerationRuleCreate", intValue = 140, kDoc = "Auto Moderation rule was created."), + Entry("AutoModerationRuleUpdate", intValue = 141, kDoc = "Auto Moderation rule was updated."), + Entry("AutoModerationRuleDelete", intValue = 142, kDoc = "Auto Moderation rule was deleted."), + Entry("AutoModerationBlockMessage", intValue = 143, kDoc = "Message was blocked by AutoMod (according to a rule)."), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional @@ -6,6 +64,9 @@ import dev.kord.common.entity.optional.orEmpty import dev.kord.common.serialization.DurationInDaysSerializer import dev.kord.common.serialization.DurationInSecondsSerializer import dev.kord.common.serialization.IntOrStringSerializer +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.datetime.Instant import kotlinx.serialization.* import kotlinx.serialization.builtins.serializer @@ -436,127 +497,3 @@ public sealed class AuditLogChangeKey(public val name: String, public val ser } } } - -@Serializable(with = AuditLogEvent.Serializer::class) -public sealed class AuditLogEvent(public val value: Int) { - public class Unknown(value: Int) : AuditLogEvent(value) - public object GuildUpdate : AuditLogEvent(1) - public object ChannelCreate : AuditLogEvent(10) - public object ChannelUpdate : AuditLogEvent(11) - public object ChannelDelete : AuditLogEvent(12) - public object ChannelOverwriteCreate : AuditLogEvent(13) - public object ChannelOverwriteUpdate : AuditLogEvent(14) - public object ChannelOverwriteDelete : AuditLogEvent(15) - public object MemberKick : AuditLogEvent(20) - public object MemberPrune : AuditLogEvent(21) - public object MemberBanAdd : AuditLogEvent(22) - public object MemberBanRemove : AuditLogEvent(23) - public object MemberUpdate : AuditLogEvent(24) - public object MemberRoleUpdate : AuditLogEvent(25) - public object MemberMove : AuditLogEvent(26) - public object MemberDisconnect : AuditLogEvent(27) - public object BotAdd : AuditLogEvent(28) - public object RoleCreate : AuditLogEvent(30) - public object RoleUpdate : AuditLogEvent(31) - public object RoleDelete : AuditLogEvent(32) - public object InviteCreate : AuditLogEvent(40) - public object InviteUpdate : AuditLogEvent(41) - public object InviteDelete : AuditLogEvent(42) - public object WebhookCreate : AuditLogEvent(50) - public object WebhookUpdate : AuditLogEvent(51) - public object WebhookDelete : AuditLogEvent(52) - public object EmojiCreate : AuditLogEvent(60) - public object EmojiUpdate : AuditLogEvent(61) - public object EmojiDelete : AuditLogEvent(62) - public object MessageDelete : AuditLogEvent(72) - public object MessageBulkDelete : AuditLogEvent(73) - public object MessagePin : AuditLogEvent(74) - public object MessageUnpin : AuditLogEvent(75) - public object IntegrationCreate : AuditLogEvent(80) - public object IntegrationUpdate : AuditLogEvent(81) - public object IntegrationDelete : AuditLogEvent(82) - public object StageInstanceCreate : AuditLogEvent(83) - public object StageInstanceUpdate : AuditLogEvent(84) - public object StageInstanceDelete : AuditLogEvent(85) - public object StickerCreate : AuditLogEvent(90) - public object StickerUpdate : AuditLogEvent(91) - public object StickerDelete : AuditLogEvent(92) - public object GuildScheduledEventCreate : AuditLogEvent(100) - public object GuildScheduledEventUpdate : AuditLogEvent(101) - public object GuildScheduledEventDelete : AuditLogEvent(102) - public object ThreadCreate : AuditLogEvent(110) - public object ThreadUpdate : AuditLogEvent(111) - public object ThreadDelete : AuditLogEvent(112) - public object ApplicationCommandPermissionUpdate : AuditLogEvent(121) - public object AutoModerationRuleCreate : AuditLogEvent(140) - public object AutoModerationRuleUpdate : AuditLogEvent(141) - public object AutoModerationRuleDelete : AuditLogEvent(142) - public object AutoModerationBlockMessage : AuditLogEvent(143) - - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.AuditLogEvent", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: AuditLogEvent) { - encoder.encodeInt(value.value) - } - - override fun deserialize(decoder: Decoder): AuditLogEvent = when (val value = decoder.decodeInt()) { - 1 -> GuildUpdate - 10 -> ChannelCreate - 11 -> ChannelUpdate - 12 -> ChannelDelete - 13 -> ChannelOverwriteCreate - 14 -> ChannelOverwriteUpdate - 15 -> ChannelOverwriteDelete - 20 -> MemberKick - 21 -> MemberPrune - 22 -> MemberBanAdd - 23 -> MemberBanRemove - 24 -> MemberUpdate - 25 -> MemberRoleUpdate - 26 -> MemberMove - 27 -> MemberDisconnect - 28 -> BotAdd - 30 -> RoleCreate - 31 -> RoleUpdate - 32 -> RoleDelete - 40 -> InviteCreate - 41 -> InviteUpdate - 42 -> InviteDelete - 50 -> WebhookCreate - 51 -> WebhookUpdate - 52 -> WebhookDelete - 60 -> EmojiCreate - 61 -> EmojiUpdate - 62 -> EmojiDelete - 72 -> MessageDelete - 73 -> MessageBulkDelete - 74 -> MessagePin - 75 -> MessageUnpin - 80 -> IntegrationCreate - 81 -> IntegrationUpdate - 82 -> IntegrationDelete - 83 -> StageInstanceCreate - 84 -> StageInstanceUpdate - 85 -> StageInstanceDelete - 90 -> StickerCreate - 91 -> StickerUpdate - 92 -> StickerDelete - 100 -> GuildScheduledEventCreate - 101 -> GuildScheduledEventUpdate - 102 -> GuildScheduledEventDelete - 110 -> ThreadCreate - 111 -> ThreadUpdate - 112 -> ThreadDelete - 121 -> ApplicationCommandPermissionUpdate - 140 -> AutoModerationRuleCreate - 141 -> AutoModerationRuleUpdate - 142 -> AutoModerationRuleDelete - 143 -> AutoModerationBlockMessage - else -> Unknown(value) - } - } - -} diff --git a/common/src/main/kotlin/entity/AutoModeration.kt b/common/src/main/kotlin/entity/AutoModeration.kt index a8a56ece30f4..a9864d19c696 100644 --- a/common/src/main/kotlin/entity/AutoModeration.kt +++ b/common/src/main/kotlin/entity/AutoModeration.kt @@ -1,20 +1,71 @@ +@file:GenerateKordEnum( + name = "AutoModerationRuleTriggerType", valueType = INT, + kDoc = "Characterizes the type of content which can trigger the rule.", + entries = [ + Entry("Keyword", intValue = 1, kDoc = "Check if content contains words from a user defined list of keywords."), + Entry( + "Spam", intValue = 3, isKordExperimental = true, + kDoc = "Check if content represents generic spam.\n\nThis [trigger·type][AutoModerationRuleTriggerType] " + + "is not yet released, so it cannot be used in most servers." + ), + Entry( + "KeywordPreset", intValue = 4, + kDoc = "Check if content contains words from internal pre-defined wordsets." + ), + Entry( + "MentionSpam", intValue = 5, isKordExperimental = true, + kDoc = "Check if content contains more mentions than allowed.\n\nThis [trigger·type][" + + "AutoModerationRuleTriggerType] is not yet released, so it cannot be used in most servers." + ), + ], +) + +@file:GenerateKordEnum( + name = "AutoModerationRuleKeywordPresetType", valueType = INT, + kDoc = "An internally pre-defined wordset which will be searched for in content.", + entries = [ + Entry("Profanity", intValue = 1, kDoc = "Words that may be considered forms of swearing or cursing."), + Entry("SexualContent", intValue = 2, kDoc = "Words that refer to sexually explicit behavior or activity."), + Entry("Slurs", intValue = 3, kDoc = "Personal insults or words that may be considered hate speech."), + ], +) + +@file:GenerateKordEnum( + name = "AutoModerationRuleEventType", valueType = INT, + kDoc = "Indicates in what event context a rule should be checked.", + entries = [ + Entry("MessageSend", intValue = 1, kDoc = "When a member sends or edits a message in the guild."), + ], +) + +@file:GenerateKordEnum( + name = "AutoModerationActionType", valueType = INT, + kDoc = "The type of action.", + entries = [ + Entry("BlockMessage", intValue = 1, kDoc = "Blocks the content of a message according to the rule."), + Entry("SendAlertMessage", intValue = 2, kDoc = "Logs user content to a specified channel."), + Entry( + "Timeout", intValue = 3, + kDoc = "Timeout user for a specified duration.\n\nA [Timeout] action can only be set up for " + + "[Keyword][dev.kord.common.entity.AutoModerationRuleTriggerType.Keyword] and " + + "[MentionSpam][dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam] rules. The " + + "[ModerateMembers][dev.kord.common.entity.Permission.ModerateMembers] permission is required to " + + "use the [Timeout] action type." + ), + ], +) + package dev.kord.common.entity -import dev.kord.common.annotation.KordExperimental -import dev.kord.common.entity.AutoModerationRuleTriggerType.Keyword -import dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam -import dev.kord.common.entity.Permission.ModerateMembers import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.entity.optional.OptionalSnowflake import dev.kord.common.serialization.DurationInSeconds -import kotlinx.serialization.KSerializer +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import kotlinx.serialization.descriptors.PrimitiveKind -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder @Serializable public data class DiscordAutoModerationRule( @@ -38,59 +89,6 @@ public data class DiscordAutoModerationRule( val exemptChannels: List, ) -/** Characterizes the type of content which can trigger the rule. */ -@Serializable(with = AutoModerationRuleTriggerType.Serializer::class) -public sealed class AutoModerationRuleTriggerType(public val value: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is AutoModerationRuleTriggerType && this.value == other.value) - - final override fun hashCode(): Int = value - - - /** An unknown [AutoModerationRuleTriggerType]. */ - public class Unknown(value: Int) : AutoModerationRuleTriggerType(value) - - /** Check if content contains words from a user defined list of keywords. */ - public object Keyword : AutoModerationRuleTriggerType(1) - - /** - * Check if content represents generic spam. - * - * This [trigger type][AutoModerationRuleTriggerType] is not yet released, so it cannot be used in most servers. - */ - @KordExperimental - public object Spam : AutoModerationRuleTriggerType(3) - - /** Check if content contains words from internal pre-defined wordsets. */ - public object KeywordPreset : AutoModerationRuleTriggerType(4) - - /** - * Check if content contains more mentions than allowed. - * - * This [trigger type][AutoModerationRuleTriggerType] is not yet released, so it cannot be used in most servers. - */ - @KordExperimental - public object MentionSpam : AutoModerationRuleTriggerType(5) - - - internal object Serializer : KSerializer { - - override val descriptor = - PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleTriggerType", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: AutoModerationRuleTriggerType) = encoder.encodeInt(value.value) - - override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { - 1 -> Keyword - 3 -> Spam - 4 -> KeywordPreset - 5 -> MentionSpam - else -> Unknown(value) - } - } -} - @Serializable public data class DiscordAutoModerationRuleTriggerMetadata( @SerialName("keyword_filter") @@ -102,127 +100,12 @@ public data class DiscordAutoModerationRuleTriggerMetadata( val mentionTotalLimit: OptionalInt = OptionalInt.Missing, ) -/** An internally pre-defined wordset which will be searched for in content. */ -@Serializable(with = AutoModerationRuleKeywordPresetType.Serializer::class) -public sealed class AutoModerationRuleKeywordPresetType(public val value: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is AutoModerationRuleKeywordPresetType && this.value == other.value) - - final override fun hashCode(): Int = value - - - /** An unknown [AutoModerationRuleKeywordPresetType]. */ - public class Unknown(value: Int) : AutoModerationRuleKeywordPresetType(value) - - /** Words that may be considered forms of swearing or cursing. */ - public object Profanity : AutoModerationRuleKeywordPresetType(1) - - /** Words that refer to sexually explicit behavior or activity. */ - public object SexualContent : AutoModerationRuleKeywordPresetType(2) - - /** Personal insults or words that may be considered hate speech. */ - public object Slurs : AutoModerationRuleKeywordPresetType(3) - - - internal object Serializer : KSerializer { - - override val descriptor = - PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleKeywordPresetType", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: AutoModerationRuleKeywordPresetType) = - encoder.encodeInt(value.value) - - override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { - 1 -> Profanity - 2 -> SexualContent - 3 -> Slurs - else -> Unknown(value) - } - } -} - -/** Indicates in what event context a rule should be checked. */ -@Serializable(with = AutoModerationRuleEventType.Serializer::class) -public sealed class AutoModerationRuleEventType(public val value: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is AutoModerationRuleEventType && this.value == other.value) - - final override fun hashCode(): Int = value - - - /** An unknown [AutoModerationRuleEventType]. */ - public class Unknown(value: Int) : AutoModerationRuleEventType(value) - - /** When a member sends or edits a message in the guild. */ - public object MessageSend : AutoModerationRuleEventType(1) - - - internal object Serializer : KSerializer { - - override val descriptor = - PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationRuleEventType", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: AutoModerationRuleEventType) = encoder.encodeInt(value.value) - - override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { - 1 -> MessageSend - else -> Unknown(value) - } - } -} - @Serializable public data class DiscordAutoModerationAction( val type: AutoModerationActionType, val metadata: Optional = Optional.Missing(), ) -/** The type of action. */ -@Serializable(with = AutoModerationActionType.Serializer::class) -public sealed class AutoModerationActionType(public val value: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is AutoModerationActionType && this.value == other.value) - - final override fun hashCode(): Int = value - - - /** An unknown [AutoModerationActionType]. */ - public class Unknown(value: Int) : AutoModerationActionType(value) - - /** Blocks the content of a message according to the rule. */ - public object BlockMessage : AutoModerationActionType(1) - - /** Logs user content to a specified channel. */ - public object SendAlertMessage : AutoModerationActionType(2) - - /** - * Timeout user for a specified duration. - * - * A [Timeout] action can only be set up for [Keyword] and [MentionSpam] rules. The [ModerateMembers] permission is - * required to use the [Timeout] action type. - */ - public object Timeout : AutoModerationActionType(3) - - - internal object Serializer : KSerializer { - - override val descriptor = - PrimitiveSerialDescriptor("dev.kord.common.entity.AutoModerationActionType", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: AutoModerationActionType) = encoder.encodeInt(value.value) - - override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { - 1 -> BlockMessage - 2 -> SendAlertMessage - 3 -> Timeout - else -> Unknown(value) - } - } -} - @Serializable public data class DiscordAutoModerationActionMetadata( @SerialName("channel_id") diff --git a/common/src/main/kotlin/entity/DiscordChannel.kt b/common/src/main/kotlin/entity/DiscordChannel.kt index 01d3a7d8863d..5916fcc59f52 100644 --- a/common/src/main/kotlin/entity/DiscordChannel.kt +++ b/common/src/main/kotlin/entity/DiscordChannel.kt @@ -1,18 +1,79 @@ +@file:GenerateKordEnum( + name = "ChannelType", valueType = INT, + entries = [ + Entry("GuildText", intValue = 0, kDoc = "A text channel within a server."), + Entry("DM", intValue = 1, kDoc = "A direct message between users."), + Entry("GuildVoice", intValue = 2, kDoc = "A voice channel within a server."), + Entry("GroupDM", intValue = 3, kDoc = "A direct message between multiple users."), + Entry( + "GuildCategory", intValue = 4, + kDoc = "An [organizational·category](https://support.discord.com/hc/en-us/articles/115001580171-Channel-" + + "Categories-101) that contains up to 50 channels.", + ), + Entry( + "GuildNews", intValue = 5, + kDoc = "A channel that [users·can·follow·and·crosspost·into·their·own·server]" + + "(https://support.discord.com/hc/en-us/articles/360032008192).", + ), + Entry("PublicNewsThread", intValue = 10, kDoc = "A temporary sub-channel within a [GuildNews] channel."), + Entry("PublicGuildThread", intValue = 11, kDoc = "A temporary sub-channel within a [GuildText] channel."), + Entry( + "PrivateThread", intValue = 12, + kDoc = "A temporary sub-channel within a [GuildText] channel that is only viewable by those invited and " + + "those with the [ManageThreads][dev.kord.common.entity.Permission.ManageThreads] permission.", + ), + Entry( + "GuildStageVoice", intValue = 13, + kDoc = "A voice channel for [hosting·events·with·an·audience]" + + "(https://support.discord.com/hc/en-us/articles/1500005513722).", + ), + Entry( + "GuildDirectory", intValue = 14, + kDoc = "The channel in a [hub](https://support.discord.com/hc/en-us/articles/4406046651927-Discord-" + + "Student-Hubs-FAQ) containing the listed servers.", + ), + ], + deprecatedEntries = [ + Entry( + "GuildStore", intValue = 6, + kDoc = "A channel in which game developers can sell their game on Discord.\n\n@suppress", + deprecationMessage = "Discord no longer offers the ability to purchase a license to sell PC games on " + + "Discord and store channels were removed on March 10, 2022. See " + + "https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation" + + " for more information.", + deprecationLevel = ERROR, + ), + ], +) + +@file:GenerateKordEnum( + name = "VideoQualityMode", valueType = INT, + entries = [ + Entry("Auto", intValue = 1, kDoc = "Discord chooses the quality for optimal performance."), + Entry("Full", intValue = 2, kDoc = "720p."), + ], +) + +@file:GenerateKordEnum( + name = "OverwriteType", valueType = INT, + entries = [Entry("Role", intValue = 0), Entry("Member", intValue = 1)], +) + package dev.kord.common.entity -import dev.kord.common.entity.Permission.ManageThreads import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalBoolean import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.entity.optional.OptionalSnowflake import dev.kord.common.serialization.DurationInMinutesSerializer import dev.kord.common.serialization.DurationInSeconds +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.datetime.Instant import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName 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 @@ -88,103 +149,6 @@ public data class DiscordChannel( val member: Optional = Optional.Missing() ) -@Serializable(with = ChannelType.Serializer::class) -public sealed class ChannelType(public val value: Int) { - - /** The default code for unknown values. */ - public class Unknown(value: Int) : ChannelType(value) - - /** A text channel within a server. */ - public object GuildText : ChannelType(0) - - /** A direct message between users. */ - public object DM : ChannelType(1) - - /** A voice channel within a server. */ - public object GuildVoice : ChannelType(2) - - /** A direct message between multiple users. */ - public object GroupDM : ChannelType(3) - - /** - * An [organizational category](https://support.discord.com/hc/en-us/articles/115001580171-Channel-Categories-101) - * that contains up to 50 channels. - */ - public object GuildCategory : ChannelType(4) - - /** - * A channel that - * [users can follow and crosspost into their own server](https://support.discord.com/hc/en-us/articles/360032008192). - */ - public object GuildNews : ChannelType(5) - - /** - * A channel in which game developers can sell their game on Discord. - * - * @suppress - */ - @Deprecated( - """ - Discord no longer offers the ability to purchase a license to sell PC games on Discord and store channels were - removed on March 10, 2022. - - See https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation for more - information. - """, - level = ERROR, - ) - public object GuildStore : ChannelType(6) - - /** A temporary sub-channel within a [GuildNews] channel. */ - public object PublicNewsThread : ChannelType(10) - - /** A temporary sub-channel within a [GuildText] channel. */ - public object PublicGuildThread : ChannelType(11) - - /** - * A temporary sub-channel within a [GuildText] channel that is only viewable by those invited and those with the - * [ManageThreads] permission. - */ - public object PrivateThread : ChannelType(12) - - /** - * A voice channel for - * [hosting events with an audience](https://support.discord.com/hc/en-us/articles/1500005513722). - */ - public object GuildStageVoice : ChannelType(13) - - /** - * The channel in a [hub](https://support.discord.com/hc/en-us/articles/4406046651927-Discord-Student-Hubs-FAQ) - * containing the listed servers. - */ - public object GuildDirectory : ChannelType(14) - - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ChannelType = when (val code = decoder.decodeInt()) { - 0 -> GuildText - 1 -> DM - 2 -> GuildVoice - 3 -> GroupDM - 4 -> GuildCategory - 5 -> GuildNews - 6 -> @Suppress("DEPRECATION_ERROR") GuildStore - 10 -> PublicNewsThread - 11 -> PublicGuildThread - 12 -> PrivateThread - 13 -> GuildStageVoice - 14 -> GuildDirectory - else -> Unknown(code) - } - - override fun serialize(encoder: Encoder, value: ChannelType) = encoder.encodeInt(value.value) - } - -} - @Serializable public data class Overwrite( val id: Snowflake, @@ -193,62 +157,6 @@ public data class Overwrite( val deny: Permissions, ) -@Serializable(with = OverwriteType.Serializer::class) -public sealed class OverwriteType(public val value: Int) { - - public class Unknown(value: Int) : OverwriteType(value) - public object Role : OverwriteType(0) - public object Member : OverwriteType(1) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.Overwrite.Type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): OverwriteType = when (val value = decoder.decodeInt()) { - 0 -> Role - 1 -> Member - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: OverwriteType) { - encoder.encodeInt(value.value) - } - } -} - -@Serializable(with = VideoQualityMode.Serializer::class) -public sealed class VideoQualityMode(public val value: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is VideoQualityMode && other.value == this.value) - - final override fun hashCode(): Int = value - - - /** An unknown Video Quality Mode. */ - public class Unknown(value: Int) : VideoQualityMode(value) - - /** Discord chooses the quality for optimal performance. */ - public object Auto : VideoQualityMode(1) - - /** 720p. */ - public object Full : VideoQualityMode(2) - - - internal object Serializer : KSerializer { - override val descriptor = - PrimitiveSerialDescriptor("dev.kord.common.entity.VideoQualityMode", PrimitiveKind.INT) - - override fun serialize(encoder: Encoder, value: VideoQualityMode) = encoder.encodeInt(value.value) - - override fun deserialize(decoder: Decoder) = when (val value = decoder.decodeInt()) { - 1 -> Auto - 2 -> Full - else -> Unknown(value) - } - } -} - @Serializable public data class DiscordThreadMetadata( val archived: Boolean, diff --git a/common/src/main/kotlin/entity/DiscordComponent.kt b/common/src/main/kotlin/entity/DiscordComponent.kt index 5d97a1fb5035..6b608d6b0f05 100644 --- a/common/src/main/kotlin/entity/DiscordComponent.kt +++ b/common/src/main/kotlin/entity/DiscordComponent.kt @@ -1,21 +1,50 @@ +@file:GenerateKordEnum( + name = "ComponentType", valueType = INT, + deprecatedSerializerName = "Serializer", + entries = [ + Entry("ActionRow", intValue = 1, kDoc = "A container for other components."), + Entry("Button", intValue = 2, kDoc = "A button object."), + Entry("SelectMenu", intValue = 3, kDoc = "A select menu for picking from choices."), + Entry("TextInput", intValue = 4, kDoc = "A text input object."), + ], +) + +@file:GenerateKordEnum( + name = "ButtonStyle", valueType = INT, + deprecatedSerializerName = "Serializer", + kDoc = "Style of a [button][dev.kord.common.entity.ComponentType.Button].\n\nA preview of the different styles " + + "can be found [here]" + + "(https://discord.com/developers/docs/interactions/message-components#button-object-button-styles).", + entries = [ + Entry("Primary", intValue = 1, kDoc = "Blurple."), + Entry("Secondary", intValue = 2, kDoc = "Grey."), + Entry("Success", intValue = 3, kDoc = "Green."), + Entry("Danger", intValue = 4, kDoc = "Red."), + Entry("Link", intValue = 5, kDoc = "Grey, navigates to a URL."), + ], +) + +@file:GenerateKordEnum( + name = "TextInputStyle", valueType = INT, + kDoc = "Style of a [text·input][dev.kord.common.entity.ComponentType.TextInput].", + entries = [ + Entry("Short", intValue = 1, kDoc = "A single-line input."), + Entry("Paragraph", intValue = 2, kDoc = "A multi-line input."), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalBoolean import dev.kord.common.entity.optional.OptionalInt +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName 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 -import kotlinx.serialization.json.JsonContentPolymorphicSerializer -import kotlinx.serialization.json.JsonElement -import kotlinx.serialization.json.intOrNull -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.json.* /** * Represent a [interactable component within a message sent in Discord](https://discord.com/developers/docs/interactions/message-components#what-are-components). @@ -120,149 +149,3 @@ public data class DiscordTextInputComponent( override val required: OptionalBoolean = OptionalBoolean.Missing, override val value: Optional = Optional.Missing() ) : DiscordComponent() - -/** - * Representation of different [DiscordComponent] types. - * - * @property value the raw type value used by the Discord API - */ -@Serializable(with = ComponentType.Serializer::class) -public sealed class ComponentType(public val value: Int) { - /** - * Fallback type used for types that haven't been added to Kord yet. - */ - public class Unknown(value: Int) : ComponentType(value) - - /** - * A container for other components. - */ - public object ActionRow : ComponentType(1) - - /** - * A clickable button. - */ - public object Button : ComponentType(2) - - /** - * A select menu for picking from choices. - */ - public object SelectMenu : ComponentType(3) - - /** - * A text input object. - */ - public object TextInput : ComponentType(4) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ComponentType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ComponentType = - when (val value = decoder.decodeInt()) { - 1 -> ActionRow - 2 -> Button - 3 -> SelectMenu - 4 -> TextInput - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: ComponentType): Unit = encoder.encodeInt(value.value) - } -} - -/** - * Representation of different ButtonStyles. - * - * A cheat sheet on how the styles look like can be found [here](https://discord.com/assets/7bb017ce52cfd6575e21c058feb3883b.png) - * - * @see ComponentType.Button - */ -@Serializable(with = ButtonStyle.Serializer::class) -public sealed class ButtonStyle(public val value: Int) { - - /** - * A fallback style used for styles that haven't been added to Kord yet. - */ - public class Unknown(value: Int) : ButtonStyle(value) - - /** - * Blurple. - * Requires: [DiscordComponent.customId] - */ - public object Primary : ButtonStyle(1) - - /** - * Grey. - * Requires: [DiscordComponent.customId] - */ - public object Secondary : ButtonStyle(2) - - /** - * Green - * Requires: [DiscordComponent.customId] - */ - public object Success : ButtonStyle(3) - - /** - * Red. - * Requires: [DiscordComponent.customId] - */ - public object Danger : ButtonStyle(4) - - /** - * Grey, navigates to an URL. - * Requires: [DiscordComponent.url] - */ - public object Link : ButtonStyle(5) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Button", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ButtonStyle = - when (val value = decoder.decodeInt()) { - 1 -> Primary - 2 -> Secondary - 3 -> Success - 4 -> Danger - 5 -> Link - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: ButtonStyle): Unit = encoder.encodeInt(value.value) - } -} - -/** - * Representation of different TextInputStyles. - * - * @see ComponentType.TextInput - */ -@Serializable(with = TextInputStyle.Serializer::class) -public sealed class TextInputStyle(public val value: Int) { - /** - * A fallback style used for styles that haven't been added to Kord yet. - */ - public class Unknown(value: Int) : TextInputStyle(value) - - /** - * A single-line input. - */ - public object Short : TextInputStyle(1) - - /** - * A multi-line input. - */ - public object Paragraph : TextInputStyle(2) - - internal companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("TextInput", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): TextInputStyle = - when (val value = decoder.decodeInt()) { - 1 -> Short - 2 -> Paragraph - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: TextInputStyle): Unit = encoder.encodeInt(value.value) - } -} \ No newline at end of file diff --git a/common/src/main/kotlin/entity/DiscordConnection.kt b/common/src/main/kotlin/entity/DiscordConnection.kt index 274a8083e4cf..5794c0e82e1f 100644 --- a/common/src/main/kotlin/entity/DiscordConnection.kt +++ b/common/src/main/kotlin/entity/DiscordConnection.kt @@ -1,15 +1,20 @@ +@file:GenerateKordEnum( + name = "DiscordConnectionVisibility", valueType = INT, + entries = [ + Entry("None", intValue = 0, kDoc = "Invisible to everyone except the user themselves."), + Entry("Everyone", intValue = 1, kDoc = "Visible to everyone."), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalBoolean -import kotlinx.serialization.KSerializer +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.SerialName 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 /** * A representation of the D[Discord Connection Object structure](https://discord.com/developers/docs/resources/user#connection-object). @@ -39,35 +44,3 @@ public data class DiscordConnection( val showActivity: Boolean, val visibility: DiscordConnectionVisibility, ) - -@Serializable(with = DiscordConnectionVisibility.Serializer::class) -public sealed class DiscordConnectionVisibility(public val value: Int) { - public class Unknown(value: Int) : DiscordConnectionVisibility(value) - - /** - * The connection is invisible to everyone except the user themselves. - */ - public object None : DiscordConnectionVisibility(0) - - /** - * The connection is visible to everyone. - */ - public object Everyone : DiscordConnectionVisibility(1) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.DiscordConnectionVisibility", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): DiscordConnectionVisibility = - when (val value = decoder.decodeInt()) { - 0 -> None - 1 -> Everyone - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: DiscordConnectionVisibility) { - encoder.encodeInt(value.value) - } - } - -} diff --git a/common/src/main/kotlin/entity/DiscordGuild.kt b/common/src/main/kotlin/entity/DiscordGuild.kt index 50d94139368d..0c799fd4916c 100644 --- a/common/src/main/kotlin/entity/DiscordGuild.kt +++ b/common/src/main/kotlin/entity/DiscordGuild.kt @@ -1,3 +1,141 @@ +@file:GenerateKordEnum( + name = "DefaultMessageNotificationLevel", valueType = INT, + entries = [ + Entry("AllMessages", intValue = 0, kDoc = "Members will receive notifications for all messages by default."), + Entry( + "OnlyMentions", intValue = 1, + kDoc = "Members will receive notifications only for messages that @mention them by default.", + ), + ], +) + +@file:GenerateKordEnum( + name = "ExplicitContentFilter", valueType = INT, + entries = [ + Entry("Disabled", intValue = 0, kDoc = "Media content will not be scanned."), + Entry( + "MembersWithoutRoles", intValue = 1, + kDoc = "Media content sent by members without roles will be scanned.", + ), + Entry("AllMembers", intValue = 2, kDoc = "Media content sent by all members will be scanned."), + ], +) + +@file:GenerateKordEnum( + name = "MFALevel", valueType = INT, + entries = [ + Entry("None", intValue = 0, kDoc = "Guild has no MFA/2FA requirement for moderation actions."), + Entry("Elevated", intValue = 1, kDoc = "Guild has a 2FA requirement for moderation actions."), + ], +) + +@file:GenerateKordEnum( + name = "VerificationLevel", valueType = INT, + entries = [ + Entry("None", intValue = 0, kDoc = "Unrestricted."), + Entry("Low", intValue = 1, kDoc = "Must have verified email on account."), + Entry("Medium", intValue = 2, kDoc = "Must be registered on Discord for longer than 5 minutes."), + Entry("High", intValue = 3, kDoc = "Must be a member of the server for longer than 10 minutes."), + Entry("VeryHigh", intValue = 4, kDoc = "Must have a verified phone number."), + ], +) + +@file:GenerateKordEnum( + name = "NsfwLevel", valueType = INT, + entries = [ + Entry("Default", intValue = 0), + Entry("Explicit", intValue = 1), + Entry("Safe", intValue = 2), + Entry("AgeRestricted", intValue = 3), + ], +) + +@file:GenerateKordEnum( + name = "PremiumTier", valueType = INT, + entries = [ + Entry("None", intValue = 0, kDoc = "Guild has not unlocked any Server Boost perks."), + Entry("One", intValue = 1, kDoc = "Guild has unlocked Server Boost level 1 perks."), + Entry("Two", intValue = 2, kDoc = "Guild has unlocked Server Boost level 2 perks."), + Entry("Three", intValue = 3, kDoc = "Guild has unlocked Server Boost level 3 perks."), + ], +) + +@file:GenerateKordEnum( + name = "GuildFeature", valueType = STRING, + entries = [ + Entry( + "AnimatedBanner", stringValue = "ANIMATED_BANNER", + kDoc = "Guild has access to set an animated guild banner image.", + ), + Entry("AnimatedIcon", stringValue = "ANIMATED_ICON", kDoc = "Guild has access to set an animated guild icon."), + Entry("AutoModeration", stringValue = "AUTO_MODERATION", kDoc = "Guild has set up auto moderation rules."), + Entry("Banner", stringValue = "BANNER", kDoc = "Guild has access to set a guild banner image."), + Entry( + "Community", stringValue = "COMMUNITY", + kDoc = "Guild can enable welcome screen, Membership Screening, stage channels and discovery, and " + + "receives community updates.", + ), + Entry("Discoverable", stringValue = "DISCOVERABLE", kDoc = "Guild is able to be discovered in the directory."), + Entry( + "Featurable", stringValue = "FEATURABLE", + kDoc = "Guild is able to be featured in the directory.", + ), + Entry( + "InviteSplash", stringValue = "INVITE_SPLASH", + kDoc = "Guild has access to set an invite splash background.", + ), + Entry( + "MemberVerificationGateEnabled", stringValue = "MEMBER_VERIFICATION_GATE_ENABLED", + kDoc = "Guild has enabled Membership Screening.", + ), + Entry("MonetizationEnabled", stringValue = "MONETIZATION_ENABLED", kDoc = "Guild has enabled monetization."), + Entry("MoreStickers", stringValue = "MORE_STICKERS", kDoc = "Guild has increased custom sticker slots."), + Entry("News", stringValue = "NEWS", kDoc = "Guild has access to create announcement channels."), + Entry("Partnered", stringValue = "PARTNERED", kDoc = "Guild is partnered."), + Entry( + "PreviewEnabled", stringValue = "PREVIEW_ENABLED", + kDoc = "Guild can be previewed before joining via Membership Screening or the directory.", + ), + Entry("PrivateThreads", stringValue = "PRIVATE_THREADS", kDoc = "Guild has access to create private threads"), + Entry("RoleIcons", stringValue = "ROLE_ICONS", kDoc = "Guild is able to set role icons."), + Entry( + "TicketedEventsEnabled", stringValue = "TICKETED_EVENTS_ENABLED", + kDoc = "Guild has enabled ticketed events.", + ), + Entry("VanityUrl", stringValue = "VANITY_URL", kDoc = "Guild has access to set a vanity URL."), + Entry("Verified", stringValue = "VERIFIED", kDoc = "Guild is verified."), + Entry( + "VIPRegions", stringValue = "VIP_REGIONS", + kDoc = "Guild has access to set 384kbps bitrate in voice (previously VIP voice servers).", + ), + Entry( + "WelcomeScreenEnabled", stringValue = "WELCOME_SCREEN_ENABLED", + kDoc = "Guild has enabled the welcome screen.", + ), + ], + deprecatedEntries = [ + Entry( + "Commerce", stringValue = "COMMERCE", + kDoc = "Guild has access to use commerce features (i.e. create store channels).\n\n@suppress", + deprecationMessage = "Discord no longer offers the ability to purchase a license to sell PC games on " + + "Discord and store channels were removed on March 10, 2022. See " + + "https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation" + + " for more information.", + deprecationLevel = ERROR, + ), + Entry( + "ThreeDayThreadArchive", stringValue = "THREE_DAY_THREAD_ARCHIVE", + kDoc = "Guild has access to the three-day archive time for threads\n\n@suppress.", + deprecationMessage = "Thread archive durations are no longer boost locked.", deprecationLevel = WARNING, + ), + Entry( + "SevenDayThreadArchive", stringValue = "SEVEN_DAY_THREAD_ARCHIVE", + kDoc = "Guild has access to the seven day archive time for threads.\n\n@suppress", + deprecationMessage = "Thread archive durations are no longer boost locked.", deprecationLevel = WARNING, + ), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional @@ -5,6 +143,10 @@ import dev.kord.common.entity.optional.OptionalBoolean import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.entity.optional.OptionalSnowflake import dev.kord.common.serialization.DurationInSeconds +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING import kotlinx.datetime.Instant import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName @@ -14,6 +156,8 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlin.DeprecationLevel.ERROR +import kotlin.DeprecationLevel.WARNING /** * A partial representation of a [DiscordGuild] that may be [unavailable]. @@ -173,152 +317,8 @@ public data class DiscordPartialGuild( @SerialName("guild_scheduled_events") val guildScheduledEvents: Optional> = Optional.Missing(), @SerialName("premium_progress_bar_enabled") - val premiumProgressBarEnabled: OptionalBoolean = OptionalBoolean.Missing - - ) - -/** - * A representation of a [Discord Guild Feature](https://discord.com/developers/docs/resources/guild#guild-object-guild-features). - */ -@Serializable(with = GuildFeature.Serializer::class) -public sealed class GuildFeature(public val value: String) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is GuildFeature && this.value == other.value) - - final override fun hashCode(): Int = value.hashCode() - final override fun toString(): String = "GuildFeature(value=$value)" - - - /** An unknown [GuildFeature]. */ - public class Unknown(value: String) : GuildFeature(value) - - /** Guild has access to set an animated guild banner image. */ - public object AnimatedBanner : GuildFeature("ANIMATED_BANNER") - - /** Guild has set up auto moderation rules. */ - public object AutoModeration : GuildFeature("AUTO_MODERATION") - - /** Guild has access to set an invite splash background */ - public object InviteSplash : GuildFeature("INVITE_SPLASH") - - /** Guild has access to set 384kbps bitrate in voice (previously VIP voice servers) */ - public object VIPRegions : GuildFeature("VIP_REGIONS") - - /** Guild has access to set a vanity URL */ - public object VanityUrl : GuildFeature("VANITY_URL") - - /** Guild is verified */ - public object Verified : GuildFeature("VERIFIED") - - /** Guild is partnered */ - public object Partnered : GuildFeature("PARTNERED") - - /** Guild can enable welcome screen and discovery, and receives community updates */ - public object Community : GuildFeature("COMMUNITY") - - /** - * Guild has access to use commerce features (i.e. create store channels) - * - * @suppress - */ - @Deprecated( - """ - Discord no longer offers the ability to purchase a license to sell PC games on Discord and store channels were - removed on March 10, 2022. - - See https://support-dev.discord.com/hc/en-us/articles/6309018858647-Self-serve-Game-Selling-Deprecation for more - information. - """, - level = DeprecationLevel.ERROR, - ) - public object Commerce : GuildFeature("COMMERCE") - - /** Guild has access to create news channels */ - public object News : GuildFeature("NEWS") - - /** Guild is lurkable and able to be discovered directly */ - public object Discoverable : GuildFeature("DISCOVERABLE") - - /** Guild is able to be featured in the directory */ - public object Featurable : GuildFeature("FEATURABLE") - - /** Guild has access to set an animated guild icon */ - public object AnimatedIcon : GuildFeature("ANIMATED_ICON") - - /** Guild has access to set a guild banner image */ - public object Banner : GuildFeature("BANNER") - - /** Guild has enabled the welcome screen */ - public object WelcomeScreenEnabled : GuildFeature("WELCOME_SCREEN_ENABLED") - - /** Guild has enabled ticketed events */ - public object TicketedEventsEnabled : GuildFeature("TICKETED_EVENTS_ENABLED") - - /** Guild has enabled monetization */ - public object MonetizationEnabled : GuildFeature("MONETIZATION_ENABLED") - - /** Guild has increased custom sticker slots */ - public object MoreStickers : GuildFeature("MORE_STICKERS") - - /** Guild has access to the three-day archive time for threads */ - @Deprecated("Thread archive durations are no longer boost locked") - public object ThreeDayThreadArchive : GuildFeature("THREE_DAY_THREAD_ARCHIVE") - - /** Guild has access to the seven day archive time for threads */ - @Deprecated("Thread archive durations are no longer boost locked") - public object SevenDayThreadArchive : GuildFeature("SEVEN_DAY_THREAD_ARCHIVE") - - /** Guild has access to create private threads */ - public object PrivateThreads : GuildFeature("PRIVATE_THREADS") - - /** Guild has enabled Membership Screening */ - public object MemberVerificationGateEnabled : GuildFeature("MEMBER_VERIFICATION_GATE_ENABLED") - - /** Guild can be previewed before joining via Membership Screening or the directory */ - public object PreviewEnabled : GuildFeature("PREVIEW_ENABLED") - - /** Guild is able to set role icons */ - public object RoleIcons : GuildFeature("ROLE_ICONS") - - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("feature", PrimitiveKind.STRING) - - override fun deserialize(decoder: Decoder): GuildFeature = when (val value = decoder.decodeString()) { - "ANIMATED_BANNER" -> AnimatedBanner - "AUTO_MODERATION" -> AutoModeration - "INVITE_SPLASH" -> InviteSplash - "VIP_REGIONS" -> VIPRegions - "VANITY_URL" -> VanityUrl - "VERIFIED" -> Verified - "PARTNERED" -> Partnered - "COMMUNITY" -> Community - "COMMERCE" -> @Suppress("DEPRECATION_ERROR") Commerce - "NEWS" -> News - "DISCOVERABLE" -> Discoverable - "FEATURABLE" -> Featurable - "ANIMATED_ICON" -> AnimatedIcon - "BANNER" -> Banner - "WELCOME_SCREEN_ENABLED" -> WelcomeScreenEnabled - "TICKETED_EVENTS_ENABLED" -> TicketedEventsEnabled - "MONETIZATION_ENABLED" -> MonetizationEnabled - "MORE_STICKERS" -> MoreStickers - "THREE_DAY_THREAD_ARCHIVE" -> @Suppress("DEPRECATION") ThreeDayThreadArchive - "SEVEN_DAY_THREAD_ARCHIVE" -> @Suppress("DEPRECATION") SevenDayThreadArchive - "PRIVATE_THREADS" -> PrivateThreads - "MEMBER_VERIFICATION_GATE_ENABLED" -> MemberVerificationGateEnabled - "PREVIEW_ENABLED" -> PreviewEnabled - "ROLE_ICONS" -> RoleIcons - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: GuildFeature) { - encoder.encodeString(value.value) - } - } -} + val premiumProgressBarEnabled: OptionalBoolean = OptionalBoolean.Missing, +) @Serializable(with = SystemChannelFlags.Companion::class) public data class SystemChannelFlags(val code: Int) { @@ -446,188 +446,6 @@ public data class DiscordVoiceRegion( val custom: Boolean, ) -/** - * A representation of a [Discord Premium tier](https://discord.com/developers/docs/resources/guild#guild-object-premium-tier). - */ -@Serializable(with = PremiumTier.Serializer::class) -public sealed class PremiumTier(public val value: Int) { - public class Unknown(value: Int) : PremiumTier(value) - public object None : PremiumTier(0) - public object One : PremiumTier(1) - public object Two : PremiumTier(2) - public object Three : PremiumTier(3) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.PremiumTier", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): PremiumTier = when (val value = decoder.decodeInt()) { - 0 -> None - 1 -> One - 2 -> Two - 3 -> Three - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: PremiumTier) { - encoder.encodeInt(value.value) - } - - } -} - -@Serializable(with = DefaultMessageNotificationLevel.Serializer::class) -public sealed class DefaultMessageNotificationLevel(public val value: Int) { - public class Unknown(value: Int) : DefaultMessageNotificationLevel(value) - public object AllMessages : DefaultMessageNotificationLevel(0) - public object OnlyMentions : DefaultMessageNotificationLevel(1) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("default_message_notifications", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): DefaultMessageNotificationLevel = - when (val value = decoder.decodeInt()) { - 0 -> AllMessages - 1 -> OnlyMentions - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: DefaultMessageNotificationLevel) { - encoder.encodeInt(value.value) - } - } - -} - -@Serializable(with = ExplicitContentFilter.Serializer::class) -public sealed class ExplicitContentFilter(public val value: Int) { - public class Unknown(value: Int) : ExplicitContentFilter(value) - public object Disabled : ExplicitContentFilter(0) - public object MembersWithoutRoles : ExplicitContentFilter(1) - public object AllMembers : ExplicitContentFilter(2) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("explicit_content_filter", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ExplicitContentFilter = when (val value = decoder.decodeInt()) { - 0 -> Disabled - 1 -> MembersWithoutRoles - 2 -> AllMembers - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: ExplicitContentFilter) { - encoder.encodeInt(value.value) - } - - } -} - -@Serializable(with = MFALevel.Serializer::class) -public sealed class MFALevel(public val value: Int) { - public class Unknown(value: Int) : MFALevel(value) - public object None : MFALevel(0) - public object Elevated : MFALevel(1) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.MFALevel", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): MFALevel = when (val value = decoder.decodeInt()) { - 0 -> None - 1 -> Elevated - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: MFALevel) { - encoder.encodeInt(value.value) - } - } -} - -/** - * A representation of a [Discord Guild NSFW Level](https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level). - */ -@Serializable(with = NsfwLevel.Serializer::class) -public sealed class NsfwLevel(public val value: Int) { - public class Unknown(value: Int) : NsfwLevel(value) - - public object Default : NsfwLevel(0) - - public object Explicit : NsfwLevel(1) - - public object Safe : NsfwLevel(2) - - public object AgeRestricted : NsfwLevel(3) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.GuildNsfwLevel", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): NsfwLevel = when (val value = decoder.decodeInt()) { - 0 -> Default - 1 -> Explicit - 2 -> Safe - 3 -> AgeRestricted - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: NsfwLevel) { - encoder.encodeInt(value.value) - } - - } -} - - -/** - * A representation of a [Discord Verification Level](https://discord.com/developers/docs/resources/guild#guild-object-verification-level). - */ -@Serializable(with = VerificationLevel.Serializer::class) -public sealed class VerificationLevel(public val value: Int) { - public class Unknown(value: Int) : VerificationLevel(value) - - /** Unrestricted. */ - public object None : VerificationLevel(0) - - /** Must have verified email and account. */ - public object Low : VerificationLevel(1) - - /** Must be registered on Discord for longer than 5 minutes. */ - public object Medium : VerificationLevel(2) - - /** Must be member of the server for longer than 10 minutes */ - public object High : VerificationLevel(3) - - /** Must have a verified phone number */ - public object VeryHigh : VerificationLevel(4) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.VerificationLevel", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): VerificationLevel = when (val value = decoder.decodeInt()) { - 0 -> None - 1 -> Low - 2 -> Medium - 3 -> High - 4 -> VeryHigh - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: VerificationLevel) { - encoder.encodeInt(value.value) - } - - } -} - @Serializable public data class DiscordWelcomeScreenChannel( @SerialName("channel_id") val channelId: Snowflake, diff --git a/common/src/main/kotlin/entity/DiscordGuildScheduledEvent.kt b/common/src/main/kotlin/entity/DiscordGuildScheduledEvent.kt index c21a7457820d..7d4e22c89e2f 100644 --- a/common/src/main/kotlin/entity/DiscordGuildScheduledEvent.kt +++ b/common/src/main/kotlin/entity/DiscordGuildScheduledEvent.kt @@ -1,17 +1,40 @@ +@file:GenerateKordEnum( + name = "GuildScheduledEventPrivacyLevel", valueType = INT, + entries = [Entry("GuildOnly", intValue = 2, kDoc = "The scheduled event is only accessible to guild members.")], +) + +@file:GenerateKordEnum( + name = "ScheduledEntityType", valueType = INT, + deprecatedSerializerName = "Serializer", + entries = [ + Entry("StageInstance", intValue = 1), + Entry("Voice", intValue = 2), + Entry("External", intValue = 3), + ], +) + +@file:GenerateKordEnum( + name = "GuildScheduledEventStatus", valueType = INT, + deprecatedSerializerName = "Serializer", + entries = [ + Entry("Scheduled", intValue = 1), + Entry("Active", intValue = 2), + Entry("Completed", intValue = 3), + Entry("Cancelled", intValue = 4), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.entity.optional.OptionalSnowflake +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.datetime.Instant -import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName 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 /** * Representation of a @@ -66,83 +89,6 @@ public data class DiscordGuildScheduledEvent( val image: Optional = Optional.Missing(), ) -/** Privacy level of a [DiscordGuildScheduledEvent]. */ -@Serializable(with = GuildScheduledEventPrivacyLevel.Serializer::class) -public sealed class GuildScheduledEventPrivacyLevel(public val value: Int) { - - /** The scheduled event is only accessible to guild members. */ - public object GuildOnly : GuildScheduledEventPrivacyLevel(2) - - /** An unknown privacy level. */ - public class Unknown(value: Int) : GuildScheduledEventPrivacyLevel(value) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor = - PrimitiveSerialDescriptor("GuildScheduledEventPrivacyLevel", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): GuildScheduledEventPrivacyLevel { - return when (val value = decoder.decodeInt()) { - 2 -> GuildOnly - else -> Unknown(value) - } - } - - override fun serialize(encoder: Encoder, value: GuildScheduledEventPrivacyLevel) { - encoder.encodeInt(value.value) - } - } -} - -@Serializable(with = ScheduledEntityType.Serializer::class) -public sealed class ScheduledEntityType(public val value: Int) { - public object StageInstance : ScheduledEntityType(1) - public object Voice : ScheduledEntityType(2) - public object External : ScheduledEntityType(3) - public class Unknown(value: Int) : ScheduledEntityType(value) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ScheduledEntityType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ScheduledEntityType { - return when (val value = decoder.decodeInt()) { - 1 -> StageInstance - 2 -> Voice - 3 -> External - else -> Unknown(value) - } - } - - override fun serialize(encoder: Encoder, value: ScheduledEntityType): Unit = encoder.encodeInt(value.value) - - } -} - -@Serializable(with = GuildScheduledEventStatus.Serializer::class) -public sealed class GuildScheduledEventStatus(public val value: Int) { - public object Scheduled : GuildScheduledEventStatus(1) - public object Active : GuildScheduledEventStatus(2) - public object Completed : GuildScheduledEventStatus(3) - public object Cancelled : GuildScheduledEventStatus(4) - public class Unknown(value: Int) : GuildScheduledEventStatus(value) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("GuildScheduledEventStatus", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): GuildScheduledEventStatus { - return when (val value = decoder.decodeInt()) { - 1 -> Scheduled - 2 -> Active - 3 -> Completed - 4 -> Cancelled - else -> Unknown(value) - } - } - - override fun serialize(encoder: Encoder, value: GuildScheduledEventStatus): Unit = encoder.encodeInt(value.value) - - } -} - /** * Entity metadata for [DiscordGuildScheduledEvent]. * diff --git a/common/src/main/kotlin/entity/DiscordIntegration.kt b/common/src/main/kotlin/entity/DiscordIntegration.kt index 68db354d8d51..ac2f31734ffe 100644 --- a/common/src/main/kotlin/entity/DiscordIntegration.kt +++ b/common/src/main/kotlin/entity/DiscordIntegration.kt @@ -1,17 +1,23 @@ +@file:GenerateKordEnum( + name = "IntegrationExpireBehavior", valueType = INT, + deprecatedSerializerName = "Serializer", + entries = [ + Entry("RemoveRole", intValue = 0), + Entry("Kick", intValue = 1), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalBoolean import dev.kord.common.serialization.DurationInDays +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.datetime.Instant -import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName 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 import kotlin.DeprecationLevel.ERROR @Serializable @@ -58,29 +64,6 @@ public data class IntegrationApplication( val bot: Optional = Optional.Missing(), ) -@Serializable(with = IntegrationExpireBehavior.Serializer::class) -public sealed class IntegrationExpireBehavior(public val value: Int) { - public class Unknown(value: Int) : IntegrationExpireBehavior(value) - public object RemoveRole : IntegrationExpireBehavior(0) - public object Kick : IntegrationExpireBehavior(1) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("expire_behavior", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): IntegrationExpireBehavior = when (val value = decoder.decodeInt()) { - 0 -> RemoveRole - 1 -> Kick - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: IntegrationExpireBehavior) { - encoder.encodeInt(value.value) - } - - } -} - @Serializable public data class DiscordIntegrationsAccount( val id: String, diff --git a/common/src/main/kotlin/entity/DiscordInvite.kt b/common/src/main/kotlin/entity/DiscordInvite.kt index 63d4fce675d4..800494ba6f3d 100644 --- a/common/src/main/kotlin/entity/DiscordInvite.kt +++ b/common/src/main/kotlin/entity/DiscordInvite.kt @@ -1,17 +1,22 @@ +@file:GenerateKordEnum( + name = "InviteTargetType", valueType = INT, + entries = [ + Entry("Stream", intValue = 1), + Entry("EmbeddedApplication", intValue = 2), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.serialization.DurationInSeconds +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.datetime.Instant -import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName 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 import kotlin.DeprecationLevel.ERROR public sealed interface BaseDiscordInvite { @@ -97,24 +102,3 @@ public data class DiscordPartialInvite( val code: String?, val uses: Int ) - -@Serializable(with = InviteTargetType.Serializer::class) -public sealed class InviteTargetType(public val value: Int) { - public class Unknown(value: Int) : InviteTargetType(value) - public object Stream : InviteTargetType(1) - public object EmbeddedApplication : InviteTargetType(2) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("InviteTargetType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): InviteTargetType = when (val value = decoder.decodeInt()) { - 1 -> Stream - 2 -> EmbeddedApplication - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: InviteTargetType) { - encoder.encodeInt(value.value) - } - } -} diff --git a/common/src/main/kotlin/entity/DiscordMessage.kt b/common/src/main/kotlin/entity/DiscordMessage.kt index c2488e89e180..ee372b9ea997 100644 --- a/common/src/main/kotlin/entity/DiscordMessage.kt +++ b/common/src/main/kotlin/entity/DiscordMessage.kt @@ -1,3 +1,104 @@ +@file:GenerateKordEnum( + name = "MessageType", valueType = INT, valueName = "code", + // had `public val values: Set` in companion before -> replace with `entries` + valuesPropertyName = "values", valuesPropertyType = SET, + entries = [ + Entry("Default", intValue = 0), + Entry("RecipientAdd", intValue = 1), + Entry("RecipientRemove", intValue = 2), + Entry("Call", intValue = 3), + Entry("ChannelNameChange", intValue = 4), + Entry("ChannelIconChange", intValue = 5), + Entry("ChannelPinnedMessage", intValue = 6), + Entry("UserJoin", intValue = 7), + Entry("GuildBoost", intValue = 8), + Entry("GuildBoostTier1", intValue = 9), + Entry("GuildBoostTier2", intValue = 10), + Entry("GuildBoostTier3", intValue = 11), + Entry("ChannelFollowAdd", intValue = 12), + Entry("GuildDiscoveryDisqualified", intValue = 14), + Entry("GuildDiscoveryRequalified", intValue = 15), + Entry("GuildDiscoveryGracePeriodInitialWarning", intValue = 16), + Entry("GuildDiscoveryGracePeriodFinalWarning", intValue = 17), + Entry("ThreadCreated", intValue = 18), + Entry("Reply", intValue = 19), + Entry("ChatInputCommand", intValue = 20), + Entry("ThreadStarterMessage", intValue = 21), + Entry("GuildInviteReminder", intValue = 22), + Entry("ContextMenuCommand", intValue = 23), + Entry("AutoModerationAction", intValue = 24), + ], + deprecatedEntries = [ + Entry( + "GuildMemberJoin", intValue = 7, kDoc = "@suppress", + deprecationMessage = "Renamed to 'UserJoin'.", deprecationLevel = WARNING, + replaceWith = ReplaceWith("UserJoin", "dev.kord.common.entity.MessageType.UserJoin"), + ), + Entry( + "UserPremiumGuildSubscription", intValue = 8, kDoc = "@suppress", + deprecationMessage = "Renamed to 'GuildBoost'.", deprecationLevel = WARNING, + replaceWith = ReplaceWith("GuildBoost", "dev.kord.common.entity.MessageType.GuildBoost"), + ), + Entry( + "UserPremiumGuildSubscriptionTierOne", intValue = 9, kDoc = "@suppress", + deprecationMessage = "Renamed to 'GuildBoostTier1'.", deprecationLevel = WARNING, + replaceWith = ReplaceWith("GuildBoostTier1", "dev.kord.common.entity.MessageType.GuildBoostTier1"), + ), + Entry( + "UserPremiumGuildSubscriptionTwo", intValue = 10, kDoc = "@suppress", + deprecationMessage = "Renamed to 'GuildBoostTier2'.", deprecationLevel = WARNING, + replaceWith = ReplaceWith("GuildBoostTier2", "dev.kord.common.entity.MessageType.GuildBoostTier2"), + ), + Entry( + "UserPremiumGuildSubscriptionThree", intValue = 11, kDoc = "@suppress", + deprecationMessage = "Renamed to 'GuildBoostTier3'.", deprecationLevel = WARNING, + replaceWith = ReplaceWith("GuildBoostTier3", "dev.kord.common.entity.MessageType.GuildBoostTier3"), + ), + ], +) + +@file:GenerateKordEnum( + name = "MessageActivityType", valueType = INT, + entries = [ + Entry("Join", intValue = 1), + Entry("Spectate", intValue = 2), + Entry("Listen", intValue = 3), + Entry("JoinRequest", intValue = 5), + ], +) + +@file:GenerateKordEnum( + name = "EmbedType", valueType = STRING, + entries = [ + Entry("Rich", stringValue = "rich", kDoc = "Generic embed rendered from embed attributes."), + Entry("Image", stringValue = "image", kDoc = "Image embed."), + Entry("Video", stringValue = "video", kDoc = "Video embed."), + Entry("Gifv", stringValue = "gifv", kDoc = "Animated gif image embed rendered as a video embed."), + Entry("Article", stringValue = "article", kDoc = "Article embed."), + Entry("Link", stringValue = "link", kDoc = "Link embed."), + ], +) + +@file:GenerateKordEnum( + name = "AllowedMentionType", valueType = STRING, + entries = [ + Entry("RoleMentions", stringValue = "roles", kDoc = "Controls role mentions."), + Entry("UserMentions", stringValue = "users", kDoc = "Controls user mentions"), + Entry("EveryoneMentions", stringValue = "everyone", kDoc = "Controls @everyone and @here mentions."), + ], +) + +@file:GenerateKordEnum( + name = "MessageStickerType", valueType = INT, + // had `public val values: Set` in companion before -> replace with `entries` + valuesPropertyName = "values", valuesPropertyType = SET, + entries = [ + Entry("PNG", intValue = 1), + Entry("APNG", intValue = 2), + Entry("LOTTIE", intValue = 3), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional @@ -5,6 +106,11 @@ import dev.kord.common.entity.optional.OptionalBoolean import dev.kord.common.entity.optional.OptionalInt import dev.kord.common.entity.optional.OptionalSnowflake import dev.kord.common.serialization.IntOrStringSerializer +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.SET import kotlinx.datetime.Instant import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName @@ -14,6 +120,7 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder +import kotlin.DeprecationLevel.WARNING import kotlin.contracts.InvocationKind import kotlin.contracts.contract @@ -163,36 +270,6 @@ public data class DiscordStickerItem( val formatType: MessageStickerType ) -@Serializable(with = MessageStickerType.Serializer::class) -public sealed class MessageStickerType(public val value: Int) { - public class Unknown(value: Int) : MessageStickerType(value) - public object PNG : MessageStickerType(1) - public object APNG : MessageStickerType(2) - public object LOTTIE : MessageStickerType(3) - - public companion object { - public val values: Set - get() = setOf(PNG, APNG, LOTTIE) - } - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.MessageStickerType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): MessageStickerType = when (val value = decoder.decodeInt()) { - 1 -> PNG - 2 -> APNG - 3 -> LOTTIE - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: MessageStickerType) { - encoder.encodeInt(value.value) - } - } -} - - /** * Represents [a partial message sent in a channel within Discord](https://discord.com/developers/docs/resources/channel#message-object). * @@ -485,7 +562,6 @@ public data class DiscordAttachment( @Serializable public data class DiscordEmbed( val title: Optional = Optional.Missing(), - @Suppress("DEPRECATION") val type: Optional = Optional.Missing(), val description: Optional = Optional.Missing(), val url: Optional = Optional.Missing(), @@ -609,64 +685,6 @@ public data class DiscordEmbed( ) } -/** - * A representation of a [Discord Embed Type structure](https://discord.com/developers/docs/resources/channel#embed-object-embed-types). - * - * Embed types are "loosely defined" and, for the most part, are not used by our clients for rendering. - * Embed attributes power what is rendered. - * Embed types should be considered deprecated and might be removed in a future API version. - */ -@Suppress("DEPRECATION") -@Deprecated( - """ - Embed types are "loosely defined" and, for the most part, are not used by clients for rendering. - Embed attributes power what is rendered. - Embed types should be considered deprecated and might be removed in a future API version. -""" -) -@Serializable(with = EmbedType.Serializer::class) -public sealed class EmbedType(public val value: String) { - public class Unknown(value: String) : EmbedType(value) - - /** Generic embed rendered from embed attributes. */ - public object Rich : EmbedType("rich") - - /** Image embed. */ - public object Image : EmbedType("image") - - /** Video embed. */ - public object Video : EmbedType("video") - - /** Animated gif image embed rendered as a video embed. */ - public object Gifv : EmbedType("gifv") - - /** Article embed. */ - public object Article : EmbedType("article") - - /** Link embed. */ - public object Link : EmbedType("link") - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.EmbedType", PrimitiveKind.STRING) - - override fun deserialize(decoder: Decoder): EmbedType = when (val value = decoder.decodeString()) { - "rich" -> Rich - "image" -> Image - "video" -> Video - "gifv" -> Gifv - "article" -> Article - "Link" -> Link - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: EmbedType) { - encoder.encodeString(value.value) - } - } - -} - @Serializable public data class Reaction( val count: Int, @@ -681,32 +699,6 @@ public data class MessageActivity( val partyId: Optional = Optional.Missing(), ) -@Serializable(with = MessageActivityType.Serializer::class) -public sealed class MessageActivityType(public val value: Int) { - public class Unknown(value: Int) : MessageActivityType(value) - public object Join : MessageActivityType(1) - public object Spectate : MessageActivityType(2) - public object Listen : MessageActivityType(3) - public object JoinRequest : MessageActivityType(5) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.MessageActivivtyType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): MessageActivityType = when (val value = decoder.decodeInt()) { - 1 -> Join - 2 -> Spectate - 3 -> Listen - 5 -> JoinRequest - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: MessageActivityType) { - encoder.encodeInt(value.value) - } - } -} - @Serializable public data class MessageApplication( val id: Snowflake, @@ -772,135 +764,6 @@ public data class AllRemovedMessageReactions( val guildId: OptionalSnowflake = OptionalSnowflake.Missing, ) -@Serializable(with = MessageType.MessageTypeSerializer::class) -public sealed class MessageType(public val code: Int) { - - final override fun equals(other: Any?): Boolean = - this === other || (other is MessageType && this.code == other.code) - - final override fun hashCode(): Int = code - - - /** The default code for unknown values. */ - public class Unknown(code: Int) : MessageType(code) - public object Default : MessageType(0) - public object RecipientAdd : MessageType(1) - public object RecipientRemove : MessageType(2) - public object Call : MessageType(3) - public object ChannelNameChange : MessageType(4) - public object ChannelIconChange : MessageType(5) - public object ChannelPinnedMessage : MessageType(6) - - /** @suppress */ - @Deprecated("Renamed to 'UserJoin'.", ReplaceWith("UserJoin")) - public object GuildMemberJoin : MessageType(7) - public object UserJoin : MessageType(7) - - /** @suppress */ - @Deprecated("Renamed to 'GuildBoost'.", ReplaceWith("GuildBoost")) - public object UserPremiumGuildSubscription : MessageType(8) - public object GuildBoost : MessageType(8) - - /** @suppress */ - @Deprecated("Renamed to 'GuildBoostTier1'.", ReplaceWith("GuildBoostTier1")) - public object UserPremiumGuildSubscriptionTierOne : MessageType(9) - public object GuildBoostTier1 : MessageType(9) - - /** @suppress */ - @Deprecated("Renamed to 'GuildBoostTier2'.", ReplaceWith("GuildBoostTier2")) - public object UserPremiumGuildSubscriptionTwo : MessageType(10) - public object GuildBoostTier2 : MessageType(10) - - /** @suppress */ - @Deprecated("Renamed to 'GuildBoostTier3'.", ReplaceWith("GuildBoostTier3")) - public object UserPremiumGuildSubscriptionThree : MessageType(11) - public object GuildBoostTier3 : MessageType(11) - public object ChannelFollowAdd : MessageType(12) - public object GuildDiscoveryDisqualified : MessageType(14) - - @Suppress("SpellCheckingInspection") - public object GuildDiscoveryRequalified : MessageType(15) - public object GuildDiscoveryGracePeriodInitialWarning : MessageType(16) - public object GuildDiscoveryGracePeriodFinalWarning : MessageType(17) - public object ThreadCreated : MessageType(18) - public object Reply : MessageType(19) - public object ChatInputCommand : MessageType(20) - public object ThreadStarterMessage : MessageType(21) - public object GuildInviteReminder : MessageType(22) - public object ContextMenuCommand : MessageType(23) - public object AutoModerationAction : MessageType(24) - - - internal object MessageTypeSerializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): MessageType { - val code = decoder.decodeInt() - return values.firstOrNull { it.code == code } ?: Unknown(code) - } - - override fun serialize(encoder: Encoder, value: MessageType) { - encoder.encodeInt(value.code) - } - } - - public companion object { - public val values: Set - get() = setOf( - Default, - RecipientAdd, - RecipientRemove, - Call, - ChannelNameChange, - ChannelIconChange, - ChannelPinnedMessage, - UserJoin, - GuildBoost, - GuildBoostTier1, - GuildBoostTier2, - GuildBoostTier3, - ChannelFollowAdd, - GuildDiscoveryDisqualified, - GuildDiscoveryRequalified, - Reply, - GuildDiscoveryGracePeriodInitialWarning, - GuildDiscoveryGracePeriodFinalWarning, - ThreadCreated, - ChatInputCommand, - ThreadStarterMessage, - GuildInviteReminder, - ContextMenuCommand, - AutoModerationAction, - ) - } -} - -@Serializable(with = AllowedMentionType.Serializer::class) -public sealed class AllowedMentionType(public val value: String) { - public class Unknown(value: String) : AllowedMentionType(value) - public object RoleMentions : AllowedMentionType("roles") - public object UserMentions : AllowedMentionType("users") - public object EveryoneMentions : AllowedMentionType("everyone") - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("Kord.DiscordAllowedMentionType", PrimitiveKind.STRING) - - override fun deserialize(decoder: Decoder): AllowedMentionType = when (val value = decoder.decodeString()) { - "roles" -> RoleMentions - "users" -> UserMentions - "everyone" -> EveryoneMentions - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: AllowedMentionType) { - encoder.encodeString(value.value) - } - } -} - @Serializable public data class AllowedMentions( val parse: List, diff --git a/common/src/main/kotlin/entity/DiscordStageInstance.kt b/common/src/main/kotlin/entity/DiscordStageInstance.kt index 3c79d804770d..08b1430cc943 100644 --- a/common/src/main/kotlin/entity/DiscordStageInstance.kt +++ b/common/src/main/kotlin/entity/DiscordStageInstance.kt @@ -1,13 +1,25 @@ +@file:GenerateKordEnum( + name = "StageInstancePrivacyLevel", valueType = INT, + deprecatedSerializerName = "Serializer", + entries = [ + Entry("GuildOnly", intValue = 2, kDoc = "The Stage instance is visible to only guild members."), + ], + deprecatedEntries = [ + Entry( + "Public", intValue = 1, kDoc = "The Stage instance is visible publicly.", + deprecationMessage = "Stages are no longer discoverable", deprecationLevel = WARNING, + ), + ], +) + package dev.kord.common.entity -import kotlinx.serialization.KSerializer +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.SerialName 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 +import kotlin.DeprecationLevel.WARNING /** @@ -38,42 +50,3 @@ public data class DiscordStageInstance( @SerialName("guild_scheduled_event_id") val guildScheduledEventId: Snowflake?, ) - -/** - * Privacy level of a [DiscordStageInstance]. - */ -@Serializable(with = StageInstancePrivacyLevel.Serializer::class) -public sealed class StageInstancePrivacyLevel(public val value: Int) { - - /** - * The Stage instance is visible publicly, such as on Stage Discovery. - */ - @Deprecated("Stages are no longer discoverable") - public object Public : StageInstancePrivacyLevel(1) - - /** - * The Stage instance is visible to only guild members. - */ - public object GuildOnly : StageInstancePrivacyLevel(2) - - /** - * An unknown privacy level. - */ - public class Unknown(value: Int) : StageInstancePrivacyLevel(value) - - public companion object Serializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("StageInstancePrivacyLevel", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): StageInstancePrivacyLevel { - @Suppress("DEPRECATION") - return when (val value = decoder.decodeInt()) { - 1 -> Public - 2 -> GuildOnly - else -> Unknown(value) - } - } - - override fun serialize(encoder: Encoder, value: StageInstancePrivacyLevel): Unit = encoder.encodeInt(value.value) - - } -} diff --git a/common/src/main/kotlin/entity/DiscordUser.kt b/common/src/main/kotlin/entity/DiscordUser.kt index 70d0f747d32a..32bba6985f2a 100644 --- a/common/src/main/kotlin/entity/DiscordUser.kt +++ b/common/src/main/kotlin/entity/DiscordUser.kt @@ -1,7 +1,20 @@ +@file:GenerateKordEnum( + name = "UserPremium", valueType = INT, + kDoc = "Premium types denote the level of premium a user has.", + entries = [ + Entry("None", intValue = 0), + Entry("NitroClassic", intValue = 1), + Entry("Nitro", intValue = 2), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalBoolean +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName @@ -178,32 +191,3 @@ public inline fun UserFlags(builder: UserFlags.UserFlagsBuilder.() -> Unit): Use contract { callsInPlace(builder, InvocationKind.EXACTLY_ONCE) } return UserFlags.UserFlagsBuilder().apply(builder).flags() } - -/** - * An instance of [Discord Premium Types](https://discord.com/developers/docs/resources/user#user-object-premium-types). - * - * Premium types denote the level of premium a user has. - */ -@Serializable(with = UserPremium.Serializer::class) -public sealed class UserPremium(public val value: Int) { - public class Unknown(value: Int) : UserPremium(value) - public object None : UserPremium(0) - public object NitroClassic : UserPremium(1) - public object Nitro : UserPremium(2) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("premium_type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): UserPremium = when (val value = decoder.decodeInt()) { - 0 -> None - 1 -> NitroClassic - 2 -> Nitro - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: UserPremium) { - encoder.encodeInt(value.value) - } - } -} diff --git a/common/src/main/kotlin/entity/DiscordWebhook.kt b/common/src/main/kotlin/entity/DiscordWebhook.kt index 30f60dd0f630..0291501ab00d 100644 --- a/common/src/main/kotlin/entity/DiscordWebhook.kt +++ b/common/src/main/kotlin/entity/DiscordWebhook.kt @@ -1,13 +1,27 @@ +@file:GenerateKordEnum( + name = "WebhookType", valueType = INT, + entries = [ + Entry( + "Incoming", intValue = 1, + kDoc = "Incoming Webhooks can post messages to channels with a generated token.", + ), + Entry( + "ChannelFollower", intValue = 2, + kDoc = "Channel Follower Webhooks are internal webhooks used with Channel Following to post new messages " + + "into channels.", + ), + Entry("Application", intValue = 3, kDoc = "Application webhooks are webhooks used with Interactions."), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalSnowflake +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.* -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 /** * A representation of the [Discord Webhook structure](https://discord.com/developers/docs/resources/webhook#webhook-object). @@ -37,34 +51,3 @@ public data class DiscordWebhook( @SerialName("application_id") val applicationId: Snowflake?, ) - -@Serializable(with = WebhookType.Serializer::class) -public sealed class WebhookType(public val value: Int) { - public class Unknown(value: Int) : WebhookType(value) - - /** - * Incoming Webhooks can post messages to channels with a generated token. - */ - public object Incoming : WebhookType(1) - - /** - * Channel Follower Webhooks are internal webhooks used with Channel Following to post new messages into channels. - */ - public object ChannelFollower : WebhookType(2) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): WebhookType = when (val value = decoder.decodeInt()) { - 1 -> Incoming - 2 -> ChannelFollower - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: WebhookType) { - encoder.encodeInt(value.value) - } - } -} diff --git a/common/src/main/kotlin/entity/Interactions.kt b/common/src/main/kotlin/entity/Interactions.kt index 9da64f65094b..33377dad2c83 100644 --- a/common/src/main/kotlin/entity/Interactions.kt +++ b/common/src/main/kotlin/entity/Interactions.kt @@ -1,8 +1,83 @@ +@file:GenerateKordEnum( + name = "ApplicationCommandType", valueType = INT, + entries = [ + Entry("ChatInput", intValue = 1, kDoc = "A text-based command that shows up when a user types `/`."), + Entry("User", intValue = 2, kDoc = "A UI-based command that shows up when you right-click or tap on a user."), + Entry( + "Message", intValue = 3, + kDoc = "A UI-based command that shows up when you right-click or tap on a message.", + ), + ], +) + +@file:GenerateKordEnum( + name = "ApplicationCommandOptionType", valueType = INT, valueName = "type", + entries = [ + Entry("SubCommand", intValue = 1), + Entry("SubCommandGroup", intValue = 2), + Entry("String", intValue = 3), + Entry("Integer", intValue = 4, kDoc = "Any integer between `-2^53` and `2^53`."), + Entry("Boolean", intValue = 5), + Entry("User", intValue = 6), + Entry("Channel", intValue = 7, kDoc = "Includes all channel types + categories."), + Entry("Role", intValue = 8), + Entry("Mentionable", intValue = 9, kDoc = "Includes users and roles."), + Entry("Number", intValue = 10, kDoc = "Any double between `-2^53` and `2^53`."), + Entry("Attachment", intValue = 11), + ], +) + +@file:GenerateKordEnum( + name = "InteractionType", valueType = INT, valueName = "type", + entries = [ + Entry("Ping", intValue = 1), + Entry("ApplicationCommand", intValue = 2), + Entry("Component", intValue = 3), + Entry("AutoComplete", intValue = 4), + Entry("ModalSubmit", intValue = 5), + ], +) + +@file:GenerateKordEnum( + name = "InteractionResponseType", valueType = INT, valueName = "type", + entries = [ + Entry("Pong", intValue = 1, kDoc = "ACK a [Ping][dev.kord.common.entity.InteractionType.Ping]."), + Entry("ChannelMessageWithSource", intValue = 4, kDoc = "Respond to an interaction with a message."), + Entry( + "DeferredChannelMessageWithSource", intValue = 5, + kDoc = "ACK an interaction and edit a response later, the user sees a loading state.", + ), + Entry( + "DeferredUpdateMessage", intValue = 6, + kDoc = "For components, ACK an interaction and edit the original message later; the user does not see a " + + "loading state.", + ), + Entry("UpdateMessage", intValue = 7, kDoc = "For components, edit the message the component was attached to."), + Entry( + "ApplicationCommandAutoCompleteResult", intValue = 8, + kDoc = "Respond to an autocomplete interaction with suggested choices.", + ), + Entry("Modal", intValue = 9, kDoc = "Respond to an interaction with a popup modal."), + ], +) + +@file:GenerateKordEnum( + name = "ApplicationCommandPermissionType", valueType = INT, + entries = [ + Entry("Role", intValue = 1), + Entry("User", intValue = 2), + Entry("Channel", intValue = 3), + ], +) + package dev.kord.common.entity import dev.kord.common.Locale import dev.kord.common.annotation.KordExperimental import dev.kord.common.entity.optional.* +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.* import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.builtins.MapSerializer @@ -11,6 +86,8 @@ import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.* import kotlinx.serialization.json.* +import kotlin.DeprecationLevel.ERROR +import kotlin.DeprecationLevel.HIDDEN @Serializable public data class DiscordApplicationCommand( @@ -40,30 +117,6 @@ public data class DiscordApplicationCommand( val version: Snowflake ) -@Serializable(with = ApplicationCommandType.Serializer::class) -public sealed class ApplicationCommandType(public val value: Int) { - /** The default code for unknown values. */ - public class Unknown(value: Int) : ApplicationCommandType(value) - public object ChatInput : ApplicationCommandType(1) - public object User : ApplicationCommandType(2) - public object Message : ApplicationCommandType(3) - - internal object Serializer : KSerializer { - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("type", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ApplicationCommandType = when (val code = decoder.decodeInt()) { - 1 -> ChatInput - 2 -> User - 3 -> Message - else -> Unknown(code) - } - - override fun serialize(encoder: Encoder, value: ApplicationCommandType) = encoder.encodeInt(value.value) - } - -} - @Serializable public data class ApplicationCommandOption( val type: ApplicationCommandOptionType, @@ -105,52 +158,6 @@ public object NotSerializable : KSerializer { } -@Serializable(ApplicationCommandOptionType.Serializer::class) -public sealed class ApplicationCommandOptionType(public val type: Int) { - - public object SubCommand : ApplicationCommandOptionType(1) - public object SubCommandGroup : ApplicationCommandOptionType(2) - public object String : ApplicationCommandOptionType(3) - public object Integer : ApplicationCommandOptionType(4) - public object Boolean : ApplicationCommandOptionType(5) - public object User : ApplicationCommandOptionType(6) - public object Channel : ApplicationCommandOptionType(7) - public object Role : ApplicationCommandOptionType(8) - public object Mentionable : ApplicationCommandOptionType(9) - public object Number : ApplicationCommandOptionType(10) - public object Attachment : ApplicationCommandOptionType(11) - public class Unknown(type: Int) : ApplicationCommandOptionType(type) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("ApplicationCommandOptionType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): ApplicationCommandOptionType { - return when (val type = decoder.decodeInt()) { - 1 -> SubCommand - 2 -> SubCommandGroup - 3 -> String - 4 -> Integer - 5 -> Boolean - 6 -> User - 7 -> Channel - 8 -> Role - 9 -> Mentionable - 10 -> Number - 11 -> Attachment - else -> Unknown(type) - } - } - - override fun serialize(encoder: Encoder, value: ApplicationCommandOptionType) { - encoder.encodeInt(value.type) - } - } - - -} - private val LocalizationSerializer = Optional.serializer(MapSerializer(Locale.serializer(), String.serializer()).nullable) @@ -292,54 +299,6 @@ public data class DiscordInteraction( } -@Serializable(InteractionType.Serializer::class) -public sealed class InteractionType(public val type: Int) { - public object Ping : InteractionType(1) - public object ApplicationCommand : InteractionType(2) - - /* - * don't trust the docs: - * - * this type exists and is needed for components even though it's not documented - */ - public object Component : InteractionType(3) - - public object AutoComplete : InteractionType(4) - public object ModalSubmit : InteractionType(5) - public class Unknown(type: Int) : InteractionType(type) - - override fun toString(): String = when (this) { - Ping -> "InteractionType.Ping($type)" - ApplicationCommand -> "InteractionType.ApplicationCommand($type)" - Component -> "InteractionType.ComponentInvoke($type)" - AutoComplete -> "InteractionType.AutoComplete($type)" - ModalSubmit -> "InteractionType.ModalSubmit($type)" - is Unknown -> "InteractionType.Unknown($type)" - } - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("InteractionType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): InteractionType { - return when (val type = decoder.decodeInt()) { - 1 -> Ping - 2 -> ApplicationCommand - 3 -> Component - 4 -> AutoComplete - 5 -> ModalSubmit - else -> Unknown(type) - } - } - - override fun serialize(encoder: Encoder, value: InteractionType) { - encoder.encodeInt(value.type) - } - - } -} - @Serializable public data class InteractionCallbackData( val id: OptionalSnowflake = OptionalSnowflake.Missing, @@ -738,42 +697,6 @@ public fun CommandArgument<*>.snowflake(): Snowflake { return Snowflake(id) } -@Serializable(InteractionResponseType.Serializer::class) - -public sealed class InteractionResponseType(public val type: Int) { - public object Pong : InteractionResponseType(1) - public object ChannelMessageWithSource : InteractionResponseType(4) - public object DeferredChannelMessageWithSource : InteractionResponseType(5) - public object DeferredUpdateMessage : InteractionResponseType(6) - public object UpdateMessage : InteractionResponseType(7) - public object ApplicationCommandAutoCompleteResult : InteractionResponseType(8) - public object Modal : InteractionResponseType(9) - public class Unknown(type: Int) : InteractionResponseType(type) - - internal object Serializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("InteractionResponseType", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): InteractionResponseType { - return when (val type = decoder.decodeInt()) { - 1 -> Pong - 4 -> ChannelMessageWithSource - 5 -> DeferredChannelMessageWithSource - 6 -> DeferredUpdateMessage - 7 -> UpdateMessage - 8 -> ApplicationCommandAutoCompleteResult - 9 -> Modal - else -> Unknown(type) - } - } - - override fun serialize(encoder: Encoder, value: InteractionResponseType) { - encoder.encodeInt(value.type) - } - } -} - @Serializable public data class DiscordGuildApplicationCommandPermissions( @@ -788,16 +711,102 @@ public data class DiscordGuildApplicationCommandPermissions( @Serializable public data class DiscordGuildApplicationCommandPermission( val id: Snowflake, - val type: Type, + val type: ApplicationCommandPermissionType, val permission: Boolean ) { + + @Suppress("DEPRECATION_ERROR") + @Deprecated( + "'DiscordGuildApplicationCommandPermission.Type' is replaced by 'ApplicationCommandPermissionType'", + level = ERROR, + ) + public constructor(id: Snowflake, type: Type, permission: Boolean) : this(id, type.toNewType(), permission) + + @Suppress("DEPRECATION_ERROR") + @Deprecated("Binary compatibility", level = HIDDEN) + @get:JvmName("getType") + public val type0: Type get() = type.toDeprecatedType() + + @Suppress("DEPRECATION_ERROR", "FunctionName") + @Deprecated("Binary compatibility", level = HIDDEN) + @JvmName("component2") + public fun _component2(): Type = type.toDeprecatedType() + + @Suppress("DEPRECATION_ERROR", "DeprecatedCallableAddReplaceWith") + @Deprecated( + "'DiscordGuildApplicationCommandPermission.Type' is replaced by 'ApplicationCommandPermissionType'", + level = ERROR, + ) + public fun copy( + id: Snowflake = this.id, + type: Type = this.type.toDeprecatedType(), + permission: Boolean = this.permission, + ): DiscordGuildApplicationCommandPermission = DiscordGuildApplicationCommandPermission(id, type, permission) + + @Suppress("DEPRECATION_ERROR") + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType'", + ReplaceWith("ApplicationCommandPermissionType", "dev.kord.common.entity.ApplicationCommandPermissionType"), + level = ERROR, + ) @Serializable(with = Type.Serializer::class) public sealed class Type(public val value: Int) { + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.Role'", + ReplaceWith( + "ApplicationCommandPermissionType.Role", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) public object Role : Type(1) + + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.User'", + ReplaceWith( + "ApplicationCommandPermissionType.User", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) public object User : Type(2) + + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.Channel'", + ReplaceWith( + "ApplicationCommandPermissionType.Channel", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) public object Channel : Type(3) - public class Unknown(value: Int) : Type(value) + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.Unknown'", + ReplaceWith( + "ApplicationCommandPermissionType.Unknown", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) + public class Unknown + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.Unknown'", + ReplaceWith( + "ApplicationCommandPermissionType.Unknown(value)", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) public constructor(value: Int) : Type(value) + + @Deprecated( + "Replaced by 'ApplicationCommandPermissionType.serializer()'", + ReplaceWith( + "ApplicationCommandPermissionType.serializer()", + "dev.kord.common.entity.ApplicationCommandPermissionType", + ), + level = ERROR, + ) public object Serializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("type", PrimitiveKind.INT) @@ -813,6 +822,26 @@ public data class DiscordGuildApplicationCommandPermission( override fun serialize(encoder: Encoder, value: Type): Unit = encoder.encodeInt(value.value) } } + + // functions for migration purposes, remove when bumping deprecations + // (public companion object can be removed, it's generated by kxser) + public companion object { + @Suppress("DEPRECATION_ERROR") + private fun ApplicationCommandPermissionType.toDeprecatedType() = when (this) { + ApplicationCommandPermissionType.Role -> Type.Role + ApplicationCommandPermissionType.User -> Type.User + ApplicationCommandPermissionType.Channel -> Type.Channel + is ApplicationCommandPermissionType.Unknown -> Type.Unknown(value) + } + + @Suppress("DEPRECATION_ERROR") + private fun Type.toNewType() = when (this) { + Type.Role -> ApplicationCommandPermissionType.Role + Type.User -> ApplicationCommandPermissionType.User + Type.Channel -> ApplicationCommandPermissionType.Channel + is Type.Unknown -> ApplicationCommandPermissionType.Unknown(value) + } + } } @Serializable diff --git a/common/src/main/kotlin/entity/Presence.kt b/common/src/main/kotlin/entity/Presence.kt index 3f7e51b246c5..a584b2218965 100644 --- a/common/src/main/kotlin/entity/Presence.kt +++ b/common/src/main/kotlin/entity/Presence.kt @@ -1,7 +1,22 @@ +@file:GenerateKordEnum( + name = "PresenceStatus", valueType = STRING, + deprecatedSerializerName = "StatusSerializer", + entries = [ + Entry("Online", stringValue = "online", kDoc = "Online."), + Entry("DoNotDisturb", stringValue = "dnd", kDoc = "Do Not Disturb."), + Entry("Idle", stringValue = "idle", kDoc = "AFK."), + Entry("Invisible", stringValue = "invisible", kDoc = "Invisible and shown as offline."), + Entry("Offline", stringValue = "offline", kDoc = "Offline."), + ], +) + package dev.kord.common.entity import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.OptionalSnowflake +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -66,31 +81,3 @@ public data class DiscordClientStatus( val mobile: Optional = Optional.Missing(), val web: Optional = Optional.Missing(), ) - -@Serializable(with = PresenceStatus.StatusSerializer::class) -public sealed class PresenceStatus(public val value: String) { - - public class Unknown(value: String) : PresenceStatus(value) - public object Online : PresenceStatus("online") - public object Idle : PresenceStatus("idle") - public object DoNotDisturb : PresenceStatus("dnd") - public object Offline : PresenceStatus("offline") - public object Invisible : PresenceStatus("invisible") - - public companion object StatusSerializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Kord.ClientStatus", PrimitiveKind.STRING) - - override fun deserialize(decoder: Decoder): PresenceStatus = when (val value = decoder.decodeString()) { - "online" -> Online - "idle" -> Idle - "dnd" -> DoNotDisturb - "offline" -> Offline - "invisible" -> Invisible - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: PresenceStatus) { - encoder.encodeString(value.value) - } - } -} diff --git a/common/src/main/kotlin/entity/Team.kt b/common/src/main/kotlin/entity/Team.kt index 7656e2d838cb..50d7294e604f 100644 --- a/common/src/main/kotlin/entity/Team.kt +++ b/common/src/main/kotlin/entity/Team.kt @@ -1,11 +1,18 @@ +@file:GenerateKordEnum( + name = "TeamMembershipState", valueType = INT, + deprecatedSerializerName = "TeamMembershipStateSerializer", + entries = [ + Entry("Invited", intValue = 1), + Entry("Accepted", intValue = 2), + ], +) + package dev.kord.common.entity +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType.INT import kotlinx.serialization.* -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 /** * The raw developer team data gotten from the API. @@ -19,44 +26,6 @@ public data class DiscordTeam( val ownerUserId: Snowflake, ) -/** - * The state of membership on a Discord developer team. - */ -@Serializable(with = TeamMembershipState.TeamMembershipStateSerializer::class) -public sealed class TeamMembershipState(public val value: Int) { - /** - * Unknown membership state. - */ - public class Unknown(value: Int) : TeamMembershipState(value) - - /** - * The user has been invited. - */ - public object Invited : TeamMembershipState(1) - - /** - * The user has accepted the invitation. - */ - public object Accepted : TeamMembershipState(2) - - - public companion object TeamMembershipStateSerializer : KSerializer { - - override val descriptor: SerialDescriptor - get() = PrimitiveSerialDescriptor("membership_state", PrimitiveKind.INT) - - override fun deserialize(decoder: Decoder): TeamMembershipState = when (val value = decoder.decodeInt()) { - 1 -> Invited - 2 -> Accepted - else -> Unknown(value) - } - - override fun serialize(encoder: Encoder, value: TeamMembershipState) { - encoder.encodeInt(value.value) - } - } -} - /** * The raw developer team member data gotten from the API. */ diff --git a/common/src/test/kotlin/json/InteractionTest.kt b/common/src/test/kotlin/json/InteractionTest.kt index 1072e0f157d8..f6894c4a0b4c 100644 --- a/common/src/test/kotlin/json/InteractionTest.kt +++ b/common/src/test/kotlin/json/InteractionTest.kt @@ -108,7 +108,7 @@ class InteractionTest { with(permissions.first()) { id shouldBe "827126703301066792" - type shouldBe DiscordGuildApplicationCommandPermission.Type.Role + type shouldBe ApplicationCommandPermissionType.Role permission shouldBe true } } diff --git a/core/api/core.api b/core/api/core.api index eecc4838f367..ff6ce8f17d32 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -3543,16 +3543,21 @@ public final class dev/kord/core/cache/data/EmojiDataKt { public final class dev/kord/core/cache/data/GuildApplicationCommandPermissionData { public static final field Companion Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData$Companion; + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;Z)V public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;Z)V public final fun component1 ()Ldev/kord/common/entity/Snowflake; - public final fun component2 ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; + public final fun component2 ()Ldev/kord/common/entity/ApplicationCommandPermissionType; + public final synthetic fun component2 ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; public final fun component3 ()Z + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;Z)Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData; public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;Z)Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData; + public static synthetic fun copy$default (Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/ApplicationCommandPermissionType;ZILjava/lang/Object;)Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData; public static synthetic fun copy$default (Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type;ZILjava/lang/Object;)Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData; public fun equals (Ljava/lang/Object;)Z public final fun getId ()Ldev/kord/common/entity/Snowflake; public final fun getPermission ()Z - public final fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; + public final fun getType ()Ldev/kord/common/entity/ApplicationCommandPermissionType; + public final synthetic fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; public fun hashCode ()I public fun toString ()Ljava/lang/String; } @@ -7432,7 +7437,8 @@ public final class dev/kord/core/entity/application/GuildApplicationCommandPermi public final fun getData ()Ldev/kord/core/cache/data/GuildApplicationCommandPermissionData; public final fun getId ()Ldev/kord/common/entity/Snowflake; public final fun getPermission ()Z - public final fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; + public final fun getType ()Ldev/kord/common/entity/ApplicationCommandPermissionType; + public final synthetic fun getType ()Ldev/kord/common/entity/DiscordGuildApplicationCommandPermission$Type; } public final class dev/kord/core/entity/application/GuildChatInputCommand : dev/kord/core/behavior/GuildChatInputCommandBehavior, dev/kord/core/entity/application/ChatInputCommandCommand, dev/kord/core/entity/application/GuildApplicationCommand { diff --git a/core/src/main/kotlin/cache/data/EmbedData.kt b/core/src/main/kotlin/cache/data/EmbedData.kt index 0fc8bfd20af5..1e93f427366f 100644 --- a/core/src/main/kotlin/cache/data/EmbedData.kt +++ b/core/src/main/kotlin/cache/data/EmbedData.kt @@ -1,5 +1,3 @@ -@file:Suppress("DEPRECATION") - package dev.kord.core.cache.data import dev.kord.common.entity.DiscordEmbed @@ -11,7 +9,6 @@ import kotlinx.serialization.Serializable @Serializable public data class EmbedData( val title: Optional = Optional.Missing(), - @Suppress("DEPRECATION") val type: Optional = Optional.Missing(), val description: Optional = Optional.Missing(), val url: Optional = Optional.Missing(), diff --git a/core/src/main/kotlin/cache/data/GuildApplicationCommandPermissionData.kt b/core/src/main/kotlin/cache/data/GuildApplicationCommandPermissionData.kt index dc2d7924eac6..c2e93fbc7e46 100644 --- a/core/src/main/kotlin/cache/data/GuildApplicationCommandPermissionData.kt +++ b/core/src/main/kotlin/cache/data/GuildApplicationCommandPermissionData.kt @@ -1,18 +1,72 @@ package dev.kord.core.cache.data +import dev.kord.common.entity.ApplicationCommandPermissionType import dev.kord.common.entity.DiscordGuildApplicationCommandPermission import dev.kord.common.entity.Snowflake +import kotlin.DeprecationLevel.ERROR +import kotlin.DeprecationLevel.HIDDEN public data class GuildApplicationCommandPermissionData( val id: Snowflake, - val type: DiscordGuildApplicationCommandPermission.Type, + val type: ApplicationCommandPermissionType, val permission: Boolean ) { + @Suppress("DEPRECATION_ERROR") + @Deprecated( + "'DiscordGuildApplicationCommandPermission.Type' is replaced by 'ApplicationCommandPermissionType'", + level = ERROR, + ) + public constructor(id: Snowflake, type: DiscordGuildApplicationCommandPermission.Type, permission: Boolean) : this( + id, + type.toNewType(), + permission, + ) + + @Suppress("DEPRECATION_ERROR") + @Deprecated("Binary compatibility", level = HIDDEN) + @get:JvmName("getType") + public val type0: DiscordGuildApplicationCommandPermission.Type get() = type.toDeprecatedType() + + @Suppress("DEPRECATION_ERROR", "FunctionName") + @Deprecated("Binary compatibility", level = HIDDEN) + @JvmName("component2") + public fun _component2(): DiscordGuildApplicationCommandPermission.Type = type.toDeprecatedType() + + @Suppress("DEPRECATION_ERROR", "DeprecatedCallableAddReplaceWith") + @Deprecated( + "'DiscordGuildApplicationCommandPermission.Type' is replaced by 'ApplicationCommandPermissionType'", + level = ERROR, + ) + public fun copy( + id: Snowflake = this.id, + type: DiscordGuildApplicationCommandPermission.Type = this.type.toDeprecatedType(), + permission: Boolean = this.permission, + ): GuildApplicationCommandPermissionData = GuildApplicationCommandPermissionData(id, type, permission) + + public companion object { public fun from(permission: DiscordGuildApplicationCommandPermission): GuildApplicationCommandPermissionData = with(permission) { GuildApplicationCommandPermissionData(id, type, this.permission) } + + + // functions for migration purposes, remove when bumping deprecations + @Suppress("DEPRECATION_ERROR") + private fun ApplicationCommandPermissionType.toDeprecatedType() = when (this) { + ApplicationCommandPermissionType.Role -> DiscordGuildApplicationCommandPermission.Type.Role + ApplicationCommandPermissionType.User -> DiscordGuildApplicationCommandPermission.Type.User + ApplicationCommandPermissionType.Channel -> DiscordGuildApplicationCommandPermission.Type.Channel + is ApplicationCommandPermissionType.Unknown -> DiscordGuildApplicationCommandPermission.Type.Unknown(value) + } + + @Suppress("DEPRECATION_ERROR") + private fun DiscordGuildApplicationCommandPermission.Type.toNewType() = when (this) { + DiscordGuildApplicationCommandPermission.Type.Role -> ApplicationCommandPermissionType.Role + DiscordGuildApplicationCommandPermission.Type.User -> ApplicationCommandPermissionType.User + DiscordGuildApplicationCommandPermission.Type.Channel -> ApplicationCommandPermissionType.Channel + is DiscordGuildApplicationCommandPermission.Type.Unknown -> ApplicationCommandPermissionType.Unknown(value) + } } } diff --git a/core/src/main/kotlin/entity/Embed.kt b/core/src/main/kotlin/entity/Embed.kt index ea72af212843..d22a4a94a090 100644 --- a/core/src/main/kotlin/entity/Embed.kt +++ b/core/src/main/kotlin/entity/Embed.kt @@ -1,5 +1,3 @@ -@file:Suppress("DEPRECATION") - package dev.kord.core.entity import dev.kord.common.Color @@ -12,12 +10,6 @@ import dev.kord.core.cache.data.* import dev.kord.rest.builder.message.EmbedBuilder import kotlinx.datetime.Instant -internal const val embedDeprecationMessage = """ -Embed types should be considered deprecated and might be removed in a future API version. - -https://discord.com/developers/docs/resources/channel#embed-object-embed-types -""" - /** * An instance of a [Discord Embed](https://discord.com/developers/docs/resources/channel#embed-object). */ @@ -28,13 +20,8 @@ public data class Embed(val data: EmbedData, override val kord: Kord) : KordObje */ public val title: String? get() = data.title.value - /* - * The type, [Embed.Type.Rich] for webhook and bot created embeds. Null if unknown. - */ - @Suppress("DeprecatedCallableAddReplaceWith", "DEPRECATION") - @Deprecated(embedDeprecationMessage) - val type: EmbedType? - get() = data.type.value + /** The type of embed, if present. Always [Rich][EmbedType.Rich] for webhook embeds. */ + val type: EmbedType? get() = data.type.value /** * The description, if present. diff --git a/core/src/main/kotlin/entity/application/ApplicationGuildCommandPermissions.kt b/core/src/main/kotlin/entity/application/ApplicationGuildCommandPermissions.kt index b43f2c54fbac..c25e67e0ed50 100644 --- a/core/src/main/kotlin/entity/application/ApplicationGuildCommandPermissions.kt +++ b/core/src/main/kotlin/entity/application/ApplicationGuildCommandPermissions.kt @@ -1,17 +1,30 @@ package dev.kord.core.entity.application +import dev.kord.common.entity.ApplicationCommandPermissionType import dev.kord.common.entity.DiscordGuildApplicationCommandPermission import dev.kord.common.entity.Snowflake import dev.kord.core.cache.data.GuildApplicationCommandPermissionData import dev.kord.core.cache.data.GuildApplicationCommandPermissionsData import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow +import kotlin.DeprecationLevel.HIDDEN public class GuildApplicationCommandPermission(public val data: GuildApplicationCommandPermissionData) { public val id: Snowflake get() = data.id - public val type: DiscordGuildApplicationCommandPermission.Type get() = data.type + public val type: ApplicationCommandPermissionType get() = data.type + + @Suppress("DEPRECATION_ERROR") + @Deprecated("Binary compatibility", level = HIDDEN) + @get:JvmName("getType") + public val type0: DiscordGuildApplicationCommandPermission.Type + get() = when (val t = type) { + ApplicationCommandPermissionType.Role -> DiscordGuildApplicationCommandPermission.Type.Role + ApplicationCommandPermissionType.User -> DiscordGuildApplicationCommandPermission.Type.User + ApplicationCommandPermissionType.Channel -> DiscordGuildApplicationCommandPermission.Type.Channel + is ApplicationCommandPermissionType.Unknown -> DiscordGuildApplicationCommandPermission.Type.Unknown(t.value) + } public val permission: Boolean get() = data.permission } diff --git a/core/src/main/kotlin/entity/channel/Channel.kt b/core/src/main/kotlin/entity/channel/Channel.kt index e9e3dbde74e2..8bcf7932582a 100644 --- a/core/src/main/kotlin/entity/channel/Channel.kt +++ b/core/src/main/kotlin/entity/channel/Channel.kt @@ -51,8 +51,7 @@ public interface Channel : ChannelBehavior { GuildNews -> NewsChannel(data, kord) @Suppress("DEPRECATION_ERROR") GuildStore -> @Suppress("DEPRECATION_ERROR") StoreChannel(data, kord) PublicNewsThread -> NewsChannelThread(data, kord) - PrivateThread -> TextChannelThread(data, kord) - PublicGuildThread -> TextChannelThread(data, kord) + PrivateThread, PublicGuildThread -> TextChannelThread(data, kord) else -> { if (data.threadMetadata.value == null) Channel(data, kord, strategy.supply(kord)) diff --git a/core/src/main/kotlin/gateway/handler/ThreadEventHandler.kt b/core/src/main/kotlin/gateway/handler/ThreadEventHandler.kt index 2620bb818deb..0be861339f5b 100644 --- a/core/src/main/kotlin/gateway/handler/ThreadEventHandler.kt +++ b/core/src/main/kotlin/gateway/handler/ThreadEventHandler.kt @@ -72,14 +72,14 @@ internal class ThreadEventHandler : BaseGatewayEventHandler() { val channel = DeletedThreadChannel(channelData, kord) val old = cachedData?.let { Channel.from(cachedData, kord) } val coreEvent = when (channel.type) { - is ChannelType.PublicNewsThread -> NewsChannelThreadDeleteEvent( + ChannelType.PublicNewsThread -> NewsChannelThreadDeleteEvent( channel, old as? NewsChannelThread, shard, context?.get(), ) - is ChannelType.PrivateThread, - is ChannelType.GuildText -> TextChannelThreadDeleteEvent(channel, old as? TextChannelThread, shard, context?.get()) + ChannelType.PrivateThread, + ChannelType.PublicGuildThread -> TextChannelThreadDeleteEvent(channel, old as? TextChannelThread, shard, context?.get()) else -> UnknownChannelThreadDeleteEvent(channel, old as? ThreadChannel, shard, context?.get()) } diff --git a/ksp-annotations/build.gradle.kts b/ksp-annotations/build.gradle.kts new file mode 100644 index 000000000000..e8efcb5ecf8c --- /dev/null +++ b/ksp-annotations/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + `kord-internal-module` +} diff --git a/ksp-annotations/src/main/kotlin/GenerateKordEnum.kt b/ksp-annotations/src/main/kotlin/GenerateKordEnum.kt new file mode 100644 index 000000000000..df3d15e7c441 --- /dev/null +++ b/ksp-annotations/src/main/kotlin/GenerateKordEnum.kt @@ -0,0 +1,69 @@ +package dev.kord.ksp + +import dev.kord.ksp.GenerateKordEnum.Entry +import dev.kord.ksp.GenerateKordEnum.ValueType +import dev.kord.ksp.GenerateKordEnum.ValueType.INT +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.NONE +import kotlin.DeprecationLevel.WARNING +import kotlin.annotation.AnnotationRetention.SOURCE +import kotlin.annotation.AnnotationTarget.FILE + +/** Generate a kord enum in the same package as this file. */ +@Repeatable +@Retention(SOURCE) +@Target(FILE) +annotation class GenerateKordEnum( + /** Name of the kord enum. */ + val name: String, + /** [ValueType] of the kord enum. */ + val valueType: ValueType, + /** [Entries][Entry] of the kord enum. */ + val entries: Array, + /** KDoc for the kord enum (optional). */ + val kDoc: String = "", + /** Name of the value of the kord enum. */ + val valueName: String = "value", + /** [entries] of the kord enum that are [Deprecated]. [Entry.deprecationMessage] is required for these. */ + val deprecatedEntries: Array = [], + + // TODO remove eventually + /** For migration purposes. */ + val valuesPropertyName: String = "", + /** For migration purposes. */ + val valuesPropertyType: ValuesPropertyType = NONE, + /** For migration purposes. */ + val deprecatedSerializerName: String = "", +) { + enum class ValueType { INT, STRING } + enum class ValuesPropertyType { NONE, SET } + + @Retention(SOURCE) + @Target() // only use as argument for `@GenerateKordEnum(...)` + annotation class Entry( + /** Name of the entry. */ + val name: String, + /** [Int] value of the entry. Only set this if [GenerateKordEnum.valueType] is [INT]. */ + val intValue: Int = DEFAULT_INT_VALUE, + /** [String] value of the entry. Only set this if [GenerateKordEnum.valueType] is [STRING]. */ + val stringValue: String = DEFAULT_STRING_VALUE, + /** KDoc for the entry (optional). */ + val kDoc: String = "", + /** Whether to add `@KordExperimental` to this entry. */ + val isKordExperimental: Boolean = false, + /** [Deprecated.message] for a [deprecated entry][GenerateKordEnum.deprecatedEntries]. */ + val deprecationMessage: String = "", + /** [Deprecated.replaceWith] for a [deprecated entry][GenerateKordEnum.deprecatedEntries]. */ + val replaceWith: ReplaceWith = ReplaceWith(""), + /** [Deprecated.level] for a [deprecated entry][GenerateKordEnum.deprecatedEntries]. */ + val deprecationLevel: DeprecationLevel = WARNING, + ) { + companion object { + /** Default value for [intValue]. */ + const val DEFAULT_INT_VALUE = Int.MIN_VALUE // probably won't appear anywhere + + /** Default value for [stringValue]. */ + const val DEFAULT_STRING_VALUE = "" + } + } +} diff --git a/ksp-processors/build.gradle.kts b/ksp-processors/build.gradle.kts new file mode 100644 index 000000000000..3de1931298c4 --- /dev/null +++ b/ksp-processors/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + `kord-internal-module` +} + +dependencies { + implementation(projects.kspAnnotations) + implementation(libs.bundles.ksp.processors) + implementation(libs.kotlinx.serialization) // use types directly +} diff --git a/ksp-processors/src/main/kotlin/KSPUtils.kt b/ksp-processors/src/main/kotlin/KSPUtils.kt new file mode 100644 index 000000000000..be0176599880 --- /dev/null +++ b/ksp-processors/src/main/kotlin/KSPUtils.kt @@ -0,0 +1,20 @@ +package dev.kord.ksp + +import com.google.devtools.ksp.processing.Resolver +import com.google.devtools.ksp.symbol.KSAnnotation +import kotlin.reflect.KProperty1 + +internal inline fun Resolver.getSymbolsWithAnnotation(inDepth: Boolean = false) = + getSymbolsWithAnnotation(A::class.qualifiedName!!, inDepth) + +internal inline fun KSAnnotation.isOfType() = shortName.asString() == A::class.simpleName!! + && annotationType.resolve().declaration.qualifiedName?.asString() == A::class.qualifiedName!! + +internal class AnnotationArguments private constructor(private val map: Map) { + internal operator fun get(parameter: KProperty1) = map[parameter.name] + + internal companion object { + internal val KSAnnotation.annotationArguments + get() = AnnotationArguments(arguments.associate { it.name!!.getShortName() to it.value!! }) + } +} diff --git a/ksp-processors/src/main/kotlin/KotlinPoetDsl.kt b/ksp-processors/src/main/kotlin/KotlinPoetDsl.kt new file mode 100644 index 000000000000..8b4f4689ed7c --- /dev/null +++ b/ksp-processors/src/main/kotlin/KotlinPoetDsl.kt @@ -0,0 +1,112 @@ +package dev.kord.ksp + +import com.squareup.kotlinpoet.* +import com.squareup.kotlinpoet.MemberName.Companion.member +import kotlin.annotation.AnnotationRetention.SOURCE +import kotlin.annotation.AnnotationTarget.TYPE + +// for scope control, see https://kotlinlang.org/docs/type-safe-builders.html#scope-control-dslmarker +@DslMarker +@Retention(SOURCE) +@Target(TYPE) +internal annotation class KotlinPoetDsl + +internal typealias FileSpecBuilder = (@KotlinPoetDsl FileSpec.Builder).() -> Unit +internal typealias TypeSpecBuilder = (@KotlinPoetDsl TypeSpec.Builder).() -> Unit +internal typealias AnnotationSpecBuilder = (@KotlinPoetDsl AnnotationSpec.Builder).() -> Unit +internal typealias FunSpecBuilder = (@KotlinPoetDsl FunSpec.Builder).() -> Unit +internal typealias PropertySpecBuilder = (@KotlinPoetDsl PropertySpec.Builder).() -> Unit +internal typealias CodeBlockBuilder = (@KotlinPoetDsl CodeBlock.Builder).() -> Unit + + +// miscellaneous + +internal inline fun > E.asMemberName() = E::class.member(name) + +internal inline fun FileSpec(packageName: String, fileName: String, builder: FileSpecBuilder) = + FileSpec.builder(packageName, fileName).apply(builder).build() + + +// extensions for `FileSpec.Builder` + +@DelicateKotlinPoetApi("See 'AnnotationSpec.get'") +internal fun FileSpec.Builder.addAnnotation(annotation: Annotation, includeDefaultValues: Boolean = false) = + addAnnotation(AnnotationSpec.get(annotation, includeDefaultValues)) + +internal inline fun FileSpec.Builder.addClass(className: ClassName, builder: TypeSpecBuilder) = + addType(TypeSpec.classBuilder(className).apply(builder).build()) + + +// extensions for `TypeSpec.Builder` + +internal inline fun TypeSpec.Builder.addAnnotation(builder: AnnotationSpecBuilder) = + addAnnotation(AnnotationSpec.builder(A::class).apply(builder).build()) + +@DelicateKotlinPoetApi("See 'AnnotationSpec.get'") +internal fun TypeSpec.Builder.addAnnotation(annotation: Annotation, includeDefaultValues: Boolean = false) = + addAnnotation(AnnotationSpec.get(annotation, includeDefaultValues)) + +internal inline fun TypeSpec.Builder.addClass(name: String, builder: TypeSpecBuilder) = + addType(TypeSpec.classBuilder(name).apply(builder).build()) + +internal inline fun TypeSpec.Builder.addCompanionObject(name: String? = null, builder: TypeSpecBuilder) = + addType(TypeSpec.companionObjectBuilder(name).apply(builder).build()) + +internal inline fun TypeSpec.Builder.addFunction(name: String, builder: FunSpecBuilder) = + addFunction(FunSpec.builder(name).apply(builder).build()) + +internal inline fun TypeSpec.Builder.addObject(name: String, builder: TypeSpecBuilder) = + addType(TypeSpec.objectBuilder(name).apply(builder).build()) + +internal inline fun TypeSpec.Builder.addProperty( + name: String, + vararg modifiers: KModifier, + builder: PropertySpecBuilder, +) = addProperty(PropertySpec.builder(name, typeNameOf(), *modifiers).apply(builder).build()) + +internal inline fun TypeSpec.Builder.addProperty( + name: String, + type: TypeName, + vararg modifiers: KModifier, + builder: PropertySpecBuilder, +) = addProperty(PropertySpec.builder(name, type, *modifiers).apply(builder).build()) + +internal inline fun TypeSpec.Builder.primaryConstructor(builder: FunSpecBuilder) = + primaryConstructor(FunSpec.constructorBuilder().apply(builder).build()) + + +// extensions for `FunSpec.Builder` + +@DelicateKotlinPoetApi("See 'AnnotationSpec.get'") +internal fun FunSpec.Builder.addAnnotation(annotation: Annotation, includeDefaultValues: Boolean = false) = + addAnnotation(AnnotationSpec.get(annotation, includeDefaultValues)) + +internal inline fun FunSpec.Builder.addParameter(name: String, vararg modifiers: KModifier) = + addParameter(name, typeNameOf(), *modifiers) + +internal inline fun FunSpec.Builder.returns() = returns(typeNameOf()) + +internal inline fun FunSpec.Builder.withControlFlow(controlFlow: String, vararg args: Any, builder: FunSpecBuilder) = + beginControlFlow(controlFlow, *args).apply(builder).endControlFlow() + + +// extensions for `PropertySpec.Builder` + +@DelicateKotlinPoetApi("See 'AnnotationSpec.get'") +internal fun PropertySpec.Builder.addAnnotation(annotation: Annotation, includeDefaultValues: Boolean = false) = + addAnnotation(AnnotationSpec.get(annotation, includeDefaultValues)) + +internal inline fun PropertySpec.Builder.delegate(builder: CodeBlockBuilder) = + delegate(CodeBlock.builder().apply(builder).build()) + +internal inline fun PropertySpec.Builder.getter(builder: FunSpecBuilder) = + getter(FunSpec.getterBuilder().apply(builder).build()) + + +// extensions for `CodeBlock.Builder` + +internal inline fun CodeBlock.Builder.withControlFlow( + controlFlow: String, + vararg args: Any?, + builder: CodeBlockBuilder, +) = beginControlFlow(controlFlow, *args).apply(builder).endControlFlow() diff --git a/ksp-processors/src/main/kotlin/kordenum/KordEnum.kt b/ksp-processors/src/main/kotlin/kordenum/KordEnum.kt new file mode 100644 index 000000000000..b5ba4e7f24db --- /dev/null +++ b/ksp-processors/src/main/kotlin/kordenum/KordEnum.kt @@ -0,0 +1,181 @@ +package dev.kord.ksp.kordenum + +import com.google.devtools.ksp.processing.KSPLogger +import com.google.devtools.ksp.symbol.KSAnnotation +import com.google.devtools.ksp.symbol.KSType +import dev.kord.ksp.AnnotationArguments.Companion.annotationArguments +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.GenerateKordEnum.ValueType +import dev.kord.ksp.GenerateKordEnum.ValueType.INT +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.NONE +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.SET +import dev.kord.ksp.kordenum.KordEnum.Entry +import kotlin.DeprecationLevel.* + +/** Mapping of [GenerateKordEnum] that is easier to work with in [KordEnumProcessor]. */ +internal class KordEnum( + val name: String, + val kDoc: String?, + val valueType: ValueType, + val valueName: String, + val entries: List, + val deprecatedEntries: List, + + // for migration purposes, TODO remove eventually + val valuesPropertyName: String?, + val valuesPropertyType: ValuesPropertyType, + val deprecatedSerializerName: String?, +) { + internal class Entry( + val name: String, + val kDoc: String?, + val value: Comparable<*>, + val isKordExperimental: Boolean, + val isDeprecated: Boolean, + val deprecationMessage: String, + val replaceWith: ReplaceWith, + val deprecationLevel: DeprecationLevel, + ) +} + +/** + * Maps [KSAnnotation] for [GenerateKordEnum] to [KordEnum]. + * + * Returns `null` if mapping fails. + */ +internal fun KSAnnotation.toKordEnumOrNull(logger: KSPLogger): KordEnum? { + val args = annotationArguments + + val name = args[GenerateKordEnum::name] as String + val valueType = args[GenerateKordEnum::valueType].toValueType() + val entries = args[GenerateKordEnum::entries] as List<*> + val kDoc = args[GenerateKordEnum::kDoc].toKDoc() + val valueName = args[GenerateKordEnum::valueName] as String + val deprecatedEntries = args[GenerateKordEnum::deprecatedEntries] as List<*> + + val valuesPropertyName = (args[GenerateKordEnum::valuesPropertyName] as String).ifEmpty { null } + val valuesPropertyType = args[GenerateKordEnum::valuesPropertyType].toValuesPropertyType() + if (valuesPropertyName != null) { + if (valuesPropertyType == NONE) { + logger.error("Didn't specify valuesPropertyType", symbol = this) + return null + } + } else { + if (valuesPropertyType != NONE) { + logger.error("Specified valuesPropertyType", symbol = this) + return null + } + } + val deprecatedSerializerName = (args[GenerateKordEnum::deprecatedSerializerName] as String).ifEmpty { null } + + return KordEnum( + name, kDoc, valueType, valueName, + entries.map { it.toEntryOrNull(valueType, isDeprecated = false, logger) ?: return null }, + deprecatedEntries.map { it.toEntryOrNull(valueType, isDeprecated = true, logger) ?: return null }, + + valuesPropertyName, valuesPropertyType, deprecatedSerializerName, + ) +} + +/** Maps [KSType] to [ValueType]. */ +private fun Any?.toValueType() = when (val name = (this as KSType).declaration.qualifiedName?.asString()) { + "dev.kord.ksp.GenerateKordEnum.ValueType.INT" -> INT + "dev.kord.ksp.GenerateKordEnum.ValueType.STRING" -> STRING + else -> error("Unknown GenerateKordEnum.ValueType: $name") +} + +private fun Any?.toKDoc() = (this as String).trimIndent().ifBlank { null } + +/** Maps [KSType] to [ValuesPropertyType]. */ +private fun Any?.toValuesPropertyType() = when (val name = (this as KSType).declaration.qualifiedName?.asString()) { + "dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.NONE" -> NONE + "dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.SET" -> SET + else -> error("Unknown GenerateKordEnum.ValuesPropertyType: $name") +} + +/** + * Maps [KSAnnotation] for [GenerateKordEnum.Entry] to [Entry]. + * + * Returns `null` if mapping fails. + */ +private fun Any?.toEntryOrNull(valueType: ValueType, isDeprecated: Boolean, logger: KSPLogger): Entry? { + val args = (this as KSAnnotation).annotationArguments + + val name = args[GenerateKordEnum.Entry::name] as String + val intValue = args[GenerateKordEnum.Entry::intValue] as Int + val stringValue = args[GenerateKordEnum.Entry::stringValue] as String + val kDoc = args[GenerateKordEnum.Entry::kDoc].toKDoc() + val isKordExperimental = args[GenerateKordEnum.Entry::isKordExperimental] as Boolean + val deprecationMessage = args[GenerateKordEnum.Entry::deprecationMessage] as String + val replaceWith = args[GenerateKordEnum.Entry::replaceWith].toReplaceWith() + val deprecationLevel = args[GenerateKordEnum.Entry::deprecationLevel].toDeprecationLevel() + + val value = when (valueType) { + INT -> { + if (stringValue != GenerateKordEnum.Entry.DEFAULT_STRING_VALUE) { + logger.error("Specified stringValue for valueType $valueType", symbol = this) + return null + } + if (intValue == GenerateKordEnum.Entry.DEFAULT_INT_VALUE) { + logger.error("Didn't specify intValue for valueType $valueType", symbol = this) + return null + } + + intValue + } + STRING -> { + if (intValue != GenerateKordEnum.Entry.DEFAULT_INT_VALUE) { + logger.error("Specified intValue for valueType $valueType", symbol = this) + return null + } + if (stringValue == GenerateKordEnum.Entry.DEFAULT_STRING_VALUE) { + logger.error("Didn't specify stringValue for valueType $valueType", symbol = this) + return null + } + + stringValue + } + } + + if (isDeprecated) { + if (deprecationMessage.isBlank()) { + logger.error("deprecationMessage is required", symbol = this) + return null + } + } else { + if (deprecationMessage.isNotEmpty()) { + logger.error("deprecationMessage is not allowed", symbol = this) + return null + } + if (replaceWith.expression.isNotEmpty() || replaceWith.imports.isNotEmpty()) { + logger.error("replaceWith is not allowed", symbol = this) + return null + } + if (deprecationLevel != WARNING) { + logger.error("deprecationLevel is not allowed", symbol = this) + return null + } + } + + return Entry(name, kDoc, value, isKordExperimental, isDeprecated, deprecationMessage, replaceWith, deprecationLevel) +} + +/** Maps [KSAnnotation] to [ReplaceWith]. */ +private fun Any?.toReplaceWith(): ReplaceWith { + val args = (this as KSAnnotation).annotationArguments + + val expression = args[ReplaceWith::expression] as String + val imports = @Suppress("UNCHECKED_CAST") (args[ReplaceWith::imports] as List) + + return ReplaceWith(expression, *imports.toTypedArray()) +} + +/** Maps [KSType] to [DeprecationLevel]. */ +private fun Any?.toDeprecationLevel() = when (val name = (this as KSType).declaration.qualifiedName?.asString()) { + "kotlin.DeprecationLevel.WARNING" -> WARNING + "kotlin.DeprecationLevel.ERROR" -> ERROR + "kotlin.DeprecationLevel.HIDDEN" -> HIDDEN + else -> error("Unknown DeprecationLevel: $name") +} diff --git a/ksp-processors/src/main/kotlin/kordenum/KordEnumGeneration.kt b/ksp-processors/src/main/kotlin/kordenum/KordEnumGeneration.kt new file mode 100644 index 000000000000..5ee7a5317579 --- /dev/null +++ b/ksp-processors/src/main/kotlin/kordenum/KordEnumGeneration.kt @@ -0,0 +1,300 @@ +package dev.kord.ksp.kordenum + +import com.google.devtools.ksp.symbol.KSFile +import com.squareup.kotlinpoet.* +import com.squareup.kotlinpoet.KModifier.* +import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy +import com.squareup.kotlinpoet.ksp.addOriginatingKSFile +import dev.kord.ksp.* +import dev.kord.ksp.GenerateKordEnum.ValueType +import dev.kord.ksp.GenerateKordEnum.ValueType.INT +import dev.kord.ksp.GenerateKordEnum.ValueType.STRING +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.NONE +import dev.kord.ksp.GenerateKordEnum.ValuesPropertyType.SET +import dev.kord.ksp.kordenum.KordEnum.Entry +import kotlinx.serialization.KSerializer +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlin.DeprecationLevel.* +import kotlin.LazyThreadSafetyMode.PUBLICATION +import com.squareup.kotlinpoet.INT as INT_CLASS_NAME +import com.squareup.kotlinpoet.SET as SET_CLASS_NAME +import com.squareup.kotlinpoet.STRING as STRING_CLASS_NAME + +private val PRIMITIVE_SERIAL_DESCRIPTOR = MemberName("kotlinx.serialization.descriptors", "PrimitiveSerialDescriptor") +private val KORD_EXPERIMENTAL = ClassName("dev.kord.common.annotation", "KordExperimental") +private val K_SERIALIZER = KSerializer::class.asClassName() + +private val Entry.warningSuppressedName + get() = when { + isDeprecated -> "@Suppress(\"${ + when (deprecationLevel) { + WARNING -> "DEPRECATION" + ERROR, HIDDEN -> "DEPRECATION_ERROR" + } + }\")·$name" + else -> name + } + +private fun ValueType.toClassName() = when (this) { + INT -> INT_CLASS_NAME + STRING -> STRING_CLASS_NAME +} + +private fun ValueType.toEncodingPostfix() = when (this) { + INT -> "Int" + STRING -> "String" +} + +private fun ValueType.toFormat() = when (this) { + INT -> "%L" + STRING -> "%S" +} + +private fun ValueType.toPrimitiveKind() = when (this) { + INT -> PrimitiveKind.INT::class + STRING -> PrimitiveKind.STRING::class +} + +private fun ValuesPropertyType.toClassName() = when (this) { + NONE -> error("did not expect $this") + SET -> SET_CLASS_NAME +} + +private fun ValuesPropertyType.toFromListConversion() = when (this) { + NONE -> error("did not expect $this") + SET -> ".toSet()" +} + +internal fun KordEnum.generateFileSpec(originatingFile: KSFile): FileSpec { + + val packageName = originatingFile.packageName.asString() + val enumName = ClassName(packageName, name) + val valueTypeName = valueType.toClassName() + val encodingPostfix = valueType.toEncodingPostfix() + val valueFormat = valueType.toFormat() + + val relevantEntriesForSerializerAndCompanion = run { + + // don't keep deprecated entries with a non-deprecated replacement + val nonDeprecatedValues = entries.map { it.value }.toSet() + + entries + .plus(deprecatedEntries.filter { it.value !in nonDeprecatedValues }) + .sortedWith { e1, e2 -> + @Suppress("UNCHECKED_CAST") // values are of same type + (e1.value as Comparable>).compareTo(e2.value) + } + } + + // TODO remove eventually (always use "Serializer" then) + val internalSerializerName = if (deprecatedSerializerName == "Serializer") "NewSerializer" else "Serializer" + + return FileSpec(packageName, fileName = name) { + indent(" ") + addFileComment("THIS FILE IS AUTO-GENERATED BY KordEnumProcessor.kt, DO NOT EDIT!") + + @OptIn(DelicateKotlinPoetApi::class) // `AnnotationSpec.get` is ok for `Suppress` + addAnnotation( + Suppress( + "RedundantVisibilityModifier", + "IncorrectFormatting", + "ReplaceArrayOfWithLiteral", + "SpellCheckingInspection", + "GrazieInspection", + ) + ) + + addClass(enumName) { + + // for ksp incremental processing + addOriginatingKSFile(originatingFile) + + kDoc?.let { addKdoc(it) } + addAnnotation { + addMember("with·=·%T.$internalSerializerName::class", enumName) + } + addModifiers(PUBLIC, SEALED) + primaryConstructor { + addParameter(valueName, valueTypeName) + } + addProperty(valueName, valueTypeName, PUBLIC) { + addKdoc("The raw $valueName used by Discord.") + initializer(valueName) + } + + addFunction("equals") { + addModifiers(FINAL, OVERRIDE) + returns() + addParameter("other") + addStatement("return this·===·other || (other·is·%T·&&·this.$valueName·==·other.$valueName)", enumName) + } + + addFunction("hashCode") { + addModifiers(FINAL, OVERRIDE) + returns() + addStatement("return $valueName.hashCode()") + } + + addFunction("toString") { + addModifiers(FINAL, OVERRIDE) + returns() + addStatement("return \"%T.\${this::class.simpleName}($valueName=\$$valueName)\"", enumName) + } + + + addClass("Unknown") { + addKdoc( + "An unknown [%1T].\n\nThis is used as a fallback for [%1T]s that haven't been added to Kord yet.", + enumName, + ) + addModifiers(PUBLIC) + primaryConstructor { + addParameter(valueName, valueTypeName) + } + superclass(enumName) + addSuperclassConstructorParameter(valueName) + } + + + fun TypeSpec.Builder.entry(entry: Entry) { + entry.kDoc?.let { addKdoc(it) } + if (entry.isKordExperimental) addAnnotation(KORD_EXPERIMENTAL) + addModifiers(PUBLIC) + superclass(enumName) + addSuperclassConstructorParameter(valueFormat, entry.value) + } + + for (entry in entries) { + addObject(entry.name) { + entry(entry) + } + } + + for (entry in deprecatedEntries) { + addObject(entry.name) { + entry(entry) + @OptIn(DelicateKotlinPoetApi::class) // `AnnotationSpec.get` is ok for `Deprecated` + addAnnotation(Deprecated(entry.deprecationMessage, entry.replaceWith, entry.deprecationLevel)) + } + } + + + addObject(internalSerializerName) { + addModifiers(INTERNAL) + addSuperinterface(K_SERIALIZER.parameterizedBy(enumName)) + + addProperty("descriptor", OVERRIDE) { + initializer( + "%M(%S, %T)", + PRIMITIVE_SERIAL_DESCRIPTOR, + enumName.canonicalName, + valueType.toPrimitiveKind(), + ) + } + + addFunction("serialize") { + addModifiers(OVERRIDE) + addParameter("encoder") + addParameter("value", enumName) + addStatement("return encoder.encode$encodingPostfix(value.$valueName)") + } + + addFunction("deserialize") { + addModifiers(OVERRIDE) + addParameter("decoder") + withControlFlow("return when·(val·$valueName·=·decoder.decode$encodingPostfix())") { + for (entry in relevantEntriesForSerializerAndCompanion) { + addStatement("$valueFormat·->·${entry.warningSuppressedName}", entry.value) + } + addStatement("else·->·Unknown($valueName)") + } + } + } + + + // TODO bump deprecation level and remove eventually + @OptIn(DelicateKotlinPoetApi::class) + if (deprecatedSerializerName != null) { + val name = this@generateFileSpec.name + val deprecatedAnnotation = Deprecated( + "Use '$name.serializer()' instead.", + ReplaceWith("$name.serializer()", "$packageName.$name"), + level = WARNING, + ) + val kSerializer = K_SERIALIZER.parameterizedBy(enumName) + + addObject(deprecatedSerializerName) { + addAnnotation(deprecatedAnnotation) + addModifiers(PUBLIC) + addSuperinterface(kSerializer, delegate = CodeBlock.of(internalSerializerName)) + + addFunction("serializer") { + addAnnotation(deprecatedAnnotation) + addModifiers(PUBLIC) + returns(kSerializer) + addStatement("return this") + } + } + } + + + addCompanionObject { + addModifiers(PUBLIC) + + addProperty("entries", LIST.parameterizedBy(enumName), PUBLIC) { + addKdoc("A [List] of all known [%T]s.", enumName) + delegate { + withControlFlow("lazy(mode·=·%M)", PUBLICATION.asMemberName()) { + addStatement("listOf(") + withIndent { + for (entry in relevantEntriesForSerializerAndCompanion) { + addStatement("${entry.warningSuppressedName},") + } + } + addStatement(")") + } + } + } + + // TODO bump deprecation level and remove eventually + if (valuesPropertyName != null) { + addProperty( + valuesPropertyName, + valuesPropertyType.toClassName().parameterizedBy(enumName), + PUBLIC, + ) { + @OptIn(DelicateKotlinPoetApi::class) // `AnnotationSpec.get` is ok for `Deprecated` + addAnnotation( + Deprecated( + "Renamed to 'entries'.", + ReplaceWith("this.entries", imports = emptyArray()), + level = WARNING, + ) + ) + getter { + addStatement("return entries${valuesPropertyType.toFromListConversion()}") + } + } + } + + // TODO remove eventually + if (deprecatedSerializerName != null) { + val deprecatedSerializer = enumName.nestedClass(deprecatedSerializerName) + + @OptIn(DelicateKotlinPoetApi::class) + addProperty(deprecatedSerializerName, deprecatedSerializer, PUBLIC) { + addAnnotation(Suppress("DEPRECATION")) + addAnnotation(Deprecated("Binary compatibility", level = HIDDEN)) + addAnnotation(JvmField()) + initializer("%T", deprecatedSerializer) + } + } + } + } + } +} diff --git a/ksp-processors/src/main/kotlin/kordenum/KordEnumProcessor.kt b/ksp-processors/src/main/kotlin/kordenum/KordEnumProcessor.kt new file mode 100644 index 000000000000..a5c5f4a8489a --- /dev/null +++ b/ksp-processors/src/main/kotlin/kordenum/KordEnumProcessor.kt @@ -0,0 +1,60 @@ +package dev.kord.ksp.kordenum + +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.KSAnnotated +import com.google.devtools.ksp.symbol.KSFile +import com.squareup.kotlinpoet.ksp.writeTo +import dev.kord.ksp.GenerateKordEnum +import dev.kord.ksp.getSymbolsWithAnnotation +import dev.kord.ksp.isOfType + +/** [SymbolProcessorProvider] for [KordEnumProcessor]. */ +class KordEnumProcessorProvider : SymbolProcessorProvider { + override fun create(environment: SymbolProcessorEnvironment) = + KordEnumProcessor(environment.codeGenerator, environment.logger) +} + +/** [SymbolProcessor] for [GenerateKordEnum] annotation. */ +class KordEnumProcessor(private val codeGenerator: CodeGenerator, private val logger: KSPLogger) : SymbolProcessor { + + override fun finish() { + logger.info("KordEnumProcessor received finish signal") + } + + override fun onError() { + logger.info("KordEnumProcessor received error signal") + } + + override fun process(resolver: Resolver): List { + logger.info("KordEnumProcessor got called, resolving annotations...") + + resolver + .getSymbolsWithAnnotation() + .onEach { if (it !is KSFile) logger.warn("found annotation on wrong symbol", symbol = it) } + .filterIsInstance() + .forEach(::processFile) + + logger.info("KordEnumProcessor finished processing annotations") + + return emptyList() // we never have to defer any symbols + } + + private fun processFile(file: KSFile) { + file.annotations + .filter { it.isOfType() } + .onEach { logger.info("found annotation", symbol = it) } + .mapNotNull { it.toKordEnumOrNull(logger) } + .forEach { generateKordEnum(it, originatingFile = file) } + } + + private fun generateKordEnum(kordEnum: KordEnum, originatingFile: KSFile) { + logger.info("generating ${kordEnum.name}...") + + val kordEnumFileSpec = kordEnum.generateFileSpec(originatingFile) + + // this output is isolating, see https://kotlinlang.org/docs/ksp-incremental.html#aggregating-vs-isolating + kordEnumFileSpec.writeTo(codeGenerator, aggregating = false) + + logger.info("finished generating ${kordEnum.name}") + } +} diff --git a/ksp-processors/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/ksp-processors/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 000000000000..29c136e0b63e --- /dev/null +++ b/ksp-processors/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1 @@ +dev.kord.ksp.kordenum.KordEnumProcessorProvider diff --git a/settings.gradle.kts b/settings.gradle.kts index a5d705e12a22..61dc530d9ffa 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,6 +21,8 @@ include("rest") include("core") include("voice") include("bom") +include("ksp-annotations") +include("ksp-processors") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") @@ -32,6 +34,7 @@ dependencyResolutionManagement { cache() common() tests() + kspProcessors() } } } @@ -97,3 +100,13 @@ fun VersionCatalogBuilder.tests() { ) ) } + +fun VersionCatalogBuilder.kspProcessors() { + library("ksp-api", "com.google.devtools.ksp", "symbol-processing-api").version("1.7.10-1.0.6") + + val kotlinpoet = version("kotlinpoet", "1.12.0") + library("kotlinpoet", "com.squareup", "kotlinpoet").versionRef(kotlinpoet) + library("kotlinpoet-ksp", "com.squareup", "kotlinpoet-ksp").versionRef(kotlinpoet) + + bundle("ksp-processors", listOf("ksp-api", "kotlinpoet", "kotlinpoet-ksp")) +}