diff --git a/common/api/common.api b/common/api/common.api index dfab18a467e2..40f75edaa0f7 100644 --- a/common/api/common.api +++ b/common/api/common.api @@ -884,6 +884,22 @@ public final class dev/kord/common/entity/AuditLogEvent$ApplicationCommandPermis public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$ApplicationCommandPermissionUpdate; } +public final class dev/kord/common/entity/AuditLogEvent$AutoModerationBlockMessage : dev/kord/common/entity/AuditLogEvent { + public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationBlockMessage; +} + +public final class dev/kord/common/entity/AuditLogEvent$AutoModerationRuleCreate : dev/kord/common/entity/AuditLogEvent { + public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationRuleCreate; +} + +public final class dev/kord/common/entity/AuditLogEvent$AutoModerationRuleDelete : dev/kord/common/entity/AuditLogEvent { + public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationRuleDelete; +} + +public final class dev/kord/common/entity/AuditLogEvent$AutoModerationRuleUpdate : dev/kord/common/entity/AuditLogEvent { + public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationRuleUpdate; +} + public final class dev/kord/common/entity/AuditLogEvent$BotAdd : dev/kord/common/entity/AuditLogEvent { public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$BotAdd; } @@ -1080,6 +1096,114 @@ public final class dev/kord/common/entity/AuditLogEvent$WebhookUpdate : dev/kord public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$WebhookUpdate; } +public abstract class dev/kord/common/entity/AutoModerationActionType { + public static final field Companion Ldev/kord/common/entity/AutoModerationActionType$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 class dev/kord/common/entity/AutoModerationActionType$BlockMessage : dev/kord/common/entity/AutoModerationActionType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationActionType$BlockMessage; +} + +public final class dev/kord/common/entity/AutoModerationActionType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/AutoModerationActionType$SendAlertMessage : dev/kord/common/entity/AutoModerationActionType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationActionType$SendAlertMessage; +} + +public final class dev/kord/common/entity/AutoModerationActionType$Timeout : dev/kord/common/entity/AutoModerationActionType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationActionType$Timeout; +} + +public final class dev/kord/common/entity/AutoModerationActionType$Unknown : dev/kord/common/entity/AutoModerationActionType { + public fun (I)V +} + +public abstract class dev/kord/common/entity/AutoModerationRuleEventType { + public static final field Companion Ldev/kord/common/entity/AutoModerationRuleEventType$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 class dev/kord/common/entity/AutoModerationRuleEventType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/AutoModerationRuleEventType$MessageSend : dev/kord/common/entity/AutoModerationRuleEventType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleEventType$MessageSend; +} + +public final class dev/kord/common/entity/AutoModerationRuleEventType$Unknown : dev/kord/common/entity/AutoModerationRuleEventType { + public fun (I)V +} + +public abstract class dev/kord/common/entity/AutoModerationRuleKeywordPresetType { + public static final field Companion Ldev/kord/common/entity/AutoModerationRuleKeywordPresetType$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 class dev/kord/common/entity/AutoModerationRuleKeywordPresetType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/AutoModerationRuleKeywordPresetType$Profanity : dev/kord/common/entity/AutoModerationRuleKeywordPresetType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleKeywordPresetType$Profanity; +} + +public final class dev/kord/common/entity/AutoModerationRuleKeywordPresetType$SexualContent : dev/kord/common/entity/AutoModerationRuleKeywordPresetType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleKeywordPresetType$SexualContent; +} + +public final class dev/kord/common/entity/AutoModerationRuleKeywordPresetType$Slurs : dev/kord/common/entity/AutoModerationRuleKeywordPresetType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleKeywordPresetType$Slurs; +} + +public final class dev/kord/common/entity/AutoModerationRuleKeywordPresetType$Unknown : dev/kord/common/entity/AutoModerationRuleKeywordPresetType { + public fun (I)V +} + +public abstract class dev/kord/common/entity/AutoModerationRuleTriggerType { + public static final field Companion Ldev/kord/common/entity/AutoModerationRuleTriggerType$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 class dev/kord/common/entity/AutoModerationRuleTriggerType$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/AutoModerationRuleTriggerType$Keyword : dev/kord/common/entity/AutoModerationRuleTriggerType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; +} + +public final class dev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset : dev/kord/common/entity/AutoModerationRuleTriggerType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; +} + +public final class dev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam : dev/kord/common/entity/AutoModerationRuleTriggerType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; +} + +public final class dev/kord/common/entity/AutoModerationRuleTriggerType$Spam : dev/kord/common/entity/AutoModerationRuleTriggerType { + public static final field INSTANCE Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; +} + +public final class dev/kord/common/entity/AutoModerationRuleTriggerType$Unknown : dev/kord/common/entity/AutoModerationRuleTriggerType { + public fun (I)V +} + public abstract interface class dev/kord/common/entity/BaseDiscordApplication { public abstract fun getCoverImage ()Ldev/kord/common/entity/optional/Optional; public abstract fun getCustomInstallUrl ()Ldev/kord/common/entity/optional/Optional; @@ -2094,17 +2218,19 @@ public final class dev/kord/common/entity/DiscordAttachment$Companion { public final class dev/kord/common/entity/DiscordAuditLog { public static final field Companion Ldev/kord/common/entity/DiscordAuditLog$Companion; - public synthetic fun (ILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V - public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V + public synthetic fun (ILjava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V public final fun component1 ()Ljava/util/List; public final fun component2 ()Ljava/util/List; public final fun component3 ()Ljava/util/List; public final fun component4 ()Ljava/util/List; public final fun component5 ()Ljava/util/List; - public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ldev/kord/common/entity/DiscordAuditLog; - public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAuditLog;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAuditLog; + public final fun component6 ()Ljava/util/List; + public final fun copy (Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ldev/kord/common/entity/DiscordAuditLog; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAuditLog;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAuditLog; public fun equals (Ljava/lang/Object;)Z public final fun getAuditLogEntries ()Ljava/util/List; + public final fun getAutoModerationRules ()Ljava/util/List; public final fun getIntegrations ()Ljava/util/List; public final fun getThreads ()Ljava/util/List; public final fun getUsers ()Ljava/util/List; @@ -2249,6 +2375,161 @@ public final class dev/kord/common/entity/DiscordAutoComplete$Companion { public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; } +public final class dev/kord/common/entity/DiscordAutoModerationAction { + public static final field Companion Ldev/kord/common/entity/DiscordAutoModerationAction$Companion; + public synthetic fun (ILdev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/AutoModerationActionType; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/common/entity/DiscordAutoModerationAction; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAutoModerationAction; + public fun equals (Ljava/lang/Object;)Z + public final fun getMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/common/entity/DiscordAutoModerationAction;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/common/entity/DiscordAutoModerationAction$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/common/entity/DiscordAutoModerationAction$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/DiscordAutoModerationAction; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/common/entity/DiscordAutoModerationAction;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationAction$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationActionMetadata { + public static final field Companion Ldev/kord/common/entity/DiscordAutoModerationActionMetadata$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/common/entity/DiscordAutoModerationActionMetadata; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAutoModerationActionMetadata;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAutoModerationActionMetadata; + public fun equals (Ljava/lang/Object;)Z + public final fun getChannelId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getDurationSeconds ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/common/entity/DiscordAutoModerationActionMetadata;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/common/entity/DiscordAutoModerationActionMetadata$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/common/entity/DiscordAutoModerationActionMetadata$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/DiscordAutoModerationActionMetadata; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/common/entity/DiscordAutoModerationActionMetadata;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationActionMetadata$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationRule { + public static final field Companion Ldev/kord/common/entity/DiscordAutoModerationRule$Companion; + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Ljava/util/List;ZLjava/util/List;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Ljava/util/List;ZLjava/util/List;Ljava/util/List;)V + public final fun component1 ()Ldev/kord/common/entity/Snowflake; + public final fun component10 ()Ljava/util/List; + public final fun component11 ()Ljava/util/List; + public final fun component2 ()Ldev/kord/common/entity/Snowflake; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ldev/kord/common/entity/Snowflake; + public final fun component5 ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun component6 ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun component7 ()Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata; + public final fun component8 ()Ljava/util/List; + public final fun component9 ()Z + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Ljava/util/List;ZLjava/util/List;Ljava/util/List;)Ldev/kord/common/entity/DiscordAutoModerationRule; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAutoModerationRule;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Ljava/util/List;ZLjava/util/List;Ljava/util/List;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAutoModerationRule; + public fun equals (Ljava/lang/Object;)Z + public final fun getActions ()Ljava/util/List; + public final fun getCreatorId ()Ldev/kord/common/entity/Snowflake; + public final fun getEnabled ()Z + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannels ()Ljava/util/List; + public final fun getExemptRoles ()Ljava/util/List; + public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public final fun getId ()Ldev/kord/common/entity/Snowflake; + public final fun getName ()Ljava/lang/String; + public final fun getTriggerMetadata ()Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata; + public final fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/common/entity/DiscordAutoModerationRule;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/common/entity/DiscordAutoModerationRule$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/common/entity/DiscordAutoModerationRule$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/DiscordAutoModerationRule; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/common/entity/DiscordAutoModerationRule;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationRule$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata { + public static final field Companion Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;)V + public synthetic fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/Optional; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun component3 ()Ldev/kord/common/entity/optional/Optional; + public final fun component4 ()Ldev/kord/common/entity/optional/OptionalInt; + public final fun copy (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;)Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata; + public static synthetic fun copy$default (Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;ILjava/lang/Object;)Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata; + public fun equals (Ljava/lang/Object;)Z + public final fun getAllowList ()Ldev/kord/common/entity/optional/Optional; + public final fun getKeywordFilter ()Ldev/kord/common/entity/optional/Optional; + public final fun getMentionTotalLimit ()Ldev/kord/common/entity/optional/OptionalInt; + public final fun getPresets ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/common/entity/DiscordBotActivity { public static final field Companion Ldev/kord/common/entity/DiscordBotActivity$Companion; public synthetic fun (ILjava/lang/String;Ldev/kord/common/entity/ActivityType;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V @@ -5735,8 +6016,10 @@ public final class dev/kord/common/entity/ExplicitContentFilter$Unknown : dev/ko public abstract class dev/kord/common/entity/GuildFeature { public static final field Companion Ldev/kord/common/entity/GuildFeature$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 fun toString ()Ljava/lang/String; + public final fun hashCode ()I + public final fun toString ()Ljava/lang/String; } public final class dev/kord/common/entity/GuildFeature$AnimatedBanner : dev/kord/common/entity/GuildFeature { @@ -5747,6 +6030,10 @@ public final class dev/kord/common/entity/GuildFeature$AnimatedIcon : dev/kord/c public static final field INSTANCE Ldev/kord/common/entity/GuildFeature$AnimatedIcon; } +public final class dev/kord/common/entity/GuildFeature$AutoModeration : dev/kord/common/entity/GuildFeature { + public static final field INSTANCE Ldev/kord/common/entity/GuildFeature$AutoModeration; +} + public final class dev/kord/common/entity/GuildFeature$Banner : dev/kord/common/entity/GuildFeature { public static final field INSTANCE Ldev/kord/common/entity/GuildFeature$Banner; } @@ -6465,9 +6752,13 @@ public final class dev/kord/common/entity/MessageStickerType$Unknown : dev/kord/ public abstract class dev/kord/common/entity/MessageType { public static final field Companion Ldev/kord/common/entity/MessageType$Companion; public synthetic fun (ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun equals (Ljava/lang/Object;)Z + public final fun equals (Ljava/lang/Object;)Z public final fun getCode ()I - public fun hashCode ()I + public final fun hashCode ()I +} + +public final class dev/kord/common/entity/MessageType$AutoModerationAction : dev/kord/common/entity/MessageType { + public static final field INSTANCE Ldev/kord/common/entity/MessageType$AutoModerationAction; } public final class dev/kord/common/entity/MessageType$Call : dev/kord/common/entity/MessageType { diff --git a/common/src/main/kotlin/entity/AuditLog.kt b/common/src/main/kotlin/entity/AuditLog.kt index 71318721f7fd..83c755210705 100644 --- a/common/src/main/kotlin/entity/AuditLog.kt +++ b/common/src/main/kotlin/entity/AuditLog.kt @@ -27,6 +27,8 @@ public data class DiscordAuditLog( val users: List, @SerialName("audit_log_entries") val auditLogEntries: List, + @SerialName("auto_moderation_rules") + val autoModerationRules: List, val integrations: List, val threads: List ) @@ -486,6 +488,10 @@ public sealed class AuditLogEvent(public val value: Int) { 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 { @@ -545,6 +551,10 @@ public sealed class AuditLogEvent(public val value: Int) { 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 new file mode 100644 index 000000000000..a8a56ece30f4 --- /dev/null +++ b/common/src/main/kotlin/entity/AutoModeration.kt @@ -0,0 +1,232 @@ +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 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( + val id: Snowflake, + @SerialName("guild_id") + val guildId: Snowflake, + val name: String, + @SerialName("creator_id") + val creatorId: Snowflake, + @SerialName("event_type") + val eventType: AutoModerationRuleEventType, + @SerialName("trigger_type") + val triggerType: AutoModerationRuleTriggerType, + @SerialName("trigger_metadata") + val triggerMetadata: DiscordAutoModerationRuleTriggerMetadata, + val actions: List, + val enabled: Boolean, + @SerialName("exempt_roles") + val exemptRoles: List, + @SerialName("exempt_channels") + 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") + val keywordFilter: Optional> = Optional.Missing(), + val presets: Optional> = Optional.Missing(), + @SerialName("allow_list") + val allowList: Optional> = Optional.Missing(), + @SerialName("mention_total_limit") + 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") + public val channelId: OptionalSnowflake = OptionalSnowflake.Missing, + @SerialName("duration_seconds") + public val durationSeconds: Optional = Optional.Missing(), +) diff --git a/common/src/main/kotlin/entity/DiscordGuild.kt b/common/src/main/kotlin/entity/DiscordGuild.kt index dec49a83fbab..dc7b3e90ec4f 100644 --- a/common/src/main/kotlin/entity/DiscordGuild.kt +++ b/common/src/main/kotlin/entity/DiscordGuild.kt @@ -183,13 +183,22 @@ public data class DiscordPartialGuild( @Serializable(with = GuildFeature.Serializer::class) public sealed class GuildFeature(public val value: String) { - override fun toString(): String = "GuildFeature(value=$value)" + 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") @@ -258,12 +267,14 @@ public sealed class GuildFeature(public val value: String) { /** 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 diff --git a/common/src/main/kotlin/entity/DiscordMessage.kt b/common/src/main/kotlin/entity/DiscordMessage.kt index a3d706e76e64..c2488e89e180 100644 --- a/common/src/main/kotlin/entity/DiscordMessage.kt +++ b/common/src/main/kotlin/entity/DiscordMessage.kt @@ -775,10 +775,10 @@ public data class AllRemovedMessageReactions( @Serializable(with = MessageType.MessageTypeSerializer::class) public sealed class MessageType(public val code: Int) { - override fun equals(other: Any?): Boolean = + final override fun equals(other: Any?): Boolean = this === other || (other is MessageType && this.code == other.code) - override fun hashCode(): Int = code + final override fun hashCode(): Int = code /** The default code for unknown values. */ @@ -828,6 +828,8 @@ public sealed class MessageType(public val code: Int) { public object ThreadStarterMessage : MessageType(21) public object GuildInviteReminder : MessageType(22) public object ContextMenuCommand : MessageType(23) + public object AutoModerationAction : MessageType(24) + internal object MessageTypeSerializer : KSerializer { @@ -870,6 +872,7 @@ public sealed class MessageType(public val code: Int) { ThreadStarterMessage, GuildInviteReminder, ContextMenuCommand, + AutoModerationAction, ) } } diff --git a/core/api/core.api b/core/api/core.api index b29ca493e35b..eecc4838f367 100644 --- a/core/api/core.api +++ b/core/api/core.api @@ -107,6 +107,7 @@ public abstract interface class dev/kord/core/KordObject { public final class dev/kord/core/Unsafe { public fun (Ldev/kord/core/Kord;)V public final fun applicationCommandInteraction (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/interaction/ApplicationCommandInteractionBehavior; + public final fun autoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; public final fun categorizableChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/CategorizableChannelBehavior; public final fun channel (Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/ChannelBehavior; public final fun componentInteraction (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/interaction/ComponentInteractionBehavior; @@ -122,13 +123,17 @@ public final class dev/kord/core/Unsafe { public final fun guildEmoji (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/core/Kord;)Ldev/kord/core/behavior/GuildEmojiBehavior; public final fun guildMessageChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/GuildMessageChannelBehavior; public final fun guildScheduledEvent (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/GuildScheduledEventBehavior; + public final fun keywordAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior; + public final fun keywordPresetAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior; public final fun member (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/MemberBehavior; + public final fun mentionSpamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior; public final fun message (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/MessageBehavior; public final fun messageChannel (Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/MessageChannelBehavior; public final fun newsChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/NewsChannelBehavior; public final fun privateThreadParent (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/threads/PrivateThreadParentChannelBehavior; public final fun publicThreadParent (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/threads/ThreadParentChannelBehavior; public final fun role (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/RoleBehavior; + public final fun spamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior; public final fun stageInstance (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/StageInstanceBehavior; public final fun storeChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/StoreChannelBehavior; public final fun textChannel (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ldev/kord/core/behavior/channel/TextChannelBehavior; @@ -238,6 +243,9 @@ public abstract interface class dev/kord/core/behavior/GuildBehavior : dev/kord/ public abstract fun getApplicationCommand (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getApplicationCommandOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getApplicationCommands (Ljava/lang/Boolean;)Lkotlinx/coroutines/flow/Flow; + public abstract fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getAutoModerationRules ()Lkotlinx/coroutines/flow/Flow; public abstract fun getBan (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getBanOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getBans ()Lkotlinx/coroutines/flow/Flow; @@ -308,6 +316,9 @@ public final class dev/kord/core/behavior/GuildBehavior$DefaultImpls { public static fun getApplicationCommandOrNull (Ldev/kord/core/behavior/GuildBehavior;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun getApplicationCommands (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/Boolean;)Lkotlinx/coroutines/flow/Flow; public static synthetic fun getApplicationCommands$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/Boolean;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; + public static fun getAutoModerationRule (Ldev/kord/core/behavior/GuildBehavior;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getAutoModerationRuleOrNull (Ldev/kord/core/behavior/GuildBehavior;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getAutoModerationRules (Ldev/kord/core/behavior/GuildBehavior;)Lkotlinx/coroutines/flow/Flow; public static fun getBan (Ldev/kord/core/behavior/GuildBehavior;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun getBanOrNull (Ldev/kord/core/behavior/GuildBehavior;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun getBans (Ldev/kord/core/behavior/GuildBehavior;)Lkotlinx/coroutines/flow/Flow; @@ -382,6 +393,12 @@ public final class dev/kord/core/behavior/GuildBehaviorKt { public static final fun createEmoji (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/rest/Image;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun createEmoji (Ldev/kord/core/behavior/GuildBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun createEmoji$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/rest/Image;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun createKeywordAutoModerationRule (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun createKeywordAutoModerationRule$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun createKeywordPresetAutoModerationRule (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun createKeywordPresetAutoModerationRule$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun createMentionSpamAutoModerationRule (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun createMentionSpamAutoModerationRule$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static final fun createMessageCommand (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun createMessageCommand$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static final fun createNewsChannel (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -390,6 +407,8 @@ public final class dev/kord/core/behavior/GuildBehaviorKt { public static final fun createRole (Ldev/kord/core/behavior/GuildBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun createRole$default (Ldev/kord/core/behavior/GuildBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static final fun createScheduledEvent (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/GuildScheduledEventPrivacyLevel;Lkotlinx/datetime/Instant;Ldev/kord/common/entity/ScheduledEntityType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun createSpamAutoModerationRule (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun createSpamAutoModerationRule$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public static final fun createTextChannel (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static final fun createTextChannel (Ldev/kord/core/behavior/GuildBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun createTextChannel$default (Ldev/kord/core/behavior/GuildBehavior;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; @@ -837,6 +856,127 @@ public final class dev/kord/core/behavior/WebhookBehaviorKt { public static synthetic fun executeIgnored$default (Ldev/kord/core/behavior/WebhookBehavior;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; } +public abstract interface class dev/kord/core/behavior/automoderation/AutoModerationRuleBehavior : dev/kord/core/entity/KordEntity, dev/kord/core/entity/Strategizable { + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun equals (Ljava/lang/Object;)Z + public abstract fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public abstract fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public abstract fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public abstract fun hashCode ()I + public abstract fun toString ()Ljava/lang/String; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/AutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun delete$default (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public final class dev/kord/core/behavior/automoderation/AutoModerationRuleBehaviorKt { + public static final fun edit (Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun edit (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun edit (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun edit (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun edit (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract interface class dev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior : dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior { + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getTriggerType (Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; +} + +public abstract interface class dev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior : dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior { + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getTriggerType (Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; +} + +public abstract interface class dev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior : dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior { + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getTriggerType (Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; +} + +public abstract interface class dev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior : dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior { + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getTriggerType (Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; +} + +public abstract interface class dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior : dev/kord/core/behavior/automoderation/AutoModerationRuleBehavior { + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; +} + +public final class dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior$DefaultImpls { + public static fun asAutoModerationRule (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun asAutoModerationRuleOrNull (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun compareTo (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Ldev/kord/core/entity/Entity;)I + public static fun delete (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + public abstract interface class dev/kord/core/behavior/channel/BaseVoiceChannelBehavior : dev/kord/core/behavior/channel/CategorizableChannelBehavior { public abstract fun getVoiceStates ()Lkotlinx/coroutines/flow/Flow; } @@ -2065,6 +2205,7 @@ public final class dev/kord/core/cache/DataCacheView : dev/kord/cache/api/DataCa public final class dev/kord/core/cache/KordCacheBuilder { public fun ()V + public final fun autoModerationRules (Lkotlin/jvm/functions/Function2;)V public final fun build ()Ldev/kord/cache/api/DataCache; public final fun channels (Lkotlin/jvm/functions/Function2;)V public final fun disableAll ()V @@ -2588,6 +2729,166 @@ public final class dev/kord/core/cache/data/AttachmentData$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/kord/core/cache/data/AutoModerationActionData { + public static final field Companion Ldev/kord/core/cache/data/AutoModerationActionData$Companion; + public synthetic fun (ILdev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/AutoModerationActionType; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/core/cache/data/AutoModerationActionData; + public static synthetic fun copy$default (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/AutoModerationActionType;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/core/cache/data/AutoModerationActionData; + public fun equals (Ljava/lang/Object;)Z + public final fun getMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/core/cache/data/AutoModerationActionData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/core/cache/data/AutoModerationActionData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/core/cache/data/AutoModerationActionData$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/core/cache/data/AutoModerationActionData; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/core/cache/data/AutoModerationActionData;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationActionData$Companion { + public final fun from (Ldev/kord/common/entity/DiscordAutoModerationAction;)Ldev/kord/core/cache/data/AutoModerationActionData; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationActionMetadataData { + public static final field Companion Ldev/kord/core/cache/data/AutoModerationActionMetadataData$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/core/cache/data/AutoModerationActionMetadataData; + public static synthetic fun copy$default (Ldev/kord/core/cache/data/AutoModerationActionMetadataData;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/core/cache/data/AutoModerationActionMetadataData; + public fun equals (Ljava/lang/Object;)Z + public final fun getChannelId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getDurationSeconds ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/core/cache/data/AutoModerationActionMetadataData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/core/cache/data/AutoModerationActionMetadataData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/core/cache/data/AutoModerationActionMetadataData$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/core/cache/data/AutoModerationActionMetadataData; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/core/cache/data/AutoModerationActionMetadataData;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationActionMetadataData$Companion { + public final fun from (Ldev/kord/common/entity/DiscordAutoModerationActionMetadata;)Ldev/kord/core/cache/data/AutoModerationActionMetadataData; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationRuleData { + public static final field Companion Ldev/kord/core/cache/data/AutoModerationRuleData$Companion; + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Ljava/util/List;ZLjava/util/List;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Ljava/util/List;ZLjava/util/List;Ljava/util/List;)V + public final fun component1 ()Ldev/kord/common/entity/Snowflake; + public final fun component10 ()Ljava/util/List; + public final fun component11 ()Ljava/util/List; + public final fun component2 ()Ldev/kord/common/entity/Snowflake; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ldev/kord/common/entity/Snowflake; + public final fun component5 ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun component6 ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun component7 ()Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public final fun component8 ()Ljava/util/List; + public final fun component9 ()Z + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Ljava/util/List;ZLjava/util/List;Ljava/util/List;)Ldev/kord/core/cache/data/AutoModerationRuleData; + public static synthetic fun copy$default (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Ljava/util/List;ZLjava/util/List;Ljava/util/List;ILjava/lang/Object;)Ldev/kord/core/cache/data/AutoModerationRuleData; + public fun equals (Ljava/lang/Object;)Z + public final fun getActions ()Ljava/util/List; + public final fun getCreatorId ()Ldev/kord/common/entity/Snowflake; + public final fun getEnabled ()Z + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannels ()Ljava/util/List; + public final fun getExemptRoles ()Ljava/util/List; + public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public final fun getId ()Ldev/kord/common/entity/Snowflake; + public final fun getName ()Ljava/lang/String; + public final fun getTriggerMetadata ()Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public final fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/core/cache/data/AutoModerationRuleData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/core/cache/data/AutoModerationRuleData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/core/cache/data/AutoModerationRuleData$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/core/cache/data/AutoModerationRuleData; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/core/cache/data/AutoModerationRuleData;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationRuleData$Companion { + public final fun from (Ldev/kord/common/entity/DiscordAutoModerationRule;)Ldev/kord/core/cache/data/AutoModerationRuleData; + public final fun getDescription ()Ldev/kord/cache/api/data/DataDescription; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData { + public static final field Companion Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;)V + public synthetic fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/Optional; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun component3 ()Ldev/kord/common/entity/optional/Optional; + public final fun component4 ()Ldev/kord/common/entity/optional/OptionalInt; + public final fun copy (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;)Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public static synthetic fun copy$default (Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalInt;ILjava/lang/Object;)Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public fun equals (Ljava/lang/Object;)Z + public final fun getAllowList ()Ldev/kord/common/entity/optional/Optional; + public final fun getKeywordFilter ()Ldev/kord/common/entity/optional/Optional; + public final fun getMentionTotalLimit ()Ldev/kord/common/entity/optional/OptionalInt; + public final fun getPresets ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData$Companion { + public final fun from (Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata;)Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/core/cache/data/BanData { public static final field Companion Ldev/kord/core/cache/data/BanData$Companion; public synthetic fun (ILjava/lang/String;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V @@ -5554,6 +5855,7 @@ public final class dev/kord/core/entity/AttachmentKt { public final class dev/kord/core/entity/AuditLog : dev/kord/core/KordObject { public fun (Ldev/kord/common/entity/DiscordAuditLog;Ldev/kord/common/entity/Snowflake;Ldev/kord/core/Kord;)V + public final fun getAutoModerationRules ()Ljava/util/List; public final fun getData ()Ldev/kord/common/entity/DiscordAuditLog; public final fun getEntries ()Ljava/util/List; public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; @@ -5836,6 +6138,9 @@ public final class dev/kord/core/entity/Guild : dev/kord/core/behavior/GuildBeha public final fun getApplicationId ()Ldev/kord/common/entity/Snowflake; public final fun getApproximateMemberCount ()Ljava/lang/Integer; public final fun getApproximatePresenceCount ()Ljava/lang/Integer; + public fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRules ()Lkotlinx/coroutines/flow/Flow; public fun getBan (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getBanOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getBanner (Ldev/kord/rest/Image$Format;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -6398,6 +6703,9 @@ public final class dev/kord/core/entity/PartialGuild : dev/kord/core/behavior/Gu public fun getApplicationCommand (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getApplicationCommandOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getApplicationCommands (Ljava/lang/Boolean;)Lkotlinx/coroutines/flow/Flow; + public fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRules ()Lkotlinx/coroutines/flow/Flow; public fun getBan (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getBanOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getBanner (Ldev/kord/rest/Image$Format;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -7254,6 +7562,157 @@ public final class dev/kord/core/entity/application/UserCommand$DefaultImpls { public static fun getVersion (Ldev/kord/core/entity/application/UserCommand;)Ldev/kord/common/entity/Snowflake; } +public abstract class dev/kord/core/entity/automoderation/AutoModerationAction : dev/kord/core/KordObject { + public synthetic fun (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/core/Kord;Ldev/kord/common/entity/AutoModerationActionType;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getData ()Ldev/kord/core/cache/data/AutoModerationActionData; + public final fun getKord ()Ldev/kord/core/Kord; + public abstract fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public abstract fun toString ()Ljava/lang/String; +} + +public abstract class dev/kord/core/entity/automoderation/AutoModerationRule : dev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior { + public synthetic fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public abstract fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun compareTo (Ldev/kord/core/entity/Entity;)I + public synthetic fun compareTo (Ljava/lang/Object;)I + public fun delete (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun equals (Ljava/lang/Object;)Z + public final fun getActions ()Ljava/util/List; + public final fun getCreator ()Ldev/kord/core/behavior/MemberBehavior; + public final fun getCreatorId ()Ldev/kord/common/entity/Snowflake; + public final fun getData ()Ldev/kord/core/cache/data/AutoModerationRuleData; + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannelIds ()Ljava/util/List; + public final fun getExemptChannels ()Ljava/util/List; + public final fun getExemptRoleIds ()Ljava/util/List; + public final fun getExemptRoles ()Ljava/util/List; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getId ()Ldev/kord/common/entity/Snowflake; + public final fun getKord ()Ldev/kord/core/Kord; + public final fun getName ()Ljava/lang/String; + public final fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public final fun hashCode ()I + public final fun isEnabled ()Z + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/AutoModerationRuleKt { + public static final fun AutoModerationRule (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public static synthetic fun AutoModerationRule$default (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;ILjava/lang/Object;)Ldev/kord/core/entity/automoderation/AutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/BlockMessageAutoModerationAction : dev/kord/core/entity/automoderation/AutoModerationAction { + public fun (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/core/Kord;)V + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$BlockMessage; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/core/entity/automoderation/KeywordAutoModerationRule : dev/kord/core/entity/automoderation/AutoModerationRule, dev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior { + public fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getKeywords ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/KeywordAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/KeywordAutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/KeywordPresetAutoModerationRule : dev/kord/core/entity/automoderation/AutoModerationRule, dev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior { + public fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getAllowedKeywords ()Ljava/util/List; + public final fun getPresets ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/KeywordPresetAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/KeywordPresetAutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/MentionSpamAutoModerationRule : dev/kord/core/entity/automoderation/AutoModerationRule, dev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior { + public fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun getMentionLimit ()I + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/MentionSpamAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/MentionSpamAutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/SendAlertMessageAutoModerationAction : dev/kord/core/entity/automoderation/AutoModerationAction { + public fun (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/core/Kord;)V + public final fun getChannelId ()Ldev/kord/common/entity/Snowflake; + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$SendAlertMessage; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/core/entity/automoderation/SpamAutoModerationRule : dev/kord/core/entity/automoderation/AutoModerationRule, dev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior { + public fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/SpamAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/SpamAutoModerationRule; +} + +public final class dev/kord/core/entity/automoderation/TimeoutAutoModerationAction : dev/kord/core/entity/automoderation/AutoModerationAction { + public fun (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/core/Kord;)V + public final fun getDuration-UwyO8pc ()J + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$Timeout; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/core/entity/automoderation/UnknownAutoModerationAction : dev/kord/core/entity/automoderation/AutoModerationAction { + public fun (Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/core/Kord;)V + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$Unknown; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/core/entity/automoderation/UnknownAutoModerationRule : dev/kord/core/entity/automoderation/AutoModerationRule { + public fun (Ldev/kord/core/cache/data/AutoModerationRuleData;Ldev/kord/core/Kord;Ldev/kord/core/supplier/EntitySupplier;)V + public fun asAutoModerationRule (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun asAutoModerationRuleOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Unknown; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/AutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/automoderation/UnknownAutoModerationRule; +} + public abstract interface class dev/kord/core/entity/channel/CategorizableChannel : dev/kord/core/behavior/channel/CategorizableChannelBehavior, dev/kord/core/entity/channel/TopGuildChannel { public abstract fun getCategory ()Ldev/kord/core/behavior/channel/CategoryBehavior; public abstract fun getCategoryId ()Ldev/kord/common/entity/Snowflake; @@ -10193,10 +10652,9 @@ public final class dev/kord/core/entity/interaction/response/PublicMessageIntera public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/interaction/response/PublicMessageInteractionResponse; } -public abstract interface class dev/kord/core/event/Event { +public abstract interface class dev/kord/core/event/Event : dev/kord/core/KordObject { public abstract fun getCustomContext ()Ljava/lang/Object; public abstract fun getGateway ()Ldev/kord/gateway/Gateway; - public abstract fun getKord ()Ldev/kord/core/Kord; public abstract fun getShard ()I } @@ -10204,6 +10662,192 @@ public final class dev/kord/core/event/Event$DefaultImpls { public static fun getGateway (Ldev/kord/core/event/Event;)Ldev/kord/gateway/Gateway; } +public final class dev/kord/core/event/automoderation/AutoModerationActionExecutionEvent : dev/kord/core/event/automoderation/AutoModerationEvent { + public fun (Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;)V + public synthetic fun (Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getAction ()Ldev/kord/core/entity/automoderation/AutoModerationAction; + public final fun getAlertSystemMessage ()Ldev/kord/core/behavior/MessageBehavior; + public final fun getAlertSystemMessageId ()Ldev/kord/common/entity/Snowflake; + public final fun getChannel ()Ldev/kord/core/behavior/channel/GuildMessageChannelBehavior; + public final fun getChannelId ()Ldev/kord/common/entity/Snowflake; + public final fun getContent ()Ljava/lang/String; + public fun getCustomContext ()Ljava/lang/Object; + public final fun getData ()Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData; + public fun getGateway ()Ldev/kord/gateway/Gateway; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getKord ()Ldev/kord/core/Kord; + public final fun getMatchedContent ()Ljava/lang/String; + public final fun getMatchedKeyword ()Ljava/lang/String; + public final fun getMember ()Ldev/kord/core/behavior/MemberBehavior; + public final fun getMemberId ()Ldev/kord/common/entity/Snowflake; + public final fun getMessage ()Ldev/kord/core/behavior/MessageBehavior; + public final fun getMessageId ()Ldev/kord/common/entity/Snowflake; + public fun getRule ()Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public fun getShard ()I + public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationActionExecutionEvent; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationEvent; +} + +public abstract interface class dev/kord/core/event/automoderation/AutoModerationEvent : dev/kord/core/entity/Strategizable, dev/kord/core/event/Event { + public abstract fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public abstract fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public abstract fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getRule ()Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public abstract fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public abstract fun toString ()Ljava/lang/String; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationEvent; +} + +public final class dev/kord/core/event/automoderation/AutoModerationEvent$DefaultImpls { + public static fun getGateway (Ldev/kord/core/event/automoderation/AutoModerationEvent;)Ldev/kord/gateway/Gateway; + public static fun getGuild (Ldev/kord/core/event/automoderation/AutoModerationEvent;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/event/automoderation/AutoModerationEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildOrNull (Ldev/kord/core/event/automoderation/AutoModerationEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract interface class dev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent : dev/kord/core/event/automoderation/AutoModerationEvent { + public abstract fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public abstract fun getRule ()Ldev/kord/core/entity/automoderation/AutoModerationRule; + public abstract fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public abstract fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent; +} + +public final class dev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent$DefaultImpls { + public static fun getGateway (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;)Ldev/kord/gateway/Gateway; + public static fun getGuild (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;)Ldev/kord/core/behavior/GuildBehavior; + public static fun getGuild (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getGuildId (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;)Ldev/kord/common/entity/Snowflake; + public static fun getGuildOrNull (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getRuleId (Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent;)Ldev/kord/common/entity/Snowflake; +} + +public final class dev/kord/core/event/automoderation/AutoModerationRuleCreateEvent : dev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent { + public fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;)V + public synthetic fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getCustomContext ()Ljava/lang/Object; + public fun getGateway ()Ldev/kord/gateway/Gateway; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getKord ()Ldev/kord/core/Kord; + public synthetic fun getRule ()Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public fun getRule ()Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public fun getShard ()I + public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationEvent; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleCreateEvent; +} + +public final class dev/kord/core/event/automoderation/AutoModerationRuleDeleteEvent : dev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent { + public fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;)V + public synthetic fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getCustomContext ()Ljava/lang/Object; + public fun getGateway ()Ldev/kord/gateway/Gateway; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getKord ()Ldev/kord/core/Kord; + public synthetic fun getRule ()Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public fun getRule ()Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public fun getShard ()I + public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationEvent; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleDeleteEvent; +} + +public final class dev/kord/core/event/automoderation/AutoModerationRuleUpdateEvent : dev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent { + public fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;)V + public synthetic fun (Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/entity/automoderation/AutoModerationRule;Ldev/kord/core/Kord;ILjava/lang/Object;Ldev/kord/core/supplier/EntitySupplier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getCustomContext ()Ljava/lang/Object; + public fun getGateway ()Ldev/kord/gateway/Gateway; + public fun getGuild ()Ldev/kord/core/behavior/GuildBehavior; + public fun getGuild (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public fun getGuildOrNull (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getKord ()Ldev/kord/core/Kord; + public final fun getOld ()Ldev/kord/core/entity/automoderation/AutoModerationRule; + public synthetic fun getRule ()Ldev/kord/core/behavior/automoderation/TypedAutoModerationRuleBehavior; + public fun getRule ()Ldev/kord/core/entity/automoderation/AutoModerationRule; + public fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public fun getShard ()I + public fun getSupplier ()Ldev/kord/core/supplier/EntitySupplier; + public fun toString ()Ljava/lang/String; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/entity/Strategizable; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationEvent; + public synthetic fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleConfigurationEvent; + public fun withStrategy (Ldev/kord/core/supplier/EntitySupplyStrategy;)Ldev/kord/core/event/automoderation/AutoModerationRuleUpdateEvent; +} + +public final class dev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData { + public static final field Companion Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData$Companion; + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/Snowflake; + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component2 ()Ldev/kord/core/cache/data/AutoModerationActionData; + public final fun component3 ()Ldev/kord/common/entity/Snowflake; + public final fun component4 ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun component5 ()Ldev/kord/common/entity/Snowflake; + public final fun component6 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component7 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component8 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component9 ()Ljava/lang/String; + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData; + public static synthetic fun copy$default (Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData;Ldev/kord/common/entity/Snowflake;Ldev/kord/core/cache/data/AutoModerationActionData;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData; + public fun equals (Ljava/lang/Object;)Z + public final fun getAction ()Ldev/kord/core/cache/data/AutoModerationActionData; + public final fun getAlertSystemMessageId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getChannelId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getContent ()Ljava/lang/String; + public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public final fun getMatchedContent ()Ljava/lang/String; + public final fun getMatchedKeyword ()Ljava/lang/String; + public final fun getMessageId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public final fun getRuleTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun getUserId ()Ldev/kord/common/entity/Snowflake; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData$Companion { + public final fun from (Ldev/kord/gateway/DiscordAutoModerationActionExecution;)Ldev/kord/core/event/automoderation/data/AutoModerationActionExecutionEventData; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/core/event/channel/CategoryCreateEvent : dev/kord/core/event/channel/ChannelCreateEvent { public fun (Ldev/kord/core/entity/channel/Category;ILjava/lang/Object;)V public fun getChannel ()Ldev/kord/core/entity/channel/Category; @@ -12219,6 +12863,7 @@ public final class dev/kord/core/exception/EntityNotFoundException : java/lang/E public final class dev/kord/core/exception/EntityNotFoundException$Companion { public final fun applicationCommandPermissionsNotFound (Ldev/kord/common/entity/Snowflake;)Ljava/lang/Void; + public final fun autoModerationRuleNotFound (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ljava/lang/Void; public final fun banNotFound (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ljava/lang/Void; public final fun emojiNotFound (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;)Ljava/lang/Void; public final fun entityNotFound (Ljava/lang/String;Ldev/kord/common/entity/Snowflake;)Ljava/lang/Void; @@ -12697,6 +13342,9 @@ public final class dev/kord/core/supplier/CacheEntitySupplier : dev/kord/core/su public fun getActiveThreads (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public fun getApplicationCommandPermissions (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getApplicationCommandPermissionsOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRules (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public fun getChannel (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelPins (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; @@ -12785,6 +13433,9 @@ public abstract interface class dev/kord/core/supplier/EntitySupplier { public abstract fun getActiveThreads (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public abstract fun getApplicationCommandPermissions (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getApplicationCommandPermissionsOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun getAutoModerationRules (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public abstract fun getChannel (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getChannelOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun getChannelPins (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; @@ -12865,6 +13516,7 @@ public abstract interface class dev/kord/core/supplier/EntitySupplier { public final class dev/kord/core/supplier/EntitySupplier$DefaultImpls { public static fun getApplicationCommandPermissions (Ldev/kord/core/supplier/EntitySupplier;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun getAutoModerationRule (Ldev/kord/core/supplier/EntitySupplier;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun getChannel (Ldev/kord/core/supplier/EntitySupplier;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun getCurrentUserGuilds$default (Ldev/kord/core/supplier/EntitySupplier;Ljava/lang/Integer;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; public static fun getEmoji (Ldev/kord/core/supplier/EntitySupplier;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -12937,6 +13589,9 @@ public final class dev/kord/core/supplier/RestEntitySupplier : dev/kord/core/sup public final fun getAuditLogEntries (Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AuditLogGetRequest;)Lkotlinx/coroutines/flow/Flow; public final fun getAuditLogEntries (Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; public static synthetic fun getAuditLogEntries$default (Ldev/kord/core/supplier/RestEntitySupplier;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AuditLogGetRequest;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; + public fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRules (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public fun getChannel (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelPins (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; @@ -13032,6 +13687,9 @@ public final class dev/kord/core/supplier/StoreEntitySupplier : dev/kord/core/su public fun getActiveThreads (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public fun getApplicationCommandPermissions (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getApplicationCommandPermissionsOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRuleOrNull (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun getAutoModerationRules (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; public fun getChannel (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelOrNull (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun getChannelPins (Ldev/kord/common/entity/Snowflake;)Lkotlinx/coroutines/flow/Flow; diff --git a/core/src/main/kotlin/Unsafe.kt b/core/src/main/kotlin/Unsafe.kt index 867a63038270..43a04ebc6ba7 100644 --- a/core/src/main/kotlin/Unsafe.kt +++ b/core/src/main/kotlin/Unsafe.kt @@ -4,6 +4,7 @@ import dev.kord.common.annotation.KordExperimental import dev.kord.common.annotation.KordUnsafe import dev.kord.common.entity.Snowflake import dev.kord.core.behavior.* +import dev.kord.core.behavior.automoderation.* import dev.kord.core.behavior.channel.* import dev.kord.core.behavior.channel.threads.PrivateThreadParentChannelBehavior import dev.kord.core.behavior.channel.threads.ThreadChannelBehavior @@ -27,6 +28,27 @@ import kotlin.DeprecationLevel.ERROR @KordExperimental public class Unsafe(private val kord: Kord) { + public fun autoModerationRule(guildId: Snowflake, ruleId: Snowflake): AutoModerationRuleBehavior = + AutoModerationRuleBehavior(guildId, ruleId, kord) + + public fun keywordAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): KeywordAutoModerationRuleBehavior = + KeywordAutoModerationRuleBehavior(guildId, ruleId, kord) + + @KordExperimental + public fun spamAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): SpamAutoModerationRuleBehavior = + SpamAutoModerationRuleBehavior(guildId, ruleId, kord) + + public fun keywordPresetAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + ): KeywordPresetAutoModerationRuleBehavior = KeywordPresetAutoModerationRuleBehavior(guildId, ruleId, kord) + + @KordExperimental + public fun mentionSpamAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + ): MentionSpamAutoModerationRuleBehavior = MentionSpamAutoModerationRuleBehavior(guildId, ruleId, kord) + public fun message(channelId: Snowflake, messageId: Snowflake): MessageBehavior = MessageBehavior(channelId = channelId, messageId = messageId, kord = kord) diff --git a/core/src/main/kotlin/Util.kt b/core/src/main/kotlin/Util.kt index 16bf467d5deb..6a2022f9e43d 100644 --- a/core/src/main/kotlin/Util.kt +++ b/core/src/main/kotlin/Util.kt @@ -6,6 +6,7 @@ import dev.kord.core.entity.KordEntity import dev.kord.core.entity.Message import dev.kord.core.entity.channel.thread.ThreadChannel import dev.kord.core.event.Event +import dev.kord.core.event.automoderation.* import dev.kord.core.event.channel.* import dev.kord.core.event.channel.thread.* import dev.kord.core.event.guild.* @@ -459,6 +460,13 @@ public fun Intents.IntentsBuilder.enableEvent(event: KClass): Unit = -> +GuildScheduledEvents + AutoModerationRuleConfigurationEvent::class, + AutoModerationRuleCreateEvent::class, + AutoModerationRuleUpdateEvent::class, + AutoModerationRuleDeleteEvent::class, + -> +AutoModerationConfiguration + + /* * events requiring multiple intents: */ @@ -495,6 +503,19 @@ public fun Intents.IntentsBuilder.enableEvent(event: KClass): Unit = +DirectMessageTyping } + AutoModerationActionExecutionEvent::class -> { + +AutoModerationExecution + +MessageContent + } + + AutoModerationEvent::class -> { + // supertype of AutoModerationRuleConfigurationEvent and AutoModerationActionExecutionEvent + // -> requires intents for both + +AutoModerationConfiguration + +AutoModerationExecution + +MessageContent + } + else -> Unit } diff --git a/core/src/main/kotlin/behavior/GuildBehavior.kt b/core/src/main/kotlin/behavior/GuildBehavior.kt index 4c749b53f025..7ee535aa6974 100644 --- a/core/src/main/kotlin/behavior/GuildBehavior.kt +++ b/core/src/main/kotlin/behavior/GuildBehavior.kt @@ -4,6 +4,10 @@ import dev.kord.cache.api.query import dev.kord.common.annotation.DeprecatedSinceKord import dev.kord.common.annotation.KordExperimental import dev.kord.common.entity.* +import dev.kord.common.entity.AutoModerationRuleEventType.MessageSend +import dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam +import dev.kord.common.entity.AutoModerationRuleTriggerType.Spam +import dev.kord.common.entity.Permission.ManageGuild import dev.kord.common.entity.optional.Optional import dev.kord.common.entity.optional.unwrap import dev.kord.common.exception.RequestException @@ -16,6 +20,7 @@ import dev.kord.core.entity.application.GuildApplicationCommand import dev.kord.core.entity.application.GuildChatInputCommand import dev.kord.core.entity.application.GuildMessageCommand import dev.kord.core.entity.application.GuildUserCommand +import dev.kord.core.entity.automoderation.* import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.ThreadChannel import dev.kord.core.event.guild.MembersChunkEvent @@ -30,6 +35,7 @@ import dev.kord.gateway.start import dev.kord.rest.Image import dev.kord.rest.NamedFile import dev.kord.rest.builder.auditlog.AuditLogGetRequestBuilder +import dev.kord.rest.builder.automoderation.* import dev.kord.rest.builder.ban.BanCreateBuilder import dev.kord.rest.builder.channel.* import dev.kord.rest.builder.guild.* @@ -51,6 +57,7 @@ import java.util.Objects import kotlin.DeprecationLevel.ERROR import kotlin.DeprecationLevel.HIDDEN import kotlin.contracts.InvocationKind +import kotlin.contracts.InvocationKind.EXACTLY_ONCE import kotlin.contracts.contract /** @@ -314,6 +321,7 @@ public interface GuildBehavior : KordEntity, Strategizable { /** * Requests to edit this guild's [MFA level][MFALevel] and returns the updated level. + * * This requires guild ownership. * * @param reason the reason showing up in the audit log @@ -616,6 +624,39 @@ public interface GuildBehavior : KordEntity, Strategizable { return GuildSticker(data, kord) } + /** + * Requests to get all [AutoModerationRule]s currently configured for this guild. + * + * This requires the [ManageGuild] permission. + * + * The returned flow is lazily executed, any [RequestException] will be thrown on + * [terminal operators](https://kotlinlang.org/docs/reference/coroutines/flow.html#terminal-flow-operators) instead. + */ + public val autoModerationRules: Flow + get() = supplier.getAutoModerationRules(guildId = id) + + /** + * Requests an [AutoModerationRule] by its [id][ruleId]. Returns `null` if it wasn't found. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if something went wrong during the request. + */ + public suspend fun getAutoModerationRuleOrNull(ruleId: Snowflake): AutoModerationRule? = + supplier.getAutoModerationRuleOrNull(guildId = id, ruleId) + + /** + * Requests an [AutoModerationRule] by its [id][ruleId]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if something went wrong during the request. + * @throws EntityNotFoundException if the [AutoModerationRule] wasn't found. + */ + public suspend fun getAutoModerationRule(ruleId: Snowflake): AutoModerationRule = + supplier.getAutoModerationRule(guildId = id, ruleId) + + /** * Returns a new [GuildBehavior] with the given [strategy]. */ @@ -1067,3 +1108,93 @@ public suspend fun GuildBehavior.createScheduledEvent( return GuildScheduledEvent(data, kord, supplier) } + + +/** + * Requests to create a new [KeywordAutoModerationRule] in this guild and returns it. + * + * This requires the [ManageGuild] permission. + * + * @param name the rule name. + * @param eventType the rule [event type][AutoModerationRuleEventType]. + * + * @throws RestRequestException if something went wrong during the request. + */ +public suspend inline fun GuildBehavior.createKeywordAutoModerationRule( + name: String, + eventType: AutoModerationRuleEventType = MessageSend, + builder: KeywordAutoModerationRuleCreateBuilder.() -> Unit, +): KeywordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.createKeywordAutoModerationRule(guildId = id, name, eventType, builder) + return KeywordAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + +/** + * Requests to create a new [SpamAutoModerationRule] in this guild and returns it. + * + * This requires the [ManageGuild] permission. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + * + * @param name the rule name. + * @param eventType the rule [event type][AutoModerationRuleEventType]. + * + * @throws RestRequestException if something went wrong during the request. + */ +@KordExperimental +public suspend inline fun GuildBehavior.createSpamAutoModerationRule( + name: String, + eventType: AutoModerationRuleEventType = MessageSend, + builder: SpamAutoModerationRuleCreateBuilder.() -> Unit, +): SpamAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.createSpamAutoModerationRule(guildId = id, name, eventType, builder) + return SpamAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + +/** + * Requests to create a new [KeywordPresetAutoModerationRule] in this guild and returns it. + * + * This requires the [ManageGuild] permission. + * + * @param name the rule name. + * @param eventType the rule [event type][AutoModerationRuleEventType]. + * + * @throws RestRequestException if something went wrong during the request. + */ +public suspend inline fun GuildBehavior.createKeywordPresetAutoModerationRule( + name: String, + eventType: AutoModerationRuleEventType = MessageSend, + builder: KeywordPresetAutoModerationRuleCreateBuilder.() -> Unit, +): KeywordPresetAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.createKeywordPresetAutoModerationRule(guildId = id, name, eventType, builder) + return KeywordPresetAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + +/** + * Requests to create a new [MentionSpamAutoModerationRule] in this guild and returns it. + * + * This requires the [ManageGuild] permission. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + * + * @param name the rule name. + * @param eventType the rule [event type][AutoModerationRuleEventType]. + * @param mentionLimit total number of mentions (role & user) allowed per message (maximum of 50). + * + * @throws RestRequestException if something went wrong during the request. + */ +@KordExperimental +public suspend inline fun GuildBehavior.createMentionSpamAutoModerationRule( + name: String, + eventType: AutoModerationRuleEventType = MessageSend, + mentionLimit: Int, + builder: MentionSpamAutoModerationRuleCreateBuilder.() -> Unit, +): MentionSpamAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration + .createMentionSpamAutoModerationRule(guildId = id, name, eventType, mentionLimit, builder) + return MentionSpamAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} diff --git a/core/src/main/kotlin/behavior/automoderation/AutoModerationRuleBehavior.kt b/core/src/main/kotlin/behavior/automoderation/AutoModerationRuleBehavior.kt new file mode 100644 index 000000000000..005112b4386a --- /dev/null +++ b/core/src/main/kotlin/behavior/automoderation/AutoModerationRuleBehavior.kt @@ -0,0 +1,458 @@ +package dev.kord.core.behavior.automoderation + +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.AutoModerationRuleTriggerType +import dev.kord.common.entity.AutoModerationRuleTriggerType.* +import dev.kord.common.entity.Permission.ManageGuild +import dev.kord.common.entity.Snowflake +import dev.kord.common.exception.RequestException +import dev.kord.core.Kord +import dev.kord.core.behavior.GuildBehavior +import dev.kord.core.cache.data.AutoModerationRuleData +import dev.kord.core.entity.Guild +import dev.kord.core.entity.KordEntity +import dev.kord.core.entity.Strategizable +import dev.kord.core.entity.automoderation.* +import dev.kord.core.exception.EntityNotFoundException +import dev.kord.core.supplier.EntitySupplier +import dev.kord.core.supplier.EntitySupplyStrategy +import dev.kord.rest.builder.automoderation.* +import dev.kord.rest.request.RestRequestException +import java.util.Objects +import kotlin.contracts.InvocationKind.EXACTLY_ONCE +import kotlin.contracts.contract + +/** The behavior of an [AutoModerationRule]. */ +public interface AutoModerationRuleBehavior : KordEntity, Strategizable { + + /** The ID of the [Guild] which this rule belongs to. */ + public val guildId: Snowflake + + /** The behavior of the [Guild] which this rule belongs to. */ + public val guild: GuildBehavior get() = GuildBehavior(guildId, kord) + + /** The rule [trigger type][AutoModerationRuleTriggerType]. */ + public val triggerType: AutoModerationRuleTriggerType? + + /** + * Requests to get this behavior as an [AutoModerationRule]. Returns `null` if it wasn't found. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + */ + public suspend fun asAutoModerationRuleOrNull(): AutoModerationRule? = + supplier.getAutoModerationRuleOrNull(guildId, ruleId = id) + + /** + * Requests to get this behavior as an [AutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [AutoModerationRule] wasn't found. + */ + public suspend fun asAutoModerationRule(): AutoModerationRule = supplier.getAutoModerationRule(guildId, ruleId = id) + + /** + * Requests to get the [Guild] which this rule belongs to. Returns `null` if it wasn't found. + * + * @throws RequestException if anything went wrong during the request. + */ + public suspend fun getGuildOrNull(): Guild? = supplier.getGuildOrNull(guildId) + + /** + * Requests to get the [Guild] which this rule belongs to. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [Guild] wasn't found. + */ + public suspend fun getGuild(): Guild = supplier.getGuild(guildId) + + /** + * Requests to delete this [AutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @param reason the reason showing up in the audit log + * @throws RestRequestException if something went wrong during the request. + */ + public suspend fun delete(reason: String? = null) { + kord.rest.autoModeration.deleteAutoModerationRule(guildId, ruleId = id, reason) + } + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRuleBehavior + + override fun equals(other: Any?): Boolean + override fun hashCode(): Int + override fun toString(): String +} + +internal fun AutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): AutoModerationRuleBehavior = object : AutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val triggerType get() = null + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + AutoModerationRuleBehavior(guildId, ruleId, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = "AutoModerationRuleBehavior(guildId=$guildId, id=$id, kord=$kord, supplier=$supplier)" +} + +internal fun AutoModerationRuleBehavior.autoModerationRuleEquals(other: Any?) = + this === other || (other is AutoModerationRuleBehavior && this.id == other.id && this.guildId == other.guildId) + +internal fun AutoModerationRuleBehavior.autoModerationRuleHashCode() = Objects.hash(id, guildId) + +/** + * Requests to edit this [AutoModerationRule] and returns the edited rule. + * + * This requires the [ManageGuild] permission. + * + * @throws RestRequestException if something went wrong during the request. + */ +public suspend inline fun AutoModerationRuleBehavior.edit( + builder: UntypedAutoModerationRuleModifyBuilder.() -> Unit, +): AutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.modifyUntypedAutoModerationRule(guildId, ruleId = id, builder) + return AutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + + +/** An [AutoModerationRuleBehavior] with a non-null [triggerType]. */ +public interface TypedAutoModerationRuleBehavior : AutoModerationRuleBehavior { + override val triggerType: AutoModerationRuleTriggerType + override fun withStrategy(strategy: EntitySupplyStrategy<*>): TypedAutoModerationRuleBehavior +} + +internal fun TypedAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + triggerType: AutoModerationRuleTriggerType, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): TypedAutoModerationRuleBehavior = when (triggerType) { + Keyword -> KeywordAutoModerationRuleBehavior(guildId, ruleId, kord, supplier) + Spam -> SpamAutoModerationRuleBehavior(guildId, ruleId, kord, supplier) + KeywordPreset -> KeywordPresetAutoModerationRuleBehavior(guildId, ruleId, kord, supplier) + MentionSpam -> MentionSpamAutoModerationRuleBehavior(guildId, ruleId, kord, supplier) + is Unknown -> UnknownAutoModerationRuleBehavior(guildId, ruleId, triggerType, kord, supplier) +} + + +/** The behavior of a [KeywordAutoModerationRule]. */ +public interface KeywordAutoModerationRuleBehavior : TypedAutoModerationRuleBehavior { + + override val triggerType: Keyword get() = Keyword + + /** + * Requests to get this behavior as a [KeywordAutoModerationRule]. + * Returns `null` if it wasn't found or if the rule isn't a [KeywordAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + */ + override suspend fun asAutoModerationRuleOrNull(): KeywordAutoModerationRule? = + super.asAutoModerationRuleOrNull() as? KeywordAutoModerationRule + + /** + * Requests to get this behavior as a [KeywordAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [KeywordAutoModerationRule] wasn't found. + * @throws ClassCastException if the rule isn't a [KeywordAutoModerationRule]. + */ + override suspend fun asAutoModerationRule(): KeywordAutoModerationRule = + super.asAutoModerationRule() as KeywordAutoModerationRule + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): KeywordAutoModerationRuleBehavior +} + +internal fun KeywordAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): KeywordAutoModerationRuleBehavior = object : KeywordAutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + KeywordAutoModerationRuleBehavior(guildId, ruleId, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = + "KeywordAutoModerationRuleBehavior(guildId=$guildId, id=$id, kord=$kord, supplier=$supplier)" +} + +/** + * Requests to edit this [KeywordAutoModerationRule] and returns the edited rule. + * + * This requires the [ManageGuild] permission. + * + * @throws RestRequestException if something went wrong during the request. + */ +public suspend inline fun KeywordAutoModerationRuleBehavior.edit( + builder: KeywordAutoModerationRuleModifyBuilder.() -> Unit, +): KeywordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.modifyKeywordAutoModerationRule(guildId, ruleId = id, builder) + return KeywordAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + + +/** + * The behavior of a [SpamAutoModerationRule]. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordExperimental +public interface SpamAutoModerationRuleBehavior : TypedAutoModerationRuleBehavior { + + override val triggerType: Spam get() = Spam + + /** + * Requests to get this behavior as a [SpamAutoModerationRule]. + * Returns `null` if it wasn't found or if the rule isn't a [SpamAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + */ + override suspend fun asAutoModerationRuleOrNull(): SpamAutoModerationRule? = + super.asAutoModerationRuleOrNull() as? SpamAutoModerationRule + + /** + * Requests to get this behavior as a [SpamAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [SpamAutoModerationRule] wasn't found. + * @throws ClassCastException if the rule isn't a [SpamAutoModerationRule]. + */ + override suspend fun asAutoModerationRule(): SpamAutoModerationRule = + super.asAutoModerationRule() as SpamAutoModerationRule + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): SpamAutoModerationRuleBehavior +} + +internal fun SpamAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): SpamAutoModerationRuleBehavior = object : SpamAutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + SpamAutoModerationRuleBehavior(guildId, ruleId, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = + "SpamAutoModerationRuleBehavior(guildId=$guildId, id=$id, kord=$kord, supplier=$supplier)" +} + +/** + * Requests to edit this [SpamAutoModerationRule] and returns the edited rule. + * + * This requires the [ManageGuild] permission. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + * + * @throws RestRequestException if something went wrong during the request. + */ +@KordExperimental +public suspend inline fun SpamAutoModerationRuleBehavior.edit( + builder: SpamAutoModerationRuleModifyBuilder.() -> Unit, +): SpamAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.modifySpamAutoModerationRule(guildId, ruleId = id, builder) + return SpamAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + + +/** The behavior of a [KeywordPresetAutoModerationRule]. */ +public interface KeywordPresetAutoModerationRuleBehavior : TypedAutoModerationRuleBehavior { + + override val triggerType: KeywordPreset get() = KeywordPreset + + /** + * Requests to get this behavior as a [KeywordPresetAutoModerationRule]. + * Returns `null` if it wasn't found or if the rule isn't a [KeywordPresetAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + */ + override suspend fun asAutoModerationRuleOrNull(): KeywordPresetAutoModerationRule? = + super.asAutoModerationRuleOrNull() as? KeywordPresetAutoModerationRule + + /** + * Requests to get this behavior as a [KeywordPresetAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [KeywordPresetAutoModerationRule] wasn't found. + * @throws ClassCastException if the rule isn't a [KeywordPresetAutoModerationRule]. + */ + override suspend fun asAutoModerationRule(): KeywordPresetAutoModerationRule = + super.asAutoModerationRule() as KeywordPresetAutoModerationRule + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): KeywordPresetAutoModerationRuleBehavior +} + +internal fun KeywordPresetAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): KeywordPresetAutoModerationRuleBehavior = object : KeywordPresetAutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + KeywordPresetAutoModerationRuleBehavior(guildId, ruleId, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = + "KeywordPresetAutoModerationRuleBehavior(guildId=$guildId, id=$id, kord=$kord, supplier=$supplier)" +} + +/** + * Requests to edit this [KeywordPresetAutoModerationRule] and returns the edited rule. + * + * This requires the [ManageGuild] permission. + * + * @throws RestRequestException if something went wrong during the request. + */ +public suspend inline fun KeywordPresetAutoModerationRuleBehavior.edit( + builder: KeywordPresetAutoModerationRuleModifyBuilder.() -> Unit, +): KeywordPresetAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.modifyKeywordPresetAutoModerationRule(guildId, ruleId = id, builder) + return KeywordPresetAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + + +/** + * The behavior of a [MentionSpamAutoModerationRule]. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordExperimental +public interface MentionSpamAutoModerationRuleBehavior : TypedAutoModerationRuleBehavior { + + override val triggerType: MentionSpam get() = MentionSpam + + /** + * Requests to get this behavior as a [MentionSpamAutoModerationRule]. + * Returns `null` if it wasn't found or if the rule isn't a [MentionSpamAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + */ + override suspend fun asAutoModerationRuleOrNull(): MentionSpamAutoModerationRule? = + super.asAutoModerationRuleOrNull() as? MentionSpamAutoModerationRule + + /** + * Requests to get this behavior as a [MentionSpamAutoModerationRule]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [MentionSpamAutoModerationRule] wasn't found. + * @throws ClassCastException if the rule isn't a [MentionSpamAutoModerationRule]. + */ + override suspend fun asAutoModerationRule(): MentionSpamAutoModerationRule = + super.asAutoModerationRule() as MentionSpamAutoModerationRule + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): MentionSpamAutoModerationRuleBehavior +} + +internal fun MentionSpamAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): MentionSpamAutoModerationRuleBehavior = object : MentionSpamAutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + MentionSpamAutoModerationRuleBehavior(guildId, ruleId, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = + "MentionSpamAutoModerationRuleBehavior(guildId=$guildId, id=$id, kord=$kord, supplier=$supplier)" +} + +/** + * Requests to edit this [MentionSpamAutoModerationRule] and returns the edited rule. + * + * This requires the [ManageGuild] permission. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + * + * @throws RestRequestException if something went wrong during the request. + */ +@KordExperimental +public suspend inline fun MentionSpamAutoModerationRuleBehavior.edit( + builder: MentionSpamAutoModerationRuleModifyBuilder.() -> Unit, +): MentionSpamAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val rule = kord.rest.autoModeration.modifyMentionSpamAutoModerationRule(guildId, ruleId = id, builder) + return MentionSpamAutoModerationRule(AutoModerationRuleData.from(rule), kord, supplier) +} + + +@Suppress("FunctionName") +internal fun UnknownAutoModerationRuleBehavior( + guildId: Snowflake, + ruleId: Snowflake, + triggerType: Unknown, + kord: Kord, + supplier: EntitySupplier, +): TypedAutoModerationRuleBehavior = object : TypedAutoModerationRuleBehavior { + override val guildId get() = guildId + override val id get() = ruleId + override val triggerType get() = triggerType + override val kord get() = kord + override val supplier get() = supplier + + override fun withStrategy(strategy: EntitySupplyStrategy<*>) = + UnknownAutoModerationRuleBehavior(guildId, ruleId, triggerType, kord, strategy.supply(kord)) + + override fun equals(other: Any?) = autoModerationRuleEquals(other) + override fun hashCode() = autoModerationRuleHashCode() + override fun toString() = "UnknownAutoModerationRuleBehavior(guildId=$guildId, id=$id, " + + "triggerType=$triggerType, kord=$kord, supplier=$supplier)" +} diff --git a/core/src/main/kotlin/cache/DataCacheExtensions.kt b/core/src/main/kotlin/cache/DataCacheExtensions.kt index 7fb7a8403f14..0ebc3deba6a5 100644 --- a/core/src/main/kotlin/cache/DataCacheExtensions.kt +++ b/core/src/main/kotlin/cache/DataCacheExtensions.kt @@ -23,7 +23,7 @@ internal suspend fun DataCache.registerKordData() = register( GuildApplicationCommandPermissionsData.description, StickerPackData.description, StickerData.description, - + AutoModerationRuleData.description, ) /** @@ -35,11 +35,17 @@ internal suspend fun DataCache.removeKordData() { query().remove() query().remove() query().remove() + query().remove() query().remove() query().remove() query().remove() query().remove() query().remove() + query().remove() + query().remove() + query().remove() + query().remove() + query().remove() } /** diff --git a/core/src/main/kotlin/cache/KordCache.kt b/core/src/main/kotlin/cache/KordCache.kt index 9bba199257c4..c886b88d1713 100644 --- a/core/src/main/kotlin/cache/KordCache.kt +++ b/core/src/main/kotlin/cache/KordCache.kt @@ -124,6 +124,10 @@ public class KordCacheBuilder { */ public fun voiceState(generator: Generator): Unit = forDescription(VoiceStateData.description, generator) + /** Configures the caching for [AutoModerationRuleData]. */ + public fun autoModerationRules(generator: Generator): Unit = + forDescription(AutoModerationRuleData.description, generator) + public fun build(): DataCache = DelegatingDataCache(EntrySupplier.invoke { cache, description -> val generator = descriptionGenerators[description] ?: defaultGenerator generator(cache, description) diff --git a/core/src/main/kotlin/cache/data/AutoModeration.kt b/core/src/main/kotlin/cache/data/AutoModeration.kt new file mode 100644 index 000000000000..4fbba8c7b59d --- /dev/null +++ b/core/src/main/kotlin/cache/data/AutoModeration.kt @@ -0,0 +1,98 @@ +package dev.kord.core.cache.data + +import dev.kord.cache.api.data.DataDescription +import dev.kord.cache.api.data.description +import 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.common.entity.optional.map +import dev.kord.common.serialization.DurationInSeconds +import kotlinx.serialization.Serializable + +@Serializable +public data class AutoModerationRuleData( + val id: Snowflake, + val guildId: Snowflake, + val name: String, + val creatorId: Snowflake, + val eventType: AutoModerationRuleEventType, + val triggerType: AutoModerationRuleTriggerType, + val triggerMetadata: AutoModerationRuleTriggerMetadataData, + val actions: List, + val enabled: Boolean, + val exemptRoles: List, + val exemptChannels: List, +) { + public companion object { + public val description: DataDescription = + description(AutoModerationRuleData::id) + + public fun from(rule: DiscordAutoModerationRule): AutoModerationRuleData = with(rule) { + AutoModerationRuleData( + id = id, + guildId = guildId, + name = name, + creatorId = creatorId, + eventType = eventType, + triggerType = triggerType, + triggerMetadata = AutoModerationRuleTriggerMetadataData.from(triggerMetadata), + actions = actions.map { AutoModerationActionData.from(it) }, + enabled = enabled, + exemptRoles = exemptRoles, + exemptChannels = exemptChannels, + ) + } + } +} + +@Serializable +public data class AutoModerationRuleTriggerMetadataData( + val keywordFilter: Optional> = Optional.Missing(), + val presets: Optional> = Optional.Missing(), + val allowList: Optional> = Optional.Missing(), + val mentionTotalLimit: OptionalInt = OptionalInt.Missing, +) { + public companion object { + public fun from(metadata: DiscordAutoModerationRuleTriggerMetadata): AutoModerationRuleTriggerMetadataData = + with(metadata) { + AutoModerationRuleTriggerMetadataData( + keywordFilter = keywordFilter, + presets = presets, + allowList = allowList, + mentionTotalLimit = mentionTotalLimit, + ) + } + } +} + +@Serializable +public data class AutoModerationActionData( + val type: AutoModerationActionType, + val metadata: Optional = Optional.Missing(), +) { + public companion object { + public fun from(action: DiscordAutoModerationAction): AutoModerationActionData = with(action) { + AutoModerationActionData( + type = type, + metadata = metadata.map { AutoModerationActionMetadataData.from(it) }, + ) + } + } +} + +@Serializable +public data class AutoModerationActionMetadataData( + public val channelId: OptionalSnowflake = OptionalSnowflake.Missing, + public val durationSeconds: Optional = Optional.Missing(), +) { + public companion object { + public fun from(metadata: DiscordAutoModerationActionMetadata): AutoModerationActionMetadataData = + with(metadata) { + AutoModerationActionMetadataData( + channelId = channelId, + durationSeconds = durationSeconds, + ) + } + } +} diff --git a/core/src/main/kotlin/cache/data/GuildData.kt b/core/src/main/kotlin/cache/data/GuildData.kt index a9c71d2e8ccb..6377ba17b00b 100644 --- a/core/src/main/kotlin/cache/data/GuildData.kt +++ b/core/src/main/kotlin/cache/data/GuildData.kt @@ -77,6 +77,7 @@ public data class GuildData( link(GuildData::id to WebhookData::nullableGuildId) link(GuildData::id to VoiceStateData::guildId) link(GuildData::id to PresenceData::guildId) + link(GuildData::id to AutoModerationRuleData::guildId) } public fun from(entity: DiscordGuild): GuildData = with(entity) { diff --git a/core/src/main/kotlin/cache/data/UserData.kt b/core/src/main/kotlin/cache/data/UserData.kt index 23cca6556d9b..765e74f6199c 100644 --- a/core/src/main/kotlin/cache/data/UserData.kt +++ b/core/src/main/kotlin/cache/data/UserData.kt @@ -26,13 +26,12 @@ public data class UserData( ) { public companion object { - public val description: DataDescription - get() = description(UserData::id) { - link(UserData::id to MemberData::userId) - link(UserData::id to WebhookData::nullableUserId) - link(UserData::id to VoiceStateData::userId) - link(UserData::id to PresenceData::userId) - } + public val description: DataDescription = description(UserData::id) { + link(UserData::id to MemberData::userId) + link(UserData::id to WebhookData::nullableUserId) + link(UserData::id to VoiceStateData::userId) + link(UserData::id to PresenceData::userId) + } public fun from(entity: DiscordUser): UserData = with(entity) { UserData(id, username, discriminator, avatar, bot, publicFlags, banner, accentColor) diff --git a/core/src/main/kotlin/entity/AuditLog.kt b/core/src/main/kotlin/entity/AuditLog.kt index f6f1ac7fd504..10737c742af7 100644 --- a/core/src/main/kotlin/entity/AuditLog.kt +++ b/core/src/main/kotlin/entity/AuditLog.kt @@ -4,10 +4,11 @@ import dev.kord.common.entity.* import dev.kord.common.entity.optional.orEmpty import dev.kord.core.Kord import dev.kord.core.KordObject +import dev.kord.core.cache.data.AutoModerationRuleData import dev.kord.core.cache.data.ChannelData -import dev.kord.core.cache.data.IntegrationData import dev.kord.core.cache.data.UserData import dev.kord.core.cache.data.WebhookData +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.thread.ThreadChannel @@ -23,10 +24,14 @@ public class AuditLog( public val integrations: List get() = data.integrations.map { it.id } - public val threads: List get() = data.threads.map { - val data = ChannelData.from(it) - Channel.from(data, kord) - }.filterIsInstance() + public val threads: List + get() = data.threads.map { + val data = ChannelData.from(it) + Channel.from(data, kord) + }.filterIsInstance() + + public val autoModerationRules: List + get() = data.autoModerationRules.map { AutoModerationRule(AutoModerationRuleData.from(it), kord) } public val entries: List get() = data.auditLogEntries.map { AuditLogEntry(it, kord) } diff --git a/core/src/main/kotlin/entity/automoderation/AutoModerationAction.kt b/core/src/main/kotlin/entity/automoderation/AutoModerationAction.kt new file mode 100644 index 000000000000..29dfa2c9b740 --- /dev/null +++ b/core/src/main/kotlin/entity/automoderation/AutoModerationAction.kt @@ -0,0 +1,88 @@ +package dev.kord.core.entity.automoderation + +import dev.kord.common.entity.AutoModerationActionType +import dev.kord.common.entity.AutoModerationActionType.* +import dev.kord.common.entity.Snowflake +import dev.kord.core.Kord +import dev.kord.core.KordObject +import dev.kord.core.cache.data.AutoModerationActionData +import dev.kord.core.entity.channel.GuildMessageChannel +import kotlin.time.Duration + +/** An action which will execute whenever an [AutoModerationRule] is triggered. */ +public sealed class AutoModerationAction( + public val data: AutoModerationActionData, + final override val kord: Kord, + expectedActionType: AutoModerationActionType?, +) : KordObject { + init { + val type = data.type + if (expectedActionType == null) { + require(type is Unknown) { "Expected unknown action type but got $type" } + } else { + require(type == expectedActionType) { "Wrong action type, expected $expectedActionType but got $type" } + } + } + + /** The type of action. */ + public abstract val type: AutoModerationActionType + + abstract override fun toString(): String +} + +internal fun AutoModerationAction(data: AutoModerationActionData, kord: Kord) = when (data.type) { + BlockMessage -> BlockMessageAutoModerationAction(data, kord) + SendAlertMessage -> SendAlertMessageAutoModerationAction(data, kord) + Timeout -> TimeoutAutoModerationAction(data, kord) + is Unknown -> UnknownAutoModerationAction(data, kord) +} + +/** An [AutoModerationAction] of type [BlockMessage]. */ +public class BlockMessageAutoModerationAction( + data: AutoModerationActionData, + kord: Kord, +) : AutoModerationAction(data, kord, expectedActionType = BlockMessage) { + + override val type: BlockMessage get() = BlockMessage + + override fun toString(): String = "BlockMessageAutoModerationAction(data=$data)" +} + +/** An [AutoModerationAction] of type [SendAlertMessage]. */ +public class SendAlertMessageAutoModerationAction( + data: AutoModerationActionData, + kord: Kord, +) : AutoModerationAction(data, kord, expectedActionType = SendAlertMessage) { + + override val type: SendAlertMessage get() = SendAlertMessage + + /** The ID of the [GuildMessageChannel] to which user content should be logged. */ + public val channelId: Snowflake get() = data.metadata.value!!.channelId.value!! + + override fun toString(): String = "SendAlertMessageAutoModerationAction(data=$data)" +} + +/** An [AutoModerationAction] of type [Timeout]. */ +public class TimeoutAutoModerationAction( + data: AutoModerationActionData, + kord: Kord, +) : AutoModerationAction(data, kord, expectedActionType = Timeout) { + + override val type: Timeout get() = Timeout + + /** The timeout duration. */ + public val duration: Duration get() = data.metadata.value!!.durationSeconds.value!! + + override fun toString(): String = "TimeoutAutoModerationAction(data=$data)" +} + +/** An [AutoModerationAction] of type [Unknown]. */ +public class UnknownAutoModerationAction( + data: AutoModerationActionData, + kord: Kord, +) : AutoModerationAction(data, kord, expectedActionType = null) { + + override val type: Unknown get() = data.type as Unknown + + override fun toString(): String = "UnknownAutoModerationAction(data=$data)" +} diff --git a/core/src/main/kotlin/entity/automoderation/AutoModerationRule.kt b/core/src/main/kotlin/entity/automoderation/AutoModerationRule.kt new file mode 100644 index 000000000000..d4288fedd5d2 --- /dev/null +++ b/core/src/main/kotlin/entity/automoderation/AutoModerationRule.kt @@ -0,0 +1,218 @@ +package dev.kord.core.entity.automoderation + +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.AutoModerationRuleEventType +import dev.kord.common.entity.AutoModerationRuleKeywordPresetType +import dev.kord.common.entity.AutoModerationRuleTriggerType +import dev.kord.common.entity.AutoModerationRuleTriggerType.* +import dev.kord.common.entity.Snowflake +import dev.kord.common.entity.optional.orEmpty +import dev.kord.common.entity.optional.value +import dev.kord.core.Kord +import dev.kord.core.behavior.MemberBehavior +import dev.kord.core.behavior.RoleBehavior +import dev.kord.core.behavior.automoderation.* +import dev.kord.core.behavior.channel.GuildMessageChannelBehavior +import dev.kord.core.cache.data.AutoModerationRuleData +import dev.kord.core.entity.Guild +import dev.kord.core.entity.Member +import dev.kord.core.entity.Role +import dev.kord.core.entity.channel.GuildMessageChannel +import dev.kord.core.supplier.EntitySupplier +import dev.kord.core.supplier.EntitySupplyStrategy + +/** + * An instance of an [Auto Moderation Rule](https://discord.com/developers/docs/resources/auto-moderation). + * + * Auto Moderation is a feature which allows each [Guild] to set up rules that trigger based on some criteria. For + * example, a rule can trigger whenever a message contains a specific keyword. + * + * Rules can be configured to automatically execute actions whenever they trigger. For example, if a user tries to send + * a message which contains a certain keyword, a rule can trigger and block the message before it is sent. + */ +public sealed class AutoModerationRule( + public val data: AutoModerationRuleData, + final override val kord: Kord, + final override val supplier: EntitySupplier, + expectedTriggerType: AutoModerationRuleTriggerType?, +) : TypedAutoModerationRuleBehavior { + + init { + val type = data.triggerType + if (expectedTriggerType == null) { + require(type is Unknown) { "Expected unknown trigger type but got $type" } + } else { + require(type == expectedTriggerType) { "Wrong trigger type, expected $expectedTriggerType but got $type" } + } + } + + final override val id: Snowflake get() = data.id + + final override val guildId: Snowflake get() = data.guildId + + /** The rule name. */ + public val name: String get() = data.name + + /** The ID of the [Member] which first created this rule. */ + public val creatorId: Snowflake get() = data.creatorId + + /** The behavior of the [Member] which first created this rule. */ + public val creator: MemberBehavior get() = MemberBehavior(guildId, id = creatorId, kord) + + /** The rule [event type][AutoModerationRuleEventType]. */ + public val eventType: AutoModerationRuleEventType get() = data.eventType + + /** The actions which will execute when the rule is triggered. */ + public val actions: List get() = data.actions.map { AutoModerationAction(it, kord) } + + /** Whether the rule is enabled. */ + public val isEnabled: Boolean get() = data.enabled + + /** The IDs of the [Role]s that should not be affected by the rule. */ + public val exemptRoleIds: List get() = data.exemptRoles + + /** The behaviors of the [Role]s that should not be affected by the rule. */ + public val exemptRoles: List get() = data.exemptRoles.map { RoleBehavior(guildId, id = it, kord) } + + /** The IDs of the [GuildMessageChannel]s that should not be affected by the rule. */ + public val exemptChannelIds: List get() = data.exemptChannels + + /** The behaviors of the [GuildMessageChannel]s that should not be affected by the rule. */ + public val exemptChannels: List + get() = data.exemptChannels.map { GuildMessageChannelBehavior(guildId, id = it, kord) } + + /** + * Returns `this`. + * + * @suppress There is no need to call this function. Use `this` directly instead. + */ + abstract override suspend fun asAutoModerationRuleOrNull(): AutoModerationRule + + /** + * Returns `this`. + * + * @suppress There is no need to call this function. Use `this` directly instead. + */ + abstract override suspend fun asAutoModerationRule(): AutoModerationRule + + abstract override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRule + + final override fun equals(other: Any?): Boolean = autoModerationRuleEquals(other) + final override fun hashCode(): Int = autoModerationRuleHashCode() +} + +@PublishedApi +internal fun AutoModerationRule( + data: AutoModerationRuleData, + kord: Kord, + supplier: EntitySupplier = kord.defaultSupplier, +): AutoModerationRule = when (data.triggerType) { + Keyword -> KeywordAutoModerationRule(data, kord, supplier) + Spam -> SpamAutoModerationRule(data, kord, supplier) + KeywordPreset -> KeywordPresetAutoModerationRule(data, kord, supplier) + MentionSpam -> MentionSpamAutoModerationRule(data, kord, supplier) + is Unknown -> UnknownAutoModerationRule(data, kord, supplier) +} + +/** An [AutoModerationRule] with trigger type [Keyword]. */ +public class KeywordAutoModerationRule(data: AutoModerationRuleData, kord: Kord, supplier: EntitySupplier) : + AutoModerationRule(data, kord, supplier, expectedTriggerType = Keyword), + KeywordAutoModerationRuleBehavior { + + /** + * Substrings which will be searched for in content. + * + * A keyword can be a phrase which contains multiple words. Wildcard symbols can be used to customize how each + * keyword will be matched. See + * [keyword matching strategies](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies). + */ + public val keywords: List get() = data.triggerMetadata.keywordFilter.orEmpty() + + override suspend fun asAutoModerationRuleOrNull(): KeywordAutoModerationRule = this + override suspend fun asAutoModerationRule(): KeywordAutoModerationRule = this + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): KeywordAutoModerationRule = + KeywordAutoModerationRule(data, kord, strategy.supply(kord)) + + override fun toString(): String = "KeywordAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)" +} + +/** + * An [AutoModerationRule] with trigger type [Spam]. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordExperimental +public class SpamAutoModerationRule(data: AutoModerationRuleData, kord: Kord, supplier: EntitySupplier) : + AutoModerationRule(data, kord, supplier, expectedTriggerType = Spam), + SpamAutoModerationRuleBehavior { + + override suspend fun asAutoModerationRuleOrNull(): SpamAutoModerationRule = this + override suspend fun asAutoModerationRule(): SpamAutoModerationRule = this + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): SpamAutoModerationRule = + SpamAutoModerationRule(data, kord, strategy.supply(kord)) + + override fun toString(): String = "SpamAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)" +} + +/** An [AutoModerationRule] with trigger type [KeywordPreset]. */ +public class KeywordPresetAutoModerationRule(data: AutoModerationRuleData, kord: Kord, supplier: EntitySupplier) : + AutoModerationRule(data, kord, supplier, expectedTriggerType = KeywordPreset), + KeywordPresetAutoModerationRuleBehavior { + + /** The internally pre-defined wordsets which will be searched for in content. */ + public val presets: List get() = data.triggerMetadata.presets.orEmpty() + + /** + * Substrings which will be exempt from triggering the [presets]. + * + * A keyword can be a phrase which contains multiple words. + */ + public val allowedKeywords: List get() = data.triggerMetadata.allowList.orEmpty() + + override suspend fun asAutoModerationRuleOrNull(): KeywordPresetAutoModerationRule = this + override suspend fun asAutoModerationRule(): KeywordPresetAutoModerationRule = this + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): KeywordPresetAutoModerationRule = + KeywordPresetAutoModerationRule(data, kord, strategy.supply(kord)) + + override fun toString(): String = "KeywordPresetAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)" +} + +/** + * An [AutoModerationRule] with trigger type [MentionSpam]. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordExperimental +public class MentionSpamAutoModerationRule(data: AutoModerationRuleData, kord: Kord, supplier: EntitySupplier) : + AutoModerationRule(data, kord, supplier, expectedTriggerType = MentionSpam), + MentionSpamAutoModerationRuleBehavior { + + /** Total number of mentions (role & user) allowed per message. */ + public val mentionLimit: Int get() = data.triggerMetadata.mentionTotalLimit.value!! + + override suspend fun asAutoModerationRuleOrNull(): MentionSpamAutoModerationRule = this + override suspend fun asAutoModerationRule(): MentionSpamAutoModerationRule = this + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): MentionSpamAutoModerationRule = + MentionSpamAutoModerationRule(data, kord, strategy.supply(kord)) + + override fun toString(): String = "MentionSpamAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)" +} + +/** An [AutoModerationRule] with trigger type [Unknown]. */ +public class UnknownAutoModerationRule(data: AutoModerationRuleData, kord: Kord, supplier: EntitySupplier) : + AutoModerationRule(data, kord, supplier, expectedTriggerType = null) { + + override val triggerType: Unknown get() = data.triggerType as Unknown + + override suspend fun asAutoModerationRuleOrNull(): UnknownAutoModerationRule = this + override suspend fun asAutoModerationRule(): UnknownAutoModerationRule = this + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): UnknownAutoModerationRule = + UnknownAutoModerationRule(data, kord, strategy.supply(kord)) + + override fun toString(): String = "UnknownAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)" +} diff --git a/core/src/main/kotlin/event/Event.kt b/core/src/main/kotlin/event/Event.kt index 7edfc1020c4d..1df40929a5ac 100644 --- a/core/src/main/kotlin/event/Event.kt +++ b/core/src/main/kotlin/event/Event.kt @@ -2,17 +2,16 @@ package dev.kord.core.event import dev.kord.common.annotation.KordPreview import dev.kord.core.Kord +import dev.kord.core.KordObject import dev.kord.core.entity.Strategizable import dev.kord.gateway.Gateway -public interface Event { +public interface Event : KordObject { /** * The Gateway that spawned this event. */ public val gateway: Gateway get() = kord.gateway.gateways.getValue(shard) - public val kord: Kord - /** * The shard number of the [gateway] that spawned this event. */ diff --git a/core/src/main/kotlin/event/automoderation/AutoModerationActionExecutionEvent.kt b/core/src/main/kotlin/event/automoderation/AutoModerationActionExecutionEvent.kt new file mode 100644 index 000000000000..d8f5eb909890 --- /dev/null +++ b/core/src/main/kotlin/event/automoderation/AutoModerationActionExecutionEvent.kt @@ -0,0 +1,128 @@ +package dev.kord.core.event.automoderation + +import dev.kord.common.entity.Permission.ManageGuild +import dev.kord.common.entity.Snowflake +import dev.kord.core.Kord +import dev.kord.core.behavior.MemberBehavior +import dev.kord.core.behavior.MessageBehavior +import dev.kord.core.behavior.automoderation.TypedAutoModerationRuleBehavior +import dev.kord.core.behavior.channel.GuildMessageChannelBehavior +import dev.kord.core.entity.Guild +import dev.kord.core.entity.Member +import dev.kord.core.entity.Message +import dev.kord.core.entity.automoderation.AutoModerationAction +import dev.kord.core.entity.automoderation.AutoModerationRule +import dev.kord.core.entity.automoderation.BlockMessageAutoModerationAction +import dev.kord.core.entity.automoderation.SendAlertMessageAutoModerationAction +import dev.kord.core.entity.channel.GuildMessageChannel +import dev.kord.core.event.automoderation.data.AutoModerationActionExecutionEventData +import dev.kord.core.supplier.EntitySupplier +import dev.kord.core.supplier.EntitySupplyStrategy +import dev.kord.gateway.Intent.MessageContent + +/** + * An [AutoModerationEvent] that is sent when an [AutoModerationRule] is triggered and an [AutoModerationAction] is + * executed (e.g. when a message is [blocked][BlockMessageAutoModerationAction]). + * + * This event is only sent to bot users which have the [ManageGuild] permission. + */ +public class AutoModerationActionExecutionEvent( + public val data: AutoModerationActionExecutionEventData, + override val kord: Kord, + override val shard: Int, + override val customContext: Any?, + override val supplier: EntitySupplier = kord.defaultSupplier, +) : AutoModerationEvent { + + /** The ID of the [Guild] in which the [action] was executed. */ + override val guildId: Snowflake get() = data.guildId + + /** The [AutoModerationAction] which was executed. */ + public val action: AutoModerationAction get() = AutoModerationAction(data.action, kord) + + /** The ID of the [AutoModerationRule] which the [action] belongs to. */ + override val ruleId: Snowflake get() = data.ruleId + + /** The behavior of the [AutoModerationRule] which the [action] belongs to. */ + override val rule: TypedAutoModerationRuleBehavior + get() = TypedAutoModerationRuleBehavior(guildId, ruleId, data.ruleTriggerType, kord) + + /** The ID of the [Member] which generated the content which triggered the rule. */ + public val memberId: Snowflake get() = data.userId + + /** The behavior of the [Member] which generated the content which triggered the rule. */ + public val member: MemberBehavior get() = MemberBehavior(guildId, id = memberId, kord) + + /** The ID of the [GuildMessageChannel] in which user [content] was posted. */ + public val channelId: Snowflake? get() = data.channelId.value + + /** The behavior of the [GuildMessageChannel] in which user [content] was posted. */ + public val channel: GuildMessageChannelBehavior? + get() = channelId?.let { GuildMessageChannelBehavior(guildId, id = it, kord) } + + /** + * The ID of any user [Message] which [content] belongs to. + * + * This will be `null` if the message was [blocked][BlockMessageAutoModerationAction] by Auto Moderation or + * [content] was not part of any message. + */ + public val messageId: Snowflake? get() = data.messageId.value + + /** + * The behavior of any user [Message] which [content] belongs to. + * + * This will be `null` if the message was [blocked][BlockMessageAutoModerationAction] by Auto Moderation or + * [content] was not part of any message. + */ + public val message: MessageBehavior? + get() { + return MessageBehavior(channelId ?: return null, messageId ?: return null, kord) + } + + /** + * The ID of any system Auto Moderation [Message] posted as a result of the [action]. + * + * This will be `null` if the [action] is not of type [SendAlertMessageAutoModerationAction]. + */ + public val alertSystemMessageId: Snowflake? get() = data.alertSystemMessageId.value + + /** + * The behavior of any system Auto Moderation [Message] posted as a result of the [action]. + * + * This will be `null` if the [action] is not of type [SendAlertMessageAutoModerationAction]. + */ + public val alertSystemMessage: MessageBehavior? + get() { + val channelId = (action as? SendAlertMessageAutoModerationAction)?.channelId ?: return null + return MessageBehavior(channelId, alertSystemMessageId ?: return null, kord) + } + + /** + * The user generated text content. + * + * The [MessageContent] intent is required to receive non-empty values. + */ + public val content: String get() = data.content + + /** + * The word or phrase configured in the [rule] that triggered it. + * + * This might be `null` if the [rule] was triggered for another reason. + */ + public val matchedKeyword: String? get() = data.matchedKeyword + + /** + * The substring in [content] that triggered the rule. + * + * This might be `null` for the same reasons as [matchedKeyword]. + * + * The [MessageContent] intent is required to receive non-empty values. + */ + public val matchedContent: String? get() = data.matchedContent + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationActionExecutionEvent = + AutoModerationActionExecutionEvent(data, kord, shard, customContext, strategy.supply(kord)) + + override fun toString(): String = "AutoModerationActionExecutionEvent(data=$data, kord=$kord, shard=$shard, " + + "customContext=$customContext, supplier=$supplier)" +} diff --git a/core/src/main/kotlin/event/automoderation/AutoModerationEvent.kt b/core/src/main/kotlin/event/automoderation/AutoModerationEvent.kt new file mode 100644 index 000000000000..1c5ab9909446 --- /dev/null +++ b/core/src/main/kotlin/event/automoderation/AutoModerationEvent.kt @@ -0,0 +1,52 @@ +package dev.kord.core.event.automoderation + +import dev.kord.common.entity.Permission.ManageGuild +import dev.kord.common.entity.Snowflake +import dev.kord.common.exception.RequestException +import dev.kord.core.behavior.GuildBehavior +import dev.kord.core.behavior.automoderation.TypedAutoModerationRuleBehavior +import dev.kord.core.entity.Guild +import dev.kord.core.entity.Strategizable +import dev.kord.core.entity.automoderation.AutoModerationRule +import dev.kord.core.event.Event +import dev.kord.core.exception.EntityNotFoundException +import dev.kord.core.supplier.EntitySupplyStrategy + +/** + * An [Event] that is associated with an [AutoModerationRule]. + * + * Events of this type are only sent to bot users which have the [ManageGuild] permission. + */ +public sealed interface AutoModerationEvent : Event, Strategizable { + + /** The ID of the [AutoModerationRule] this event is associated with. */ + public val ruleId: Snowflake + + /** The behavior of the [AutoModerationRule] this event is associated with. */ + public val rule: TypedAutoModerationRuleBehavior + + /** The ID of the [Guild] this event is for. */ + public val guildId: Snowflake + + /** The behavior of the [Guild] this event is for. */ + public val guild: GuildBehavior get() = GuildBehavior(guildId, kord) + + /** + * Requests to get the [Guild] this event is for. Returns `null` if it wasn't found. + * + * @throws RequestException if anything went wrong during the request. + */ + public suspend fun getGuildOrNull(): Guild? = supplier.getGuildOrNull(guildId) + + /** + * Requests to get the [Guild] this event is for. + * + * @throws RequestException if anything went wrong during the request. + * @throws EntityNotFoundException if the [Guild] wasn't found. + */ + public suspend fun getGuild(): Guild = supplier.getGuild(guildId) + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationEvent + + override fun toString(): String +} diff --git a/core/src/main/kotlin/event/automoderation/AutoModerationRuleConfigurationEvent.kt b/core/src/main/kotlin/event/automoderation/AutoModerationRuleConfigurationEvent.kt new file mode 100644 index 000000000000..0e13e0454619 --- /dev/null +++ b/core/src/main/kotlin/event/automoderation/AutoModerationRuleConfigurationEvent.kt @@ -0,0 +1,93 @@ +package dev.kord.core.event.automoderation + +import dev.kord.common.entity.Permission.ManageGuild +import dev.kord.common.entity.Snowflake +import dev.kord.core.Kord +import dev.kord.core.entity.automoderation.AutoModerationRule +import dev.kord.core.supplier.EntitySupplier +import dev.kord.core.supplier.EntitySupplyStrategy + +/** + * An [AutoModerationEvent] that is sent when an [AutoModerationRule] is configured (i.e. + * [created][AutoModerationRuleCreateEvent], [updated][AutoModerationRuleUpdateEvent] or + * [deleted][AutoModerationRuleDeleteEvent]). + * + * Events of this type are only sent to bot users which have the [ManageGuild] permission. + */ +public sealed interface AutoModerationRuleConfigurationEvent : AutoModerationEvent { + + /** The ID of the [rule]. */ + override val ruleId: Snowflake get() = rule.id + + /** The [AutoModerationRule] that was configured. */ + override val rule: AutoModerationRule + + override val guildId: Snowflake get() = rule.guildId + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRuleConfigurationEvent +} + +/** + * An [AutoModerationRuleConfigurationEvent] that is sent when an [AutoModerationRule] is created. + * + * This event is only sent to bot users which have the [ManageGuild] permission. + */ +public class AutoModerationRuleCreateEvent( + /** The [AutoModerationRule] that was created. */ + override val rule: AutoModerationRule, + override val kord: Kord, + override val shard: Int, + override val customContext: Any?, + override val supplier: EntitySupplier = kord.defaultSupplier, +) : AutoModerationRuleConfigurationEvent { + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRuleCreateEvent = + AutoModerationRuleCreateEvent(rule, kord, shard, customContext, strategy.supply(kord)) + + override fun toString(): String = "AutoModerationRuleCreateEvent(rule=$rule, kord=$kord, shard=$shard, " + + "customContext=$customContext, supplier=$supplier)" +} + +/** + * An [AutoModerationRuleConfigurationEvent] that is sent when an [AutoModerationRule] is updated. + * + * This event is only sent to bot users which have the [ManageGuild] permission. + */ +public class AutoModerationRuleUpdateEvent( + /** The [AutoModerationRule] that was updated. */ + override val rule: AutoModerationRule, + /** The [rule] as found in [cache][Kord.cache] before the update. */ + public val old: AutoModerationRule?, + override val kord: Kord, + override val shard: Int, + override val customContext: Any?, + override val supplier: EntitySupplier = kord.defaultSupplier, +) : AutoModerationRuleConfigurationEvent { + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRuleUpdateEvent = + AutoModerationRuleUpdateEvent(rule, old, kord, shard, customContext, strategy.supply(kord)) + + override fun toString(): String = "AutoModerationRuleUpdateEvent(rule=$rule, old=$old, kord=$kord, shard=$shard, " + + "customContext=$customContext, supplier=$supplier)" +} + +/** + * An [AutoModerationRuleConfigurationEvent] that is sent when an [AutoModerationRule] is deleted. + * + * This event is only sent to bot users which have the [ManageGuild] permission. + */ +public class AutoModerationRuleDeleteEvent( + /** The [AutoModerationRule] that was deleted. */ + override val rule: AutoModerationRule, + override val kord: Kord, + override val shard: Int, + override val customContext: Any?, + override val supplier: EntitySupplier = kord.defaultSupplier, +) : AutoModerationRuleConfigurationEvent { + + override fun withStrategy(strategy: EntitySupplyStrategy<*>): AutoModerationRuleDeleteEvent = + AutoModerationRuleDeleteEvent(rule, kord, shard, customContext, strategy.supply(kord)) + + override fun toString(): String = "AutoModerationRuleDeleteEvent(rule=$rule, kord=$kord, shard=$shard, " + + "customContext=$customContext, supplier=$supplier)" +} diff --git a/core/src/main/kotlin/event/automoderation/data/AutoModerationActionExecutionEventData.kt b/core/src/main/kotlin/event/automoderation/data/AutoModerationActionExecutionEventData.kt new file mode 100644 index 000000000000..a5f50c4a9cbb --- /dev/null +++ b/core/src/main/kotlin/event/automoderation/data/AutoModerationActionExecutionEventData.kt @@ -0,0 +1,42 @@ +package dev.kord.core.event.automoderation.data + +import dev.kord.common.entity.AutoModerationRuleTriggerType +import dev.kord.common.entity.Snowflake +import dev.kord.common.entity.optional.OptionalSnowflake +import dev.kord.core.cache.data.AutoModerationActionData +import dev.kord.gateway.DiscordAutoModerationActionExecution +import kotlinx.serialization.Serializable + +@Serializable +public data class AutoModerationActionExecutionEventData( + val guildId: Snowflake, + val action: AutoModerationActionData, + val ruleId: Snowflake, + val ruleTriggerType: AutoModerationRuleTriggerType, + val userId: Snowflake, + val channelId: OptionalSnowflake = OptionalSnowflake.Missing, + val messageId: OptionalSnowflake = OptionalSnowflake.Missing, + val alertSystemMessageId: OptionalSnowflake = OptionalSnowflake.Missing, + val content: String, + val matchedKeyword: String?, + val matchedContent: String?, +) { + public companion object { + public fun from(entity: DiscordAutoModerationActionExecution): AutoModerationActionExecutionEventData = + with(entity) { + AutoModerationActionExecutionEventData( + guildId = guildId, + action = AutoModerationActionData.from(action), + ruleId = ruleId, + ruleTriggerType = ruleTriggerType, + userId = userId, + channelId = channelId, + messageId = messageId, + alertSystemMessageId = alertSystemMessageId, + content = content, + matchedKeyword = matchedKeyword, + matchedContent = matchedContent, + ) + } + } +} diff --git a/core/src/main/kotlin/exception/EntityNotFoundException.kt b/core/src/main/kotlin/exception/EntityNotFoundException.kt index 70be3444c478..a8747b3cf664 100644 --- a/core/src/main/kotlin/exception/EntityNotFoundException.kt +++ b/core/src/main/kotlin/exception/EntityNotFoundException.kt @@ -98,5 +98,8 @@ public class EntityNotFoundException : Exception { throw EntityNotFoundException( "Followup message with id $messageId for interaction with token $token was not found." ) + + public inline fun autoModerationRuleNotFound(guildId: Snowflake, ruleId: Snowflake): Nothing = + guildEntityNotFound("Auto Moderation Rule", guildId, ruleId) } } diff --git a/core/src/main/kotlin/gateway/DefaultMasterGateway.kt b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt index e6e670ed64e2..411c85afcb28 100644 --- a/core/src/main/kotlin/gateway/DefaultMasterGateway.kt +++ b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt @@ -1,11 +1,9 @@ package dev.kord.core.gateway import dev.kord.gateway.Gateway -import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow -import kotlinx.coroutines.flow.flattenMerge import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.merge import kotlin.time.Duration import kotlin.time.Duration.Companion.microseconds @@ -28,10 +26,9 @@ public class DefaultMasterGateway( } - @OptIn(FlowPreview::class) - override val events: Flow = gateways.entries.asFlow() + override val events: Flow = gateways.entries .map { (shard, gateway) -> gateway.events.map { ShardEvent(it, gateway, shard) } } - .flattenMerge(gateways.size.coerceAtLeast(1)) + .merge() override fun toString(): String { diff --git a/core/src/main/kotlin/gateway/handler/AutoModerationEventHandler.kt b/core/src/main/kotlin/gateway/handler/AutoModerationEventHandler.kt new file mode 100644 index 000000000000..da173374b3fe --- /dev/null +++ b/core/src/main/kotlin/gateway/handler/AutoModerationEventHandler.kt @@ -0,0 +1,87 @@ +package dev.kord.core.gateway.handler + +import dev.kord.cache.api.put +import dev.kord.cache.api.query +import dev.kord.cache.api.remove +import dev.kord.core.Kord +import dev.kord.core.cache.data.AutoModerationRuleData +import dev.kord.core.cache.idEq +import dev.kord.core.entity.automoderation.AutoModerationRule +import dev.kord.core.event.automoderation.* +import dev.kord.core.event.automoderation.data.AutoModerationActionExecutionEventData +import dev.kord.gateway.* + +internal class AutoModerationEventHandler : BaseGatewayEventHandler() { + + override suspend fun handle( + event: Event, + shard: Int, + kord: Kord, + context: LazyContext?, + ): AutoModerationEvent? = when (event) { + is AutoModerationRuleCreate -> handleRuleCreate(event, shard, kord, context) + is AutoModerationRuleUpdate -> handleRuleUpdate(event, shard, kord, context) + is AutoModerationRuleDelete -> handleRuleDelete(event, shard, kord, context) + is AutoModerationActionExecution -> AutoModerationActionExecutionEvent( + data = AutoModerationActionExecutionEventData.from(event.actionExecution), + kord = kord, + shard = shard, + customContext = context?.get(), + ) + else -> null + } + + + private suspend fun handleRuleCreate( + event: AutoModerationRuleCreate, + shard: Int, + kord: Kord, + context: LazyContext?, + ): AutoModerationRuleCreateEvent { + val data = AutoModerationRuleData.from(event.rule) + kord.cache.put(data) + + val rule = AutoModerationRule(data, kord) + return AutoModerationRuleCreateEvent(rule = rule, kord = kord, shard = shard, customContext = context?.get()) + } + + private suspend fun handleRuleUpdate( + event: AutoModerationRuleUpdate, + shard: Int, + kord: Kord, + context: LazyContext?, + ): AutoModerationRuleUpdateEvent { + val data = AutoModerationRuleData.from(event.rule) + val oldData = kord.cache.query { + idEq(AutoModerationRuleData::id, data.id) + idEq(AutoModerationRuleData::guildId, data.guildId) + }.singleOrNull() + kord.cache.put(data) + + val rule = AutoModerationRule(data, kord) + val old = oldData?.let { AutoModerationRule(it, kord) } + return AutoModerationRuleUpdateEvent( + rule = rule, + old = old, + kord = kord, + shard = shard, + customContext = context?.get(), + ) + } + + private suspend fun handleRuleDelete( + event: AutoModerationRuleDelete, + shard: Int, + kord: Kord, + context: LazyContext?, + ): AutoModerationRuleDeleteEvent { + val data = AutoModerationRuleData.from(event.rule) + kord.cache.remove { + idEq(AutoModerationRuleData::id, data.id) + idEq(AutoModerationRuleData::guildId, data.guildId) + } + + val rule = AutoModerationRule(data, kord) + return AutoModerationRuleDeleteEvent(rule = rule, kord = kord, shard = shard, customContext = context?.get()) + } +} diff --git a/core/src/main/kotlin/gateway/handler/DefaultGatewayEventInterceptor.kt b/core/src/main/kotlin/gateway/handler/DefaultGatewayEventInterceptor.kt index 9b350124a923..f53de35f04ba 100644 --- a/core/src/main/kotlin/gateway/handler/DefaultGatewayEventInterceptor.kt +++ b/core/src/main/kotlin/gateway/handler/DefaultGatewayEventInterceptor.kt @@ -36,15 +36,16 @@ public class DefaultGatewayEventInterceptor @KordPreview public constructor( public constructor() : this(customContextCreator = null) private val listeners = listOf( - MessageEventHandler(), + AutoModerationEventHandler(), ChannelEventHandler(), - ThreadEventHandler(), GuildEventHandler(), + InteractionEventHandler(), LifeCycleEventHandler(), + MessageEventHandler(), + ThreadEventHandler(), UserEventHandler(), VoiceEventHandler(), WebhookEventHandler(), - InteractionEventHandler() ) override suspend fun handle(event: ShardEvent, kord: Kord): CoreEvent? { diff --git a/core/src/main/kotlin/supplier/CacheEntitySupplier.kt b/core/src/main/kotlin/supplier/CacheEntitySupplier.kt index 04debe6b0b71..f5634aad5533 100644 --- a/core/src/main/kotlin/supplier/CacheEntitySupplier.kt +++ b/core/src/main/kotlin/supplier/CacheEntitySupplier.kt @@ -15,6 +15,7 @@ import dev.kord.core.entity.* import dev.kord.core.entity.application.ApplicationCommandPermissions import dev.kord.core.entity.application.GlobalApplicationCommand import dev.kord.core.entity.application.GuildApplicationCommand +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.TopGuildChannel import dev.kord.core.entity.channel.thread.ThreadChannel @@ -584,6 +585,20 @@ public class CacheEntitySupplier(private val kord: Kord) : EntitySupplier { idEq(GuildScheduledEventData::guildId, guildId) }.asFlow().map { GuildScheduledEvent(it, kord) } + override fun getAutoModerationRules(guildId: Snowflake): Flow = + cache.query { idEq(AutoModerationRuleData::guildId, guildId) } + .asFlow() + .map { AutoModerationRule(it, kord) } + + override suspend fun getAutoModerationRuleOrNull(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule? = + cache + .query { + idEq(AutoModerationRuleData::id, ruleId) + idEq(AutoModerationRuleData::guildId, guildId) + } + .singleOrNull() + ?.let { AutoModerationRule(it, kord) } + override fun toString(): String = "CacheEntitySupplier(cache=$cache)" } diff --git a/core/src/main/kotlin/supplier/EntitySupplier.kt b/core/src/main/kotlin/supplier/EntitySupplier.kt index 8d3541e61e40..153ad6190d75 100644 --- a/core/src/main/kotlin/supplier/EntitySupplier.kt +++ b/core/src/main/kotlin/supplier/EntitySupplier.kt @@ -1,12 +1,14 @@ package dev.kord.core.supplier import dev.kord.common.entity.ChannelType.Unknown +import dev.kord.common.entity.Permission.ManageGuild import dev.kord.common.entity.Snowflake import dev.kord.common.exception.RequestException import dev.kord.core.entity.* import dev.kord.core.entity.application.ApplicationCommandPermissions import dev.kord.core.entity.application.GlobalApplicationCommand import dev.kord.core.entity.application.GuildApplicationCommand +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.MessageChannel import dev.kord.core.entity.channel.TopGuildChannel @@ -609,6 +611,37 @@ public interface EntitySupplier { public fun getNitroStickerPacks(): Flow public fun getGuildStickers(guildId: Snowflake): Flow + + /** + * Requests to get all [AutoModerationRule]s currently configured for the [Guild] with the given [guildId]. + * + * This requires the [ManageGuild] permission. + * + * The returned flow is lazily executed, any [RequestException] will be thrown on + * [terminal operators](https://kotlinlang.org/docs/reference/coroutines/flow.html#terminal-flow-operators) instead. + */ + public fun getAutoModerationRules(guildId: Snowflake): Flow + + /** + * Requests an [AutoModerationRule] by its [id][ruleId]. Returns `null` if it wasn't found. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if something went wrong during the request. + */ + public suspend fun getAutoModerationRuleOrNull(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule? + + /** + * Requests an [AutoModerationRule] by its [id][ruleId]. + * + * This requires the [ManageGuild] permission. + * + * @throws RequestException if something went wrong during the request. + * @throws EntityNotFoundException if the [AutoModerationRule] wasn't found. + */ + public suspend fun getAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule = + getAutoModerationRuleOrNull(guildId, ruleId) + ?: EntityNotFoundException.autoModerationRuleNotFound(guildId, ruleId) } diff --git a/core/src/main/kotlin/supplier/FallbackEntitySupplier.kt b/core/src/main/kotlin/supplier/FallbackEntitySupplier.kt index 01d25b03fe1d..73e532554b93 100644 --- a/core/src/main/kotlin/supplier/FallbackEntitySupplier.kt +++ b/core/src/main/kotlin/supplier/FallbackEntitySupplier.kt @@ -5,6 +5,7 @@ import dev.kord.core.entity.* import dev.kord.core.entity.application.ApplicationCommandPermissions import dev.kord.core.entity.application.GlobalApplicationCommand import dev.kord.core.entity.application.GuildApplicationCommand +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.TopGuildChannel import dev.kord.core.entity.channel.thread.ThreadChannel @@ -270,5 +271,12 @@ private class FallbackEntitySupplier(val first: EntitySupplier, val second: Enti first.getGuildStickers(guildId).switchIfEmpty(second.getGuildStickers(guildId)) + override fun getAutoModerationRules(guildId: Snowflake): Flow = + first.getAutoModerationRules(guildId).switchIfEmpty(second.getAutoModerationRules(guildId)) + + override suspend fun getAutoModerationRuleOrNull(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule? = + first.getAutoModerationRuleOrNull(guildId, ruleId) ?: second.getAutoModerationRuleOrNull(guildId, ruleId) + + override fun toString(): String = "FallbackEntitySupplier(first=$first, second=$second)" } diff --git a/core/src/main/kotlin/supplier/RestEntitySupplier.kt b/core/src/main/kotlin/supplier/RestEntitySupplier.kt index 41bc8cb3b216..e8cf4dcf7780 100644 --- a/core/src/main/kotlin/supplier/RestEntitySupplier.kt +++ b/core/src/main/kotlin/supplier/RestEntitySupplier.kt @@ -10,6 +10,7 @@ import dev.kord.core.entity.* import dev.kord.core.entity.application.ApplicationCommandPermissions import dev.kord.core.entity.application.GlobalApplicationCommand import dev.kord.core.entity.application.GuildApplicationCommand +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.TopGuildChannel import dev.kord.core.entity.channel.thread.ThreadChannel @@ -23,7 +24,7 @@ import dev.kord.rest.json.request.ListThreadsBySnowflakeRequest import dev.kord.rest.json.request.ListThreadsByTimestampRequest import dev.kord.rest.request.RestRequestException import dev.kord.rest.route.Position -import dev.kord.rest.service.* +import dev.kord.rest.service.RestClient import kotlinx.coroutines.flow.* import kotlinx.datetime.Instant import kotlin.contracts.InvocationKind @@ -41,19 +42,28 @@ import kotlin.math.min */ public class RestEntitySupplier(public val kord: Kord) : EntitySupplier { - private inline val auditLog: AuditLogService get() = kord.rest.auditLog - private inline val channel: ChannelService get() = kord.rest.channel - private inline val emoji: EmojiService get() = kord.rest.emoji - private inline val guild: GuildService get() = kord.rest.guild - private inline val invite: InviteService get() = kord.rest.invite - private inline val user: UserService get() = kord.rest.user - private inline val voice: VoiceService get() = kord.rest.voice - private inline val webhook: WebhookService get() = kord.rest.webhook - private inline val application: ApplicationService get() = kord.rest.application - private inline val template: TemplateService get() = kord.rest.template - private inline val interaction: InteractionService get() = kord.rest.interaction - private inline val stageInstance: StageInstanceService get() = kord.rest.stageInstance - private inline val sticker: StickerService get() = kord.rest.sticker + // order like in docs: + + // interactions + private inline val interaction get() = kord.rest.interaction + + // resources + private inline val auditLog get() = kord.rest.auditLog + private inline val autoModeration get() = kord.rest.autoModeration + private inline val channel get() = kord.rest.channel + private inline val emoji get() = kord.rest.emoji + private inline val guild get() = kord.rest.guild + private inline val template get() = kord.rest.template + private inline val invite get() = kord.rest.invite + private inline val stageInstance get() = kord.rest.stageInstance + private inline val sticker get() = kord.rest.sticker + private inline val user get() = kord.rest.user + private inline val voice get() = kord.rest.voice + private inline val webhook get() = kord.rest.webhook + + // topics + private inline val application get() = kord.rest.application + // max batchSize/limit: see https://discord.com/developers/docs/resources/user#get-current-user-guilds override val guilds: Flow @@ -579,6 +589,22 @@ public class RestEntitySupplier(public val kord: Kord) : EntitySupplier { } } + override fun getAutoModerationRules(guildId: Snowflake): Flow = flow { + val responses = autoModeration.listAutoModerationRulesForGuild(guildId) + + responses.forEach { response -> + val data = AutoModerationRuleData.from(response) + emit(AutoModerationRule(data, kord)) + } + } + + override suspend fun getAutoModerationRuleOrNull(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule? = + catchNotFound { + val response = autoModeration.getAutoModerationRule(guildId, ruleId) + val data = AutoModerationRuleData.from(response) + AutoModerationRule(data, kord) + } + override suspend fun getApplicationCommandPermissionsOrNull( applicationId: Snowflake, guildId: Snowflake, diff --git a/core/src/main/kotlin/supplier/StoreEntitySupplier.kt b/core/src/main/kotlin/supplier/StoreEntitySupplier.kt index 42a45f08d1d0..5bcd064ee531 100644 --- a/core/src/main/kotlin/supplier/StoreEntitySupplier.kt +++ b/core/src/main/kotlin/supplier/StoreEntitySupplier.kt @@ -8,6 +8,7 @@ import dev.kord.core.entity.* import dev.kord.core.entity.application.ApplicationCommandPermissions import dev.kord.core.entity.application.GlobalApplicationCommand import dev.kord.core.entity.application.GuildApplicationCommand +import dev.kord.core.entity.automoderation.AutoModerationRule import dev.kord.core.entity.channel.Channel import dev.kord.core.entity.channel.TopGuildChannel import dev.kord.core.entity.channel.thread.ThreadChannel @@ -308,6 +309,13 @@ public class StoreEntitySupplier( return storeOnEach(supplier.getGuildApplicationCommandPermissions(applicationId, guildId)) { it.data } } + override fun getAutoModerationRules(guildId: Snowflake): Flow = + storeOnEach(supplier.getAutoModerationRules(guildId)) { it.data } + + override suspend fun getAutoModerationRuleOrNull(guildId: Snowflake, ruleId: Snowflake): AutoModerationRule? = + storeAndReturn(supplier.getAutoModerationRuleOrNull(guildId, ruleId)) { it.data } + + private inline fun storeOnEach(source: Flow, crossinline transform: (T) -> R): Flow { return source.onEach { fetchedEntity -> storeAndReturn(fetchedEntity) { transform(it) } diff --git a/gateway/api/gateway.api b/gateway/api/gateway.api index bad679f1ef82..098721301252 100644 --- a/gateway/api/gateway.api +++ b/gateway/api/gateway.api @@ -50,6 +50,58 @@ public final class dev/kord/gateway/ApplicationCommandUpdate : dev/kord/gateway/ public fun toString ()Ljava/lang/String; } +public final class dev/kord/gateway/AutoModerationActionExecution : dev/kord/gateway/DispatchEvent { + public fun (Ldev/kord/gateway/DiscordAutoModerationActionExecution;Ljava/lang/Integer;)V + public final fun component1 ()Ldev/kord/gateway/DiscordAutoModerationActionExecution; + public final fun component2 ()Ljava/lang/Integer; + public final fun copy (Ldev/kord/gateway/DiscordAutoModerationActionExecution;Ljava/lang/Integer;)Ldev/kord/gateway/AutoModerationActionExecution; + public static synthetic fun copy$default (Ldev/kord/gateway/AutoModerationActionExecution;Ldev/kord/gateway/DiscordAutoModerationActionExecution;Ljava/lang/Integer;ILjava/lang/Object;)Ldev/kord/gateway/AutoModerationActionExecution; + public fun equals (Ljava/lang/Object;)Z + public final fun getActionExecution ()Ldev/kord/gateway/DiscordAutoModerationActionExecution; + public fun getSequence ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/gateway/AutoModerationRuleCreate : dev/kord/gateway/DispatchEvent { + public fun (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)V + public final fun component1 ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public final fun component2 ()Ljava/lang/Integer; + public final fun copy (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)Ldev/kord/gateway/AutoModerationRuleCreate; + public static synthetic fun copy$default (Ldev/kord/gateway/AutoModerationRuleCreate;Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;ILjava/lang/Object;)Ldev/kord/gateway/AutoModerationRuleCreate; + public fun equals (Ljava/lang/Object;)Z + public final fun getRule ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public fun getSequence ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/gateway/AutoModerationRuleDelete : dev/kord/gateway/DispatchEvent { + public fun (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)V + public final fun component1 ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public final fun component2 ()Ljava/lang/Integer; + public final fun copy (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)Ldev/kord/gateway/AutoModerationRuleDelete; + public static synthetic fun copy$default (Ldev/kord/gateway/AutoModerationRuleDelete;Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;ILjava/lang/Object;)Ldev/kord/gateway/AutoModerationRuleDelete; + public fun equals (Ljava/lang/Object;)Z + public final fun getRule ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public fun getSequence ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class dev/kord/gateway/AutoModerationRuleUpdate : dev/kord/gateway/DispatchEvent { + public fun (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)V + public final fun component1 ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public final fun component2 ()Ljava/lang/Integer; + public final fun copy (Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;)Ldev/kord/gateway/AutoModerationRuleUpdate; + public static synthetic fun copy$default (Ldev/kord/gateway/AutoModerationRuleUpdate;Ldev/kord/common/entity/DiscordAutoModerationRule;Ljava/lang/Integer;ILjava/lang/Object;)Ldev/kord/gateway/AutoModerationRuleUpdate; + public fun equals (Ljava/lang/Object;)Z + public final fun getRule ()Ldev/kord/common/entity/DiscordAutoModerationRule; + public fun getSequence ()Ljava/lang/Integer; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class dev/kord/gateway/ChannelCreate : dev/kord/gateway/DispatchEvent { public fun (Ldev/kord/common/entity/DiscordChannel;Ljava/lang/Integer;)V public final fun component1 ()Ldev/kord/common/entity/DiscordChannel; @@ -218,6 +270,57 @@ public final class dev/kord/gateway/DefaultGatewayKt { public static synthetic fun DefaultGateway$default (Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/kord/gateway/DefaultGateway; } +public final class dev/kord/gateway/DiscordAutoModerationActionExecution { + public static final field Companion Ldev/kord/gateway/DiscordAutoModerationActionExecution$Companion; + public synthetic fun (ILdev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V + public synthetic fun (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/Snowflake; + public final fun component10 ()Ljava/lang/String; + public final fun component11 ()Ljava/lang/String; + public final fun component2 ()Ldev/kord/common/entity/DiscordAutoModerationAction; + public final fun component3 ()Ldev/kord/common/entity/Snowflake; + public final fun component4 ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun component5 ()Ldev/kord/common/entity/Snowflake; + public final fun component6 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component7 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component8 ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun component9 ()Ljava/lang/String; + public final fun copy (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ldev/kord/gateway/DiscordAutoModerationActionExecution; + public static synthetic fun copy$default (Ldev/kord/gateway/DiscordAutoModerationActionExecution;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/DiscordAutoModerationAction;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ldev/kord/gateway/DiscordAutoModerationActionExecution; + public fun equals (Ljava/lang/Object;)Z + public final fun getAction ()Ldev/kord/common/entity/DiscordAutoModerationAction; + public final fun getAlertSystemMessageId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getChannelId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getContent ()Ljava/lang/String; + public final fun getGuildId ()Ldev/kord/common/entity/Snowflake; + public final fun getMatchedContent ()Ljava/lang/String; + public final fun getMatchedKeyword ()Ljava/lang/String; + public final fun getMessageId ()Ldev/kord/common/entity/optional/OptionalSnowflake; + public final fun getRuleId ()Ldev/kord/common/entity/Snowflake; + public final fun getRuleTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun getUserId ()Ldev/kord/common/entity/Snowflake; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/gateway/DiscordAutoModerationActionExecution;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/gateway/DiscordAutoModerationActionExecution$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/gateway/DiscordAutoModerationActionExecution$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/gateway/DiscordAutoModerationActionExecution; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/gateway/DiscordAutoModerationActionExecution;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/gateway/DiscordAutoModerationActionExecution$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/gateway/DiscordCreatedInvite { public static final field Companion Ldev/kord/gateway/DiscordCreatedInvite$Companion; public synthetic fun (ILdev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlinx/datetime/Instant;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Lkotlin/time/Duration;ILdev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ZILkotlinx/serialization/internal/SerializationConstructorMarker;Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -1048,6 +1151,14 @@ public abstract class dev/kord/gateway/Intent { public final fun getCode ()Ldev/kord/common/DiscordBitSet; } +public final class dev/kord/gateway/Intent$AutoModerationConfiguration : dev/kord/gateway/Intent { + public static final field INSTANCE Ldev/kord/gateway/Intent$AutoModerationConfiguration; +} + +public final class dev/kord/gateway/Intent$AutoModerationExecution : dev/kord/gateway/Intent { + public static final field INSTANCE Ldev/kord/gateway/Intent$AutoModerationExecution; +} + public final class dev/kord/gateway/Intent$Companion { public final fun getValues ()Ljava/util/Set; } diff --git a/gateway/src/main/kotlin/Command.kt b/gateway/src/main/kotlin/Command.kt index aab9b7a8f9ff..0ab1b88bf8ab 100644 --- a/gateway/src/main/kotlin/Command.kt +++ b/gateway/src/main/kotlin/Command.kt @@ -90,8 +90,8 @@ internal data class Identify( val intents: Intents, ) : Command() { override fun toString(): String = - "Identify(token=hunter2,properties=$properties,compress=$compress,largeThreshold=$largeThreshold," + - "shard=$shard,presence=$presence" + "Identify(token=hunter2, properties=$properties, compress=$compress, largeThreshold=$largeThreshold, " + + "shard=$shard, presence=$presence, intents=$intents)" } @Serializable @@ -133,7 +133,7 @@ internal data class Resume( @SerialName("seq") val sequenceNumber: Int, ) : Command() { - override fun toString(): String = "Resume(token=hunter2,sessionId=$sessionId,sequenceNumber:$sequenceNumber)" + override fun toString(): String = "Resume(token=hunter2, sessionId=$sessionId, sequenceNumber=$sequenceNumber)" } /** diff --git a/gateway/src/main/kotlin/Event.kt b/gateway/src/main/kotlin/Event.kt index 4caa7cb54073..d5fc1f0ee52b 100644 --- a/gateway/src/main/kotlin/Event.kt +++ b/gateway/src/main/kotlin/Event.kt @@ -129,6 +129,26 @@ public sealed class Event { descriptor, index, DiscordGuildApplicationCommandPermissions.serializer() ), sequence ) + "AUTO_MODERATION_RULE_CREATE" -> AutoModerationRuleCreate( + rule = decoder.decodeSerializableElement(descriptor, index, DiscordAutoModerationRule.serializer()), + sequence, + ) + "AUTO_MODERATION_RULE_UPDATE" -> AutoModerationRuleUpdate( + rule = decoder.decodeSerializableElement(descriptor, index, DiscordAutoModerationRule.serializer()), + sequence, + ) + "AUTO_MODERATION_RULE_DELETE" -> AutoModerationRuleDelete( + rule = decoder.decodeSerializableElement(descriptor, index, DiscordAutoModerationRule.serializer()), + sequence, + ) + "AUTO_MODERATION_ACTION_EXECUTION" -> AutoModerationActionExecution( + actionExecution = decoder.decodeSerializableElement( + descriptor, + index, + DiscordAutoModerationActionExecution.serializer(), + ), + sequence, + ) "CHANNEL_CREATE" -> ChannelCreate( decoder.decodeSerializableElement( descriptor, @@ -585,6 +605,44 @@ public data class ApplicationCommandPermissionsUpdate( override val sequence: Int? ) : DispatchEvent() +public data class AutoModerationRuleCreate(val rule: DiscordAutoModerationRule, override val sequence: Int?) : + DispatchEvent() + +public data class AutoModerationRuleUpdate(val rule: DiscordAutoModerationRule, override val sequence: Int?) : + DispatchEvent() + +public data class AutoModerationRuleDelete(val rule: DiscordAutoModerationRule, override val sequence: Int?) : + DispatchEvent() + +public data class AutoModerationActionExecution( + val actionExecution: DiscordAutoModerationActionExecution, + override val sequence: Int?, +) : DispatchEvent() + +@Serializable +public data class DiscordAutoModerationActionExecution( + @SerialName("guild_id") + val guildId: Snowflake, + val action: DiscordAutoModerationAction, + @SerialName("rule_id") + val ruleId: Snowflake, + @SerialName("rule_trigger_type") + val ruleTriggerType: AutoModerationRuleTriggerType, + @SerialName("user_id") + val userId: Snowflake, + @SerialName("channel_id") + val channelId: OptionalSnowflake = OptionalSnowflake.Missing, + @SerialName("message_id") + val messageId: OptionalSnowflake = OptionalSnowflake.Missing, + @SerialName("alert_system_message_id") + val alertSystemMessageId: OptionalSnowflake = OptionalSnowflake.Missing, + val content: String, + @SerialName("matched_keyword") + val matchedKeyword: String?, + @SerialName("matched_content") + val matchedContent: String?, +) + public data class ChannelCreate(val channel: DiscordChannel, override val sequence: Int?) : DispatchEvent() public data class ChannelUpdate(val channel: DiscordChannel, override val sequence: Int?) : DispatchEvent() public data class ChannelDelete(val channel: DiscordChannel, override val sequence: Int?) : DispatchEvent() diff --git a/gateway/src/main/kotlin/Gateway.kt b/gateway/src/main/kotlin/Gateway.kt index 3768113c0140..dcafb555a4c1 100644 --- a/gateway/src/main/kotlin/Gateway.kt +++ b/gateway/src/main/kotlin/Gateway.kt @@ -32,7 +32,7 @@ public interface Gateway : CoroutineScope { public val events: SharedFlow /** - * The duration between the last [Heartbeat] and [HeartbeatACK]. + * The duration between the last [Heartbeat][Command.Heartbeat] and [HeartbeatACK]. * * This flow will have a [value][StateFlow.value] of `null` if the gateway is not * [active][Gateway.start], or no [HeartbeatACK] has been received yet. diff --git a/gateway/src/main/kotlin/Intent.kt b/gateway/src/main/kotlin/Intent.kt index ee9f9fb0ef98..1741b8c3ce47 100644 --- a/gateway/src/main/kotlin/Intent.kt +++ b/gateway/src/main/kotlin/Intent.kt @@ -193,6 +193,20 @@ public sealed class Intent(public val code: DiscordBitSet) { */ public object GuildScheduledEvents : Intent(1 shl 16) + /** + * Enables the following events: + * - [AutoModerationRuleCreate] + * - [AutoModerationRuleUpdate] + * - [AutoModerationRuleDelete] + */ + public object AutoModerationConfiguration : Intent(1 shl 20) + + /** + * Enables the following events: + * - [AutoModerationActionExecution] + */ + public object AutoModerationExecution : Intent(1 shl 21) + public companion object { @OptIn(PrivilegedIntent::class) @@ -215,6 +229,8 @@ public sealed class Intent(public val code: DiscordBitSet) { DirectMessageTyping, MessageContent, GuildScheduledEvents, + AutoModerationConfiguration, + AutoModerationExecution, ) } } diff --git a/rest/api/rest.api b/rest/api/rest.api index 41a00bd3a011..723d3aff1aab 100644 --- a/rest/api/rest.api +++ b/rest/api/rest.api @@ -66,11 +66,14 @@ public final class dev/kord/rest/NamedFile { public final fun getUrl ()Ljava/lang/String; } -public abstract interface class dev/kord/rest/builder/AuditRequestBuilder : dev/kord/rest/builder/RequestBuilder { +public abstract interface class dev/kord/rest/builder/AuditBuilder { public abstract fun getReason ()Ljava/lang/String; public abstract fun setReason (Ljava/lang/String;)V } +public abstract interface class dev/kord/rest/builder/AuditRequestBuilder : dev/kord/rest/builder/AuditBuilder, dev/kord/rest/builder/RequestBuilder { +} + public abstract interface class dev/kord/rest/builder/RequestBuilder { public abstract fun toRequest ()Ljava/lang/Object; } @@ -89,6 +92,243 @@ public final class dev/kord/rest/builder/auditlog/AuditLogGetRequestBuilder : de public synthetic fun toRequest ()Ljava/lang/Object; } +public abstract class dev/kord/rest/builder/automoderation/AutoModerationActionBuilder : dev/kord/rest/builder/RequestBuilder { + protected fun buildMetadata ()Ldev/kord/common/entity/optional/Optional; + public abstract fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public final fun toRequest ()Ldev/kord/common/entity/DiscordAutoModerationAction; + public synthetic fun toRequest ()Ljava/lang/Object; +} + +public abstract interface class dev/kord/rest/builder/automoderation/AutoModerationRuleBuilder : dev/kord/rest/builder/AuditBuilder { + public abstract fun assignActions (Ljava/util/List;)V + public abstract fun assignEventType (Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public abstract fun assignName (Ljava/lang/String;)V + public abstract fun getActions ()Ljava/util/List; + public abstract fun getEnabled ()Ljava/lang/Boolean; + public abstract fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public abstract fun getExemptChannels ()Ljava/util/List; + public abstract fun getExemptRoles ()Ljava/util/List; + public abstract fun getName ()Ljava/lang/String; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public abstract fun setEnabled (Ljava/lang/Boolean;)V + public abstract fun setExemptChannels (Ljava/util/List;)V + public abstract fun setExemptRoles (Ljava/util/List;)V +} + +public final class dev/kord/rest/builder/automoderation/AutoModerationRuleBuilderKt { + public static final fun allowKeyword (Ldev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder;Ljava/lang/String;)V + public static final fun anywhereKeyword (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/lang/String;)V + public static final fun blockMessage (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun blockMessage$default (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static final fun exemptChannel (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Ldev/kord/common/entity/Snowflake;)V + public static final fun exemptRole (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Ldev/kord/common/entity/Snowflake;)V + public static final fun keyword (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/lang/String;)V + public static final fun prefixKeyword (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/lang/String;)V + public static final fun preset (Ldev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder;Ldev/kord/common/entity/AutoModerationRuleKeywordPresetType;)V + public static final fun sendAlertMessage (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun sendAlertMessage$default (Ldev/kord/rest/builder/automoderation/AutoModerationRuleBuilder;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static final fun suffixKeyword (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/lang/String;)V + public static final fun timeout-8Mi8wO0 (Ldev/kord/rest/builder/automoderation/TimeoutAutoModerationRuleBuilder;JLkotlin/jvm/functions/Function1;)V + public static synthetic fun timeout-8Mi8wO0$default (Ldev/kord/rest/builder/automoderation/TimeoutAutoModerationRuleBuilder;JLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +} + +public abstract class dev/kord/rest/builder/automoderation/AutoModerationRuleCreateBuilder : dev/kord/rest/builder/AuditRequestBuilder, dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder { + public synthetic fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun assignActions (Ljava/util/List;)V + public final fun assignEventType (Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public final fun assignName (Ljava/lang/String;)V + protected fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getActions ()Ljava/util/List; + public final fun getEnabled ()Ljava/lang/Boolean; + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannels ()Ljava/util/List; + public final fun getExemptRoles ()Ljava/util/List; + public final fun getName ()Ljava/lang/String; + public final fun getReason ()Ljava/lang/String; + public final fun setActions (Ljava/util/List;)V + public final fun setEnabled (Ljava/lang/Boolean;)V + public final fun setEventType (Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public final fun setExemptChannels (Ljava/util/List;)V + public final fun setExemptRoles (Ljava/util/List;)V + public final fun setName (Ljava/lang/String;)V + public final fun setReason (Ljava/lang/String;)V + public final fun toRequest ()Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest; + public synthetic fun toRequest ()Ljava/lang/Object; +} + +public abstract class dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder : dev/kord/rest/builder/AuditRequestBuilder, dev/kord/rest/builder/automoderation/AutoModerationRuleBuilder { + public final fun assignActions (Ljava/util/List;)V + public final fun assignEventType (Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public final fun assignName (Ljava/lang/String;)V + protected fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getActions ()Ljava/util/List; + public final fun getEnabled ()Ljava/lang/Boolean; + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannels ()Ljava/util/List; + public final fun getExemptRoles ()Ljava/util/List; + public final fun getName ()Ljava/lang/String; + public final fun getReason ()Ljava/lang/String; + public final fun setActions (Ljava/util/List;)V + public final fun setEnabled (Ljava/lang/Boolean;)V + public final fun setEventType (Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public final fun setExemptChannels (Ljava/util/List;)V + public final fun setExemptRoles (Ljava/util/List;)V + public final fun setName (Ljava/lang/String;)V + public final fun setReason (Ljava/lang/String;)V + public final fun toRequest ()Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest; + public synthetic fun toRequest ()Ljava/lang/Object; +} + +public final class dev/kord/rest/builder/automoderation/BlockMessageAutoModerationActionBuilder : dev/kord/rest/builder/automoderation/AutoModerationActionBuilder { + public fun ()V + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$BlockMessage; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; +} + +public abstract interface class dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TimeoutAutoModerationRuleBuilder { + public abstract fun assignKeywords (Ljava/util/List;)V + public abstract fun getKeywords ()Ljava/util/List; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; +} + +public final class dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder$DefaultImpls { + public static fun getTriggerType (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; +} + +public final class dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleCreateBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleCreateBuilder, dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder { + public fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public fun assignKeywords (Ljava/util/List;)V + public synthetic fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public fun getKeywords ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setKeywords (Ljava/util/List;)V +} + +public final class dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleModifyBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder, dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder { + public fun ()V + public fun assignKeywords (Ljava/util/List;)V + public fun getKeywords ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setKeywords (Ljava/util/List;)V +} + +public abstract interface class dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder { + public abstract fun assignPresets (Ljava/util/List;)V + public abstract fun getAllowedKeywords ()Ljava/util/List; + public abstract fun getPresets ()Ljava/util/List; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; + public abstract fun setAllowedKeywords (Ljava/util/List;)V +} + +public final class dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder$DefaultImpls { + public static fun getTriggerType (Ldev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; +} + +public final class dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleCreateBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleCreateBuilder, dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder { + public fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public fun assignPresets (Ljava/util/List;)V + public synthetic fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public fun getAllowedKeywords ()Ljava/util/List; + public fun getPresets ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setAllowedKeywords (Ljava/util/List;)V + public fun setPresets (Ljava/util/List;)V +} + +public final class dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleModifyBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder, dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder { + public fun ()V + public fun assignPresets (Ljava/util/List;)V + public fun getAllowedKeywords ()Ljava/util/List; + public fun getPresets ()Ljava/util/List; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$KeywordPreset; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setAllowedKeywords (Ljava/util/List;)V + public fun setPresets (Ljava/util/List;)V +} + +public abstract interface class dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TimeoutAutoModerationRuleBuilder { + public abstract fun assignMentionLimit (I)V + public abstract fun getMentionLimit ()Ljava/lang/Integer; + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; +} + +public final class dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleBuilder$DefaultImpls { + public static fun getTriggerType (Ldev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleBuilder;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; +} + +public final class dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleCreateBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleCreateBuilder, dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleBuilder { + public fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;I)V + public fun assignMentionLimit (I)V + public synthetic fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public fun getMentionLimit ()Ljava/lang/Integer; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setMentionLimit (I)V +} + +public final class dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleModifyBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder, dev/kord/rest/builder/automoderation/MentionSpamAutoModerationRuleBuilder { + public fun ()V + public fun assignMentionLimit (I)V + public fun getMentionLimit ()Ljava/lang/Integer; + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$MentionSpam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun setMentionLimit (Ljava/lang/Integer;)V +} + +public final class dev/kord/rest/builder/automoderation/SendAlertMessageAutoModerationActionBuilder : dev/kord/rest/builder/automoderation/AutoModerationActionBuilder { + public fun (Ldev/kord/common/entity/Snowflake;)V + public synthetic fun buildMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getChannelId ()Ldev/kord/common/entity/Snowflake; + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$SendAlertMessage; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public final fun setChannelId (Ldev/kord/common/entity/Snowflake;)V +} + +public abstract interface class dev/kord/rest/builder/automoderation/SpamAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder { + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; +} + +public final class dev/kord/rest/builder/automoderation/SpamAutoModerationRuleBuilder$DefaultImpls { + public static fun getTriggerType (Ldev/kord/rest/builder/automoderation/SpamAutoModerationRuleBuilder;)Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; +} + +public final class dev/kord/rest/builder/automoderation/SpamAutoModerationRuleCreateBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleCreateBuilder, dev/kord/rest/builder/automoderation/SpamAutoModerationRuleBuilder { + public fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;)V + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; +} + +public final class dev/kord/rest/builder/automoderation/SpamAutoModerationRuleModifyBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder, dev/kord/rest/builder/automoderation/SpamAutoModerationRuleBuilder { + public fun ()V + public fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Spam; + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; +} + +public final class dev/kord/rest/builder/automoderation/TimeoutAutoModerationActionBuilder : dev/kord/rest/builder/automoderation/AutoModerationActionBuilder { + public synthetic fun (JLkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun buildMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getDuration-UwyO8pc ()J + public fun getType ()Ldev/kord/common/entity/AutoModerationActionType$Timeout; + public synthetic fun getType ()Ldev/kord/common/entity/AutoModerationActionType; + public final fun setDuration-LRDsOJo (J)V +} + +public abstract interface class dev/kord/rest/builder/automoderation/TimeoutAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder { +} + +public abstract interface class dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleBuilder { + public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; +} + +public final class dev/kord/rest/builder/automoderation/UntypedAutoModerationRuleModifyBuilder : dev/kord/rest/builder/automoderation/AutoModerationRuleModifyBuilder { + public fun ()V + public synthetic fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun getTriggerType ()Ljava/lang/Void; +} + public final class dev/kord/rest/builder/ban/BanCreateBuilder : dev/kord/rest/builder/AuditRequestBuilder { public fun ()V public final fun getDeleteMessagesDays ()Ljava/lang/Integer; @@ -2211,6 +2451,95 @@ public final class dev/kord/rest/json/request/AutoCompleteResponseCreateRequest$ public final fun serializer (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; } +public final class dev/kord/rest/json/request/AutoModerationRuleCreateRequest { + public static final field Companion Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest$Companion; + public synthetic fun (ILjava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/optional/Optional;Ljava/util/List;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/optional/Optional;Ljava/util/List;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/optional/Optional;Ljava/util/List;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun component3 ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public final fun component4 ()Ldev/kord/common/entity/optional/Optional; + public final fun component5 ()Ljava/util/List; + public final fun component6 ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun component7 ()Ldev/kord/common/entity/optional/Optional; + public final fun component8 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/optional/Optional;Ljava/util/List;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest; + public static synthetic fun copy$default (Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Ldev/kord/common/entity/AutoModerationRuleTriggerType;Ldev/kord/common/entity/optional/Optional;Ljava/util/List;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getActions ()Ljava/util/List; + public final fun getEnabled ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun getEventType ()Ldev/kord/common/entity/AutoModerationRuleEventType; + public final fun getExemptChannels ()Ldev/kord/common/entity/optional/Optional; + public final fun getExemptRoles ()Ldev/kord/common/entity/optional/Optional; + public final fun getName ()Ljava/lang/String; + public final fun getTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public final fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/rest/json/request/AutoModerationRuleCreateRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/rest/json/request/AutoModerationRuleCreateRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/rest/json/request/AutoModerationRuleModifyRequest { + public static final field Companion Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest$Companion; + public fun ()V + public synthetic fun (ILdev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V + public fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)V + public synthetic fun (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/kord/common/entity/optional/Optional; + public final fun component2 ()Ldev/kord/common/entity/optional/Optional; + public final fun component3 ()Ldev/kord/common/entity/optional/Optional; + public final fun component4 ()Ldev/kord/common/entity/optional/Optional; + public final fun component5 ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun component6 ()Ldev/kord/common/entity/optional/Optional; + public final fun component7 ()Ldev/kord/common/entity/optional/Optional; + public final fun copy (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest; + public static synthetic fun copy$default (Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalBoolean;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getActions ()Ldev/kord/common/entity/optional/Optional; + public final fun getEnabled ()Ldev/kord/common/entity/optional/OptionalBoolean; + public final fun getEventType ()Ldev/kord/common/entity/optional/Optional; + public final fun getExemptChannels ()Ldev/kord/common/entity/optional/Optional; + public final fun getExemptRoles ()Ldev/kord/common/entity/optional/Optional; + public final fun getName ()Ldev/kord/common/entity/optional/Optional; + public final fun getTriggerMetadata ()Ldev/kord/common/entity/optional/Optional; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; + public static final fun write$Self (Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +} + +public final class dev/kord/rest/json/request/AutoModerationRuleModifyRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest$$serializer; + public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/kord/rest/json/request/AutoModerationRuleModifyRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/kord/rest/json/request/BulkDeleteRequest { public static final field Companion Ldev/kord/rest/json/request/BulkDeleteRequest$Companion; public synthetic fun (ILjava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V @@ -5597,6 +5926,30 @@ public final class dev/kord/rest/route/Route$AuditLogGet : dev/kord/rest/route/R public static final field INSTANCE Ldev/kord/rest/route/Route$AuditLogGet; } +public final class dev/kord/rest/route/Route$AutoModerationRuleCreate : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRuleCreate; +} + +public final class dev/kord/rest/route/Route$AutoModerationRuleDelete : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRuleDelete; +} + +public final class dev/kord/rest/route/Route$AutoModerationRuleGet : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRuleGet; +} + +public final class dev/kord/rest/route/Route$AutoModerationRuleId : dev/kord/rest/route/Route$Key { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRuleId; +} + +public final class dev/kord/rest/route/Route$AutoModerationRuleModify : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRuleModify; +} + +public final class dev/kord/rest/route/Route$AutoModerationRulesForGuildList : dev/kord/rest/route/Route { + public static final field INSTANCE Ldev/kord/rest/route/Route$AutoModerationRulesForGuildList; +} + public final class dev/kord/rest/route/Route$BulkMessageDeletePost : dev/kord/rest/route/Route { public static final field INSTANCE Ldev/kord/rest/route/Route$BulkMessageDeletePost; } @@ -6332,6 +6685,27 @@ public final class dev/kord/rest/service/AuditLogService : dev/kord/rest/service public final fun getAuditLogs (Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } +public final class dev/kord/rest/service/AutoModerationService : dev/kord/rest/service/RestService { + public fun (Ldev/kord/rest/request/RequestHandler;)V + public final fun createAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun createAutoModerationRule$default (Ldev/kord/rest/service/AutoModerationService;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AutoModerationRuleCreateRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun createKeywordAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun createKeywordPresetAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun createMentionSpamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;ILkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun createSpamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun deleteAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun deleteAutoModerationRule$default (Ldev/kord/rest/service/AutoModerationService;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun getAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun listAutoModerationRulesForGuild (Ldev/kord/common/entity/Snowflake;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun modifyAutoModerationRule$default (Ldev/kord/rest/service/AutoModerationService;Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ldev/kord/rest/json/request/AutoModerationRuleModifyRequest;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun modifyKeywordAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyKeywordPresetAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyMentionSpamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifySpamAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun modifyUntypedAutoModerationRule (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + public final class dev/kord/rest/service/ChannelService : dev/kord/rest/service/RestService { public fun (Ldev/kord/rest/request/RequestHandler;)V public final fun addPinnedMessage (Ldev/kord/common/entity/Snowflake;Ldev/kord/common/entity/Snowflake;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -6604,6 +6978,7 @@ public final class dev/kord/rest/service/RestClient : dev/kord/rest/service/Rest public fun (Ldev/kord/rest/request/RequestHandler;)V public final fun getApplication ()Ldev/kord/rest/service/ApplicationService; public final fun getAuditLog ()Ldev/kord/rest/service/AuditLogService; + public final fun getAutoModeration ()Ldev/kord/rest/service/AutoModerationService; public final fun getChannel ()Ldev/kord/rest/service/ChannelService; public final fun getEmoji ()Ldev/kord/rest/service/EmojiService; public final fun getGuild ()Ldev/kord/rest/service/GuildService; diff --git a/rest/src/main/kotlin/builder/RequestBuilder.kt b/rest/src/main/kotlin/builder/RequestBuilder.kt index 83ef37dbd8d9..9e5139ec54a1 100644 --- a/rest/src/main/kotlin/builder/RequestBuilder.kt +++ b/rest/src/main/kotlin/builder/RequestBuilder.kt @@ -3,14 +3,17 @@ package dev.kord.rest.builder import dev.kord.common.annotation.KordDsl @KordDsl -public interface RequestBuilder { - public fun toRequest(): T -} - -@KordDsl -public interface AuditRequestBuilder : RequestBuilder { +public interface AuditBuilder { /** * The reason for this request, this will be displayed in the audit log. */ public var reason: String? } + +@KordDsl +public interface RequestBuilder { + public fun toRequest(): T +} + +@KordDsl +public interface AuditRequestBuilder : AuditBuilder, RequestBuilder diff --git a/rest/src/main/kotlin/builder/automoderation/AutoModerationActionBuilder.kt b/rest/src/main/kotlin/builder/automoderation/AutoModerationActionBuilder.kt new file mode 100644 index 000000000000..190b1e41b493 --- /dev/null +++ b/rest/src/main/kotlin/builder/automoderation/AutoModerationActionBuilder.kt @@ -0,0 +1,64 @@ +package dev.kord.rest.builder.automoderation + +import dev.kord.common.annotation.KordDsl +import dev.kord.common.entity.AutoModerationActionType +import dev.kord.common.entity.AutoModerationActionType.* +import dev.kord.common.entity.DiscordAutoModerationAction +import dev.kord.common.entity.DiscordAutoModerationActionMetadata +import dev.kord.common.entity.Snowflake +import dev.kord.common.entity.optional.Optional +import dev.kord.common.entity.optional.optional +import dev.kord.common.entity.optional.optionalSnowflake +import dev.kord.rest.builder.RequestBuilder +import kotlin.time.Duration + +/** + * A [RequestBuilder] for building [actions][DiscordAutoModerationAction] which will execute whenever a + * [rule][AutoModerationRuleBuilder] is triggered. + */ +@KordDsl +public sealed class AutoModerationActionBuilder : RequestBuilder { + + /** The type of action. */ + public abstract val type: AutoModerationActionType + + protected open fun buildMetadata(): Optional = Optional.Missing() + + final override fun toRequest(): DiscordAutoModerationAction = DiscordAutoModerationAction( + type = type, + metadata = buildMetadata(), + ) +} + +/** An [AutoModerationActionBuilder] for building actions with type [BlockMessage]. */ +@Suppress("CanSealedSubClassBeObject") // keep it as a class in case we want to add more in the future +@KordDsl +public class BlockMessageAutoModerationActionBuilder : AutoModerationActionBuilder() { + override val type: BlockMessage get() = BlockMessage +} + +/** An [AutoModerationActionBuilder] for building actions with type [SendAlertMessage]. */ +@KordDsl +public class SendAlertMessageAutoModerationActionBuilder( + /** The ID of the channel to which user content should be logged. */ + public var channelId: Snowflake, +) : AutoModerationActionBuilder() { + + override val type: SendAlertMessage get() = SendAlertMessage + + override fun buildMetadata(): Optional.Value = + DiscordAutoModerationActionMetadata(channelId = channelId.optionalSnowflake()).optional() +} + +/** An [AutoModerationActionBuilder] for building actions with type [Timeout]. */ +@KordDsl +public class TimeoutAutoModerationActionBuilder( + /** The timeout duration (maximum of 2419200 seconds (4 weeks)). */ + public var duration: Duration, +) : AutoModerationActionBuilder() { + + override val type: Timeout get() = Timeout + + override fun buildMetadata(): Optional.Value = + DiscordAutoModerationActionMetadata(durationSeconds = duration.optional()).optional() +} diff --git a/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleBuilder.kt b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleBuilder.kt new file mode 100644 index 000000000000..18711b3f0934 --- /dev/null +++ b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleBuilder.kt @@ -0,0 +1,267 @@ +package dev.kord.rest.builder.automoderation + +import dev.kord.common.annotation.KordDsl +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.AutoModerationActionType.* +import dev.kord.common.entity.AutoModerationRuleEventType +import dev.kord.common.entity.AutoModerationRuleKeywordPresetType +import dev.kord.common.entity.AutoModerationRuleTriggerType +import dev.kord.common.entity.AutoModerationRuleTriggerType.* +import dev.kord.common.entity.Permission.ModerateMembers +import dev.kord.common.entity.Snowflake +import dev.kord.rest.builder.AuditBuilder +import kotlin.contracts.InvocationKind.EXACTLY_ONCE +import kotlin.contracts.contract +import kotlin.time.Duration + +// the `val propertyName` and `fun assignPropertyName` pattern let us effectively have `var`s with different +// nullability for getter and setter that allows a common supertype for create and modify builders + + +/** + * An [AuditBuilder] for building + * [Auto Moderation Rules](https://discord.com/developers/docs/resources/auto-moderation). + * + * Auto Moderation is a feature which allows each guild to set up rules that trigger based on some criteria. For + * example, a rule can trigger whenever a message contains a specific keyword. + * + * Rules can be configured to automatically execute actions whenever they trigger. For example, if a user tries to send + * a message which contains a certain keyword, a rule can trigger and block the message before it is sent. + */ +@KordDsl +public sealed interface AutoModerationRuleBuilder : AuditBuilder { + + /** The rule name. */ + public val name: String? + + /** Use this to set [name][AutoModerationRuleBuilder.name] for [AutoModerationRuleBuilder]. */ + public fun assignName(name: String) + + /** The rule [event type][AutoModerationRuleEventType]. */ + public val eventType: AutoModerationRuleEventType? + + /** Use this to set [eventType][AutoModerationRuleBuilder.eventType] for [AutoModerationRuleBuilder]. */ + public fun assignEventType(eventType: AutoModerationRuleEventType) + + /** + * The rule [trigger type][AutoModerationRuleTriggerType]. + * + * This might be `null` if the function that created this builder doesn't know the trigger type based on the + * type system. + */ + public val triggerType: AutoModerationRuleTriggerType? + + /** The actions which will execute when the rule is triggered. */ + public val actions: MutableList? + + /** Use this to set [actions][AutoModerationRuleBuilder.actions] for [AutoModerationRuleBuilder]. */ + public fun assignActions(actions: MutableList) + + /** Whether the rule is enabled (`false` by default). */ + public var enabled: Boolean? + + /** The IDs of the roles that should not be affected by the rule (maximum of 20). */ + public var exemptRoles: MutableList? + + /** The IDs of the channels that should not be affected by the rule (maximum of 50). */ + public var exemptChannels: MutableList? +} + +/** Add a [BlockMessage] action which will execute whenever the rule is triggered. */ +public inline fun AutoModerationRuleBuilder.blockMessage( + builder: BlockMessageAutoModerationActionBuilder.() -> Unit = {}, +) { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val action = BlockMessageAutoModerationActionBuilder().apply(builder) + actions?.add(action) ?: assignActions(mutableListOf(action)) +} + +/** + * Add a [SendAlertMessage] action which will execute whenever the rule is triggered. + * + * @param channelId the ID of the channel to which user content should be logged. + */ +public inline fun AutoModerationRuleBuilder.sendAlertMessage( + channelId: Snowflake, + builder: SendAlertMessageAutoModerationActionBuilder.() -> Unit = {}, +) { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val action = SendAlertMessageAutoModerationActionBuilder(channelId).apply(builder) + actions?.add(action) ?: assignActions(mutableListOf(action)) +} + +/** Exempt a [role][roleId] from being affected by the rule (maximum of 20). */ +public fun AutoModerationRuleBuilder.exemptRole(roleId: Snowflake) { + exemptRoles?.add(roleId) ?: run { exemptRoles = mutableListOf(roleId) } +} + +/** Exempt a [channel][channelId] from being affected by the rule (maximum of 50). */ +public fun AutoModerationRuleBuilder.exemptChannel(channelId: Snowflake) { + exemptChannels?.add(channelId) ?: run { exemptChannels = mutableListOf(channelId) } +} + + +/** An [AutoModerationRuleBuilder] with a non-null [triggerType]. */ +@KordDsl +public sealed interface TypedAutoModerationRuleBuilder : AutoModerationRuleBuilder { + + /** The rule [trigger type][AutoModerationRuleTriggerType]. */ + override val triggerType: AutoModerationRuleTriggerType +} + + +/** An [AutoModerationRuleBuilder] for building rules that can have a [Timeout] action. */ +@KordDsl +public sealed interface TimeoutAutoModerationRuleBuilder : TypedAutoModerationRuleBuilder + +/** + * Add a [Timeout] action which will execute whenever the rule is triggered. + * + * The [ModerateMembers] permission is required to use this action. + * + * @param duration the timeout duration (maximum of 2419200 seconds (4 weeks)). + */ +public inline fun TimeoutAutoModerationRuleBuilder.timeout( + duration: Duration, + builder: TimeoutAutoModerationActionBuilder.() -> Unit = {}, +) { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val action = TimeoutAutoModerationActionBuilder(duration).apply(builder) + actions?.add(action) ?: assignActions(mutableListOf(action)) +} + + +/** An [AutoModerationRuleBuilder] for building rules with trigger type [Keyword]. */ +@KordDsl +public sealed interface KeywordAutoModerationRuleBuilder : TimeoutAutoModerationRuleBuilder { + + override val triggerType: Keyword get() = Keyword + + /** + * Substrings which will be searched for in content. + * + * A keyword can be a phrase which contains multiple words. Wildcard symbols can be used to customize how each + * keyword will be matched. See + * [keyword matching strategies](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies). + */ + public val keywords: MutableList? + + /** Use this to set [keywords][KeywordAutoModerationRuleBuilder.keywords] for [KeywordAutoModerationRuleBuilder]. */ + public fun assignKeywords(keywords: MutableList) +} + +/** + * Add a [keyword] to [keywords][KeywordAutoModerationRuleBuilder.keywords]. + * + * A keyword can be a phrase which contains multiple words. Wildcard symbols can be used to customize how each + * keyword will be matched. See + * [keyword matching strategies](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies). + */ +public fun KeywordAutoModerationRuleBuilder.keyword(keyword: String) { + keywords?.add(keyword) ?: assignKeywords(mutableListOf(keyword)) +} + +/** + * Add a [keyword] with keyword matching strategy + * [Prefix](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies) + * to [keywords][KeywordAutoModerationRuleBuilder.keywords]. + * + * A keyword can be a phrase which contains multiple words. + */ +public fun KeywordAutoModerationRuleBuilder.prefixKeyword(keyword: String) { + keyword("$keyword*") +} + +/** + * Add a [keyword] with keyword matching strategy + * [Suffix](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies) + * to [keywords][KeywordAutoModerationRuleBuilder.keywords]. + * + * A keyword can be a phrase which contains multiple words. + */ +public fun KeywordAutoModerationRuleBuilder.suffixKeyword(keyword: String) { + keyword("*$keyword") +} + +/** + * Add a [keyword] with keyword matching strategy + * [Anywhere](https://discord.com/developers/docs/resources/auto-moderation#auto-moderation-rule-object-keyword-matching-strategies) + * to [keywords][KeywordAutoModerationRuleBuilder.keywords]. + * + * A keyword can be a phrase which contains multiple words. + */ +public fun KeywordAutoModerationRuleBuilder.anywhereKeyword(keyword: String) { + keyword("*$keyword*") +} + + +/** + * An [AutoModerationRuleBuilder] for building rules with trigger type [Spam]. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordDsl +@KordExperimental +public sealed interface SpamAutoModerationRuleBuilder : TypedAutoModerationRuleBuilder { + override val triggerType: Spam get() = Spam +} + + +/** An [AutoModerationRuleBuilder] for building rules with trigger type [KeywordPreset]. */ +@KordDsl +public sealed interface KeywordPresetAutoModerationRuleBuilder : TypedAutoModerationRuleBuilder { + + override val triggerType: KeywordPreset get() = KeywordPreset + + /** The internally pre-defined wordsets which will be searched for in content. */ + public val presets: MutableList? + + /** + * Use this to set [presets][KeywordPresetAutoModerationRuleBuilder.presets] for + * [KeywordPresetAutoModerationRuleBuilder]. + */ + public fun assignPresets(presets: MutableList) + + /** + * Substrings which will be exempt from triggering the [presets]. + * + * A keyword can be a phrase which contains multiple words. + */ + public var allowedKeywords: MutableList? +} + +/** Add a [preset] to [presets][KeywordPresetAutoModerationRuleBuilder.presets]. */ +public fun KeywordPresetAutoModerationRuleBuilder.preset(preset: AutoModerationRuleKeywordPresetType) { + presets?.add(preset) ?: assignPresets(mutableListOf(preset)) +} + +/** + * Add a [keyword] to [allowedKeywords][KeywordPresetAutoModerationRuleBuilder.allowedKeywords]. + * + * A keyword can be a phrase which contains multiple words. + */ +public fun KeywordPresetAutoModerationRuleBuilder.allowKeyword(keyword: String) { + allowedKeywords?.add(keyword) ?: run { allowedKeywords = mutableListOf(keyword) } +} + + +/** + * An [AutoModerationRuleBuilder] for building rules with trigger type [MentionSpam]. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordDsl +@KordExperimental +public sealed interface MentionSpamAutoModerationRuleBuilder : TimeoutAutoModerationRuleBuilder { + + override val triggerType: MentionSpam get() = MentionSpam + + /** Total number of mentions (role & user) allowed per message (maximum of 50). */ + public val mentionLimit: Int? + + /** + * Use this to set [mentionLimit][MentionSpamAutoModerationRuleBuilder.mentionLimit] for + * [MentionSpamAutoModerationRuleBuilder]. + */ + public fun assignMentionLimit(mentionLimit: Int) +} diff --git a/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleCreateBuilder.kt b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleCreateBuilder.kt new file mode 100644 index 000000000000..c1a1133fffd0 --- /dev/null +++ b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleCreateBuilder.kt @@ -0,0 +1,138 @@ +package dev.kord.rest.builder.automoderation + +import dev.kord.common.annotation.KordDsl +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.AutoModerationRuleEventType +import dev.kord.common.entity.AutoModerationRuleKeywordPresetType +import dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam +import dev.kord.common.entity.AutoModerationRuleTriggerType.Spam +import dev.kord.common.entity.DiscordAutoModerationRuleTriggerMetadata +import dev.kord.common.entity.Snowflake +import dev.kord.common.entity.optional.* +import dev.kord.common.entity.optional.delegate.delegate +import dev.kord.rest.builder.AuditRequestBuilder +import dev.kord.rest.json.request.AutoModerationRuleCreateRequest + +/** An [AutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. */ +@KordDsl +public sealed class AutoModerationRuleCreateBuilder( + final override var name: String, + final override var eventType: AutoModerationRuleEventType, +) : TypedAutoModerationRuleBuilder, AuditRequestBuilder { + final override var reason: String? = null + + /** @suppress Use `this.name = name` instead. */ + final override fun assignName(name: String) { + this.name = name + } + + /** @suppress Use `this.eventType = eventType` instead. */ + final override fun assignEventType(eventType: AutoModerationRuleEventType) { + this.eventType = eventType + } + + protected open fun buildTriggerMetadata(): Optional = Optional.Missing() + + final override var actions: MutableList = mutableListOf() + + /** @suppress Use `this.actions = actions` instead. */ + final override fun assignActions(actions: MutableList) { + this.actions = actions + } + + private var _enabled: OptionalBoolean = OptionalBoolean.Missing + final override var enabled: Boolean? by ::_enabled.delegate() + + private var _exemptRoles: Optional> = Optional.Missing() + final override var exemptRoles: MutableList? by ::_exemptRoles.delegate() + + private var _exemptChannels: Optional> = Optional.Missing() + final override var exemptChannels: MutableList? by ::_exemptChannels.delegate() + + final override fun toRequest(): AutoModerationRuleCreateRequest = AutoModerationRuleCreateRequest( + name = name, + eventType = eventType, + triggerType = triggerType, + triggerMetadata = buildTriggerMetadata(), + actions = actions.map { it.toRequest() }, + enabled = _enabled, + exemptRoles = _exemptRoles.map { it.toList() }, + exemptChannels = _exemptChannels.map { it.toList() }, + ) +} + +/** A [KeywordAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. */ +@KordDsl +public class KeywordAutoModerationRuleCreateBuilder( + name: String, + eventType: AutoModerationRuleEventType, +) : AutoModerationRuleCreateBuilder(name, eventType), KeywordAutoModerationRuleBuilder { + + override var keywords: MutableList = mutableListOf() + + /** @suppress Use `this.keywords = keywords` instead. */ + override fun assignKeywords(keywords: MutableList) { + this.keywords = keywords + } + + override fun buildTriggerMetadata(): Optional.Value = + DiscordAutoModerationRuleTriggerMetadata(keywordFilter = keywords.toList().optional()).optional() +} + +/** + * A [SpamAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordDsl +@KordExperimental +public class SpamAutoModerationRuleCreateBuilder( + name: String, + eventType: AutoModerationRuleEventType, +) : AutoModerationRuleCreateBuilder(name, eventType), SpamAutoModerationRuleBuilder + +/** A [KeywordPresetAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. */ +@KordDsl +public class KeywordPresetAutoModerationRuleCreateBuilder( + name: String, + eventType: AutoModerationRuleEventType, +) : AutoModerationRuleCreateBuilder(name, eventType), KeywordPresetAutoModerationRuleBuilder { + + override var presets: MutableList = mutableListOf() + + /** @suppress Use `this.presets = presets` instead. */ + override fun assignPresets(presets: MutableList) { + this.presets = presets + } + + private var _allowedKeywords: Optional> = Optional.Missing() + override var allowedKeywords: MutableList? by ::_allowedKeywords.delegate() + + override fun buildTriggerMetadata(): Optional.Value = + DiscordAutoModerationRuleTriggerMetadata( + presets = presets.toList().optional(), + allowList = _allowedKeywords.map { it.toList() }, + ).optional() +} + +/** + * A [MentionSpamAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordDsl +@KordExperimental +public class MentionSpamAutoModerationRuleCreateBuilder( + name: String, + eventType: AutoModerationRuleEventType, + override var mentionLimit: Int, +) : AutoModerationRuleCreateBuilder(name, eventType), MentionSpamAutoModerationRuleBuilder { + + /** @suppress Use `this.mentionLimit = mentionLimit` instead. */ + override fun assignMentionLimit(mentionLimit: Int) { + this.mentionLimit = mentionLimit + } + + override fun buildTriggerMetadata(): Optional.Value = + DiscordAutoModerationRuleTriggerMetadata(mentionTotalLimit = mentionLimit.optionalInt()).optional() +} diff --git a/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleModifyBuilder.kt b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleModifyBuilder.kt new file mode 100644 index 000000000000..3fe360f24f66 --- /dev/null +++ b/rest/src/main/kotlin/builder/automoderation/AutoModerationRuleModifyBuilder.kt @@ -0,0 +1,163 @@ +package dev.kord.rest.builder.automoderation + +import dev.kord.common.annotation.KordDsl +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.* +import dev.kord.common.entity.AutoModerationRuleTriggerType.MentionSpam +import dev.kord.common.entity.AutoModerationRuleTriggerType.Spam +import dev.kord.common.entity.optional.* +import dev.kord.common.entity.optional.delegate.delegate +import dev.kord.rest.builder.AuditRequestBuilder +import dev.kord.rest.json.request.AutoModerationRuleModifyRequest + +/** An [AutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. */ +@KordDsl +public sealed class AutoModerationRuleModifyBuilder : + AutoModerationRuleBuilder, + AuditRequestBuilder { + final override var reason: String? = null + + private var _name: Optional = Optional.Missing() + final override var name: String? by ::_name.delegate() + + /** @suppress Use `this.name = name` instead. */ + final override fun assignName(name: String) { + this.name = name + } + + private var _eventType: Optional = Optional.Missing() + final override var eventType: AutoModerationRuleEventType? by ::_eventType.delegate() + + /** @suppress Use `this.eventType = eventType` instead. */ + final override fun assignEventType(eventType: AutoModerationRuleEventType) { + this.eventType = eventType + } + + protected open fun buildTriggerMetadata(): Optional = Optional.Missing() + + private var _actions: Optional> = Optional.Missing() + final override var actions: MutableList? by ::_actions.delegate() + + /** @suppress Use `this.actions = actions` instead. */ + final override fun assignActions(actions: MutableList) { + this.actions = actions + } + + private var _enabled: OptionalBoolean = OptionalBoolean.Missing + final override var enabled: Boolean? by ::_enabled.delegate() + + private var _exemptRoles: Optional> = Optional.Missing() + final override var exemptRoles: MutableList? by ::_exemptRoles.delegate() + + private var _exemptChannels: Optional> = Optional.Missing() + final override var exemptChannels: MutableList? by ::_exemptChannels.delegate() + + final override fun toRequest(): AutoModerationRuleModifyRequest = AutoModerationRuleModifyRequest( + name = _name, + eventType = _eventType, + triggerMetadata = buildTriggerMetadata(), + actions = _actions.mapList { it.toRequest() }, + enabled = _enabled, + exemptRoles = _exemptRoles.map { it.toList() }, + exemptChannels = _exemptChannels.map { it.toList() }, + ) +} + +/** An [AutoModerationRuleModifyBuilder] with an always `null` [triggerType]. */ +@KordDsl +public class UntypedAutoModerationRuleModifyBuilder : AutoModerationRuleModifyBuilder() { + + /** + * This is always `null`, the function that created this builder doesn't know the + * [trigger type][AutoModerationRuleTriggerType] based on the type system. + */ + override val triggerType: Nothing? get() = null +} + +/** A [KeywordAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. */ +@KordDsl +public class KeywordAutoModerationRuleModifyBuilder : + AutoModerationRuleModifyBuilder(), + KeywordAutoModerationRuleBuilder { + + private var _keywords: Optional> = Optional.Missing() + override var keywords: MutableList? by ::_keywords.delegate() + + /** @suppress Use `this.keywords = keywords` instead. */ + override fun assignKeywords(keywords: MutableList) { + this.keywords = keywords + } + + override fun buildTriggerMetadata(): Optional = + _keywords.map { DiscordAutoModerationRuleTriggerMetadata(keywordFilter = it.toList().optional()) } +} + +/** + * A [SpamAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. + * + * The [Spam] trigger type is not yet released, so it cannot be used in most servers. + */ +@Suppress("CanSealedSubClassBeObject") // has state in super class +@KordDsl +@KordExperimental +public class SpamAutoModerationRuleModifyBuilder : + AutoModerationRuleModifyBuilder(), + SpamAutoModerationRuleBuilder + +/** A [KeywordPresetAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. */ +@KordDsl +public class KeywordPresetAutoModerationRuleModifyBuilder : + AutoModerationRuleModifyBuilder(), + KeywordPresetAutoModerationRuleBuilder { + + private var _presets: Optional> = Optional.Missing() + override var presets: MutableList? by ::_presets.delegate() + + /** @suppress Use `this.presets = presets` instead. */ + override fun assignPresets(presets: MutableList) { + this.presets = presets + } + + private var _allowedKeywords: Optional> = Optional.Missing() + override var allowedKeywords: MutableList? by ::_allowedKeywords.delegate() + + override fun buildTriggerMetadata(): Optional { + val presets = _presets + val allowedKeywords = _allowedKeywords + return when { + presets !is Optional.Missing || allowedKeywords !is Optional.Missing -> + DiscordAutoModerationRuleTriggerMetadata( + presets = presets.map { it.toList() }, + allowList = allowedKeywords.map { it.toList() }, + ).optional() + + else -> Optional.Missing() + } + } +} + +/** + * A [MentionSpamAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. + * + * The [MentionSpam] trigger type is not yet released, so it cannot be used in most servers. + */ +@KordDsl +@KordExperimental +public class MentionSpamAutoModerationRuleModifyBuilder : + AutoModerationRuleModifyBuilder(), + MentionSpamAutoModerationRuleBuilder { + + private var _mentionLimit: OptionalInt = OptionalInt.Missing + override var mentionLimit: Int? by ::_mentionLimit.delegate() + + /** @suppress Use `this.mentionLimit = mentionLimit` instead. */ + override fun assignMentionLimit(mentionLimit: Int) { + this.mentionLimit = mentionLimit + } + + override fun buildTriggerMetadata(): Optional = + when (val limit = _mentionLimit) { + OptionalInt.Missing -> Optional.Missing() + is OptionalInt.Value -> DiscordAutoModerationRuleTriggerMetadata(mentionTotalLimit = limit).optional() + } +} diff --git a/rest/src/main/kotlin/json/request/AutoModerationRequests.kt b/rest/src/main/kotlin/json/request/AutoModerationRequests.kt new file mode 100644 index 000000000000..6b8a4b781a5e --- /dev/null +++ b/rest/src/main/kotlin/json/request/AutoModerationRequests.kt @@ -0,0 +1,39 @@ +package dev.kord.rest.json.request + +import dev.kord.common.entity.* +import dev.kord.common.entity.optional.Optional +import dev.kord.common.entity.optional.OptionalBoolean +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +public data class AutoModerationRuleCreateRequest( + val name: String, + @SerialName("event_type") + val eventType: AutoModerationRuleEventType, + @SerialName("trigger_type") + val triggerType: AutoModerationRuleTriggerType, + @SerialName("trigger_metadata") + val triggerMetadata: Optional = Optional.Missing(), + val actions: List, + val enabled: OptionalBoolean = OptionalBoolean.Missing, + @SerialName("exempt_roles") + val exemptRoles: Optional> = Optional.Missing(), + @SerialName("exempt_channels") + val exemptChannels: Optional> = Optional.Missing(), +) + +@Serializable +public data class AutoModerationRuleModifyRequest( + val name: Optional = Optional.Missing(), + @SerialName("event_type") + val eventType: Optional = Optional.Missing(), + @SerialName("trigger_metadata") + val triggerMetadata: Optional = Optional.Missing(), + val actions: Optional> = Optional.Missing(), + val enabled: OptionalBoolean = OptionalBoolean.Missing, + @SerialName("exempt_roles") + val exemptRoles: Optional> = Optional.Missing(), + @SerialName("exempt_channels") + val exemptChannels: Optional> = Optional.Missing(), +) diff --git a/rest/src/main/kotlin/route/Route.kt b/rest/src/main/kotlin/route/Route.kt index 366c9e9e0f4d..9a30b24208f5 100644 --- a/rest/src/main/kotlin/route/Route.kt +++ b/rest/src/main/kotlin/route/Route.kt @@ -82,6 +82,7 @@ public sealed class Route( public object InteractionToken : Key("{interaction.token}", true) public object ScheduledEventId : Key("{event.id}", true) public object StickerId : Key("{sticker.id}") + public object AutoModerationRuleId : Key("{auto_moderation_rule.id}") protected constructor( @@ -120,6 +121,43 @@ public sealed class Route( Route(HttpMethod.Get, "/guilds/$GuildId/audit-logs", DiscordAuditLog.serializer()) + /* + * Auto Moderation: + * https://discord.com/developers/docs/resources/auto-moderation + */ + + public object AutoModerationRulesForGuildList : + Route>( + HttpMethod.Get, + "/guilds/$GuildId/auto-moderation/rules", + ListSerializer(DiscordAutoModerationRule.serializer()), + ) + + public object AutoModerationRuleGet : + Route( + HttpMethod.Get, + "/guilds/$GuildId/auto-moderation/rules/$AutoModerationRuleId", + DiscordAutoModerationRule.serializer(), + ) + + public object AutoModerationRuleCreate : + Route( + HttpMethod.Post, + "/guilds/$GuildId/auto-moderation/rules", + DiscordAutoModerationRule.serializer(), + ) + + public object AutoModerationRuleModify : + Route( + HttpMethod.Patch, + "/guilds/$GuildId/auto-moderation/rules/$AutoModerationRuleId", + DiscordAutoModerationRule.serializer(), + ) + + public object AutoModerationRuleDelete : + Route(HttpMethod.Delete, "/guilds/$GuildId/auto-moderation/rules/$AutoModerationRuleId", NoStrategy) + + /* * Channel: * https://discord.com/developers/docs/resources/channel diff --git a/rest/src/main/kotlin/service/AuditLogService.kt b/rest/src/main/kotlin/service/AuditLogService.kt index 3973b77a3219..ba9a24db33e9 100644 --- a/rest/src/main/kotlin/service/AuditLogService.kt +++ b/rest/src/main/kotlin/service/AuditLogService.kt @@ -6,6 +6,8 @@ import dev.kord.rest.builder.auditlog.AuditLogGetRequestBuilder import dev.kord.rest.json.request.AuditLogGetRequest import dev.kord.rest.request.RequestHandler import dev.kord.rest.route.Route +import kotlin.contracts.InvocationKind.EXACTLY_ONCE +import kotlin.contracts.contract public class AuditLogService(requestHandler: RequestHandler) : RestService(requestHandler) { @@ -13,6 +15,7 @@ public class AuditLogService(requestHandler: RequestHandler) : RestService(reque guildId: Snowflake, builder: AuditLogGetRequestBuilder.() -> Unit, ): DiscordAuditLog { + contract { callsInPlace(builder, EXACTLY_ONCE) } val request = AuditLogGetRequestBuilder().apply(builder).toRequest() return getAuditLogs(guildId, request) } diff --git a/rest/src/main/kotlin/service/AutoModerationService.kt b/rest/src/main/kotlin/service/AutoModerationService.kt new file mode 100644 index 000000000000..48405e04a2b4 --- /dev/null +++ b/rest/src/main/kotlin/service/AutoModerationService.kt @@ -0,0 +1,159 @@ +package dev.kord.rest.service + +import dev.kord.common.annotation.KordExperimental +import dev.kord.common.entity.AutoModerationRuleEventType +import dev.kord.common.entity.DiscordAutoModerationRule +import dev.kord.common.entity.Snowflake +import dev.kord.rest.builder.automoderation.* +import dev.kord.rest.json.request.AutoModerationRuleCreateRequest +import dev.kord.rest.json.request.AutoModerationRuleModifyRequest +import dev.kord.rest.request.RequestHandler +import dev.kord.rest.request.auditLogReason +import dev.kord.rest.route.Route +import kotlin.contracts.InvocationKind.EXACTLY_ONCE +import kotlin.contracts.contract + +public class AutoModerationService(requestHandler: RequestHandler) : RestService(requestHandler) { + + public suspend fun listAutoModerationRulesForGuild(guildId: Snowflake): List = + call(Route.AutoModerationRulesForGuildList) { + keys[Route.GuildId] = guildId + } + + public suspend fun getAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): DiscordAutoModerationRule = + call(Route.AutoModerationRuleGet) { + keys[Route.GuildId] = guildId + keys[Route.AutoModerationRuleId] = ruleId + } + + public suspend fun createAutoModerationRule( + guildId: Snowflake, + request: AutoModerationRuleCreateRequest, + reason: String? = null, + ): DiscordAutoModerationRule = call(Route.AutoModerationRuleCreate) { + keys[Route.GuildId] = guildId + body(AutoModerationRuleCreateRequest.serializer(), request) + auditLogReason(reason) + } + + public suspend inline fun createKeywordAutoModerationRule( + guildId: Snowflake, + name: String, + eventType: AutoModerationRuleEventType, + builder: KeywordAutoModerationRuleCreateBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = KeywordAutoModerationRuleCreateBuilder(name, eventType).apply(builder) + return createAutoModerationRule(guildId, request.toRequest(), request.reason) + } + + @KordExperimental + public suspend inline fun createSpamAutoModerationRule( + guildId: Snowflake, + name: String, + eventType: AutoModerationRuleEventType, + builder: SpamAutoModerationRuleCreateBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = SpamAutoModerationRuleCreateBuilder(name, eventType).apply(builder) + return createAutoModerationRule(guildId, request.toRequest(), request.reason) + } + + public suspend inline fun createKeywordPresetAutoModerationRule( + guildId: Snowflake, + name: String, + eventType: AutoModerationRuleEventType, + builder: KeywordPresetAutoModerationRuleCreateBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = KeywordPresetAutoModerationRuleCreateBuilder(name, eventType).apply(builder) + return createAutoModerationRule(guildId, request.toRequest(), request.reason) + } + + @KordExperimental + public suspend inline fun createMentionSpamAutoModerationRule( + guildId: Snowflake, + name: String, + eventType: AutoModerationRuleEventType, + mentionLimit: Int, + builder: MentionSpamAutoModerationRuleCreateBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = MentionSpamAutoModerationRuleCreateBuilder(name, eventType, mentionLimit).apply(builder) + return createAutoModerationRule(guildId, request.toRequest(), request.reason) + } + + public suspend fun modifyAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + request: AutoModerationRuleModifyRequest, + reason: String? = null, + ): DiscordAutoModerationRule = call(Route.AutoModerationRuleModify) { + keys[Route.GuildId] = guildId + keys[Route.AutoModerationRuleId] = ruleId + body(AutoModerationRuleModifyRequest.serializer(), request) + auditLogReason(reason) + } + + public suspend inline fun modifyUntypedAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + builder: UntypedAutoModerationRuleModifyBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = UntypedAutoModerationRuleModifyBuilder().apply(builder) + return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason) + } + + public suspend inline fun modifyKeywordAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + builder: KeywordAutoModerationRuleModifyBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = KeywordAutoModerationRuleModifyBuilder().apply(builder) + return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason) + } + + @KordExperimental + public suspend inline fun modifySpamAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + builder: SpamAutoModerationRuleModifyBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = SpamAutoModerationRuleModifyBuilder().apply(builder) + return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason) + } + + public suspend inline fun modifyKeywordPresetAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + builder: KeywordPresetAutoModerationRuleModifyBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = KeywordPresetAutoModerationRuleModifyBuilder().apply(builder) + return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason) + } + + @KordExperimental + public suspend inline fun modifyMentionSpamAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + builder: MentionSpamAutoModerationRuleModifyBuilder.() -> Unit, + ): DiscordAutoModerationRule { + contract { callsInPlace(builder, EXACTLY_ONCE) } + val request = MentionSpamAutoModerationRuleModifyBuilder().apply(builder) + return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason) + } + + public suspend fun deleteAutoModerationRule( + guildId: Snowflake, + ruleId: Snowflake, + reason: String? = null, + ): Unit = call(Route.AutoModerationRuleDelete) { + keys[Route.GuildId] = guildId + keys[Route.AutoModerationRuleId] = ruleId + auditLogReason(reason) + } +} diff --git a/rest/src/main/kotlin/service/RestClient.kt b/rest/src/main/kotlin/service/RestClient.kt index 31735120d4f7..3316c54c6345 100644 --- a/rest/src/main/kotlin/service/RestClient.kt +++ b/rest/src/main/kotlin/service/RestClient.kt @@ -10,19 +10,28 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract public class RestClient(requestHandler: RequestHandler) : RestService(requestHandler) { + + // order like in docs: + + // interactions + public val interaction: InteractionService = InteractionService(requestHandler) + + // resources public val auditLog: AuditLogService = AuditLogService(requestHandler) + public val autoModeration: AutoModerationService = AutoModerationService(requestHandler) public val channel: ChannelService = ChannelService(requestHandler) public val emoji: EmojiService = EmojiService(requestHandler) public val guild: GuildService = GuildService(requestHandler) + public val template: TemplateService = TemplateService(requestHandler) public val invite: InviteService = InviteService(requestHandler) + public val stageInstance: StageInstanceService = StageInstanceService(requestHandler) + public val sticker: StickerService = StickerService(requestHandler) public val user: UserService = UserService(requestHandler) public val voice: VoiceService = VoiceService(requestHandler) public val webhook: WebhookService = WebhookService(requestHandler) + + // topics public val application: ApplicationService = ApplicationService(requestHandler) - public val template: TemplateService = TemplateService(requestHandler) - public val interaction: InteractionService = InteractionService(requestHandler) - public val stageInstance: StageInstanceService = StageInstanceService(requestHandler) - public val sticker: StickerService = StickerService(requestHandler) /** * Sends a request to the given [route]. This function exposes a direct call to the Discord api and allows diff --git a/rest/src/test/resources/json/auditlog.json b/rest/src/test/resources/json/auditlog.json index ffb97baa9f12..891eda4a4ef5 100644 --- a/rest/src/test/resources/json/auditlog.json +++ b/rest/src/test/resources/json/auditlog.json @@ -120,5 +120,6 @@ } } ], + "auto_moderation_rules": [], "threads" : [] -} \ No newline at end of file +}