Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add regex support for Auto Moderation #713

Merged
merged 1 commit into from
Nov 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions common/api/common.api
Original file line number Diff line number Diff line change
Expand Up @@ -2639,20 +2639,22 @@ public final class dev/kord/common/entity/DiscordAutoModerationRule$Companion {
public final class dev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata {
public static final field Companion Ldev/kord/common/entity/DiscordAutoModerationRuleTriggerMetadata$Companion;
public fun <init> ()V
public synthetic fun <init> (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 <init> (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 <init> (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 synthetic fun <init> (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/OptionalInt;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (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/OptionalInt;)V
public synthetic fun <init> (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/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 final fun component4 ()Ldev/kord/common/entity/optional/Optional;
public final fun component5 ()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/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/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 final fun getRegexPatterns ()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
Expand Down Expand Up @@ -8163,6 +8165,7 @@ public final class dev/kord/common/entity/optional/OptionalKt {
public static final fun firstOrNull (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun flatMap (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/optional/Optional;
public static final fun map (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/optional/Optional;
public static final fun mapCopy (Ldev/kord/common/entity/optional/Optional;)Ldev/kord/common/entity/optional/Optional;
public static final fun mapList (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/optional/Optional;
public static final fun mapNotNull (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/optional/Optional;
public static final fun mapNullable (Ldev/kord/common/entity/optional/Optional;Lkotlin/jvm/functions/Function1;)Ldev/kord/common/entity/optional/Optional;
Expand Down
2 changes: 2 additions & 0 deletions common/src/main/kotlin/entity/AutoModeration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ public data class DiscordAutoModerationRule(
public data class DiscordAutoModerationRuleTriggerMetadata(
@SerialName("keyword_filter")
val keywordFilter: Optional<List<String>> = Optional.Missing(),
@SerialName("regex_patterns")
val regexPatterns: Optional<List<String>> = Optional.Missing(),
val presets: Optional<List<AutoModerationRuleKeywordPresetType>> = Optional.Missing(),
@SerialName("allow_list")
val allowList: Optional<List<String>> = Optional.Missing(),
Expand Down
3 changes: 2 additions & 1 deletion common/src/main/kotlin/entity/optional/Optional.kt
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,8 @@ public inline fun <E, T> Optional<List<E>>.mapList(mapper: (E) -> T): Optional<L
is Value -> Value(value.map(mapper))
}

public fun <T> Optional<MutableList<T>>.mapCopy(): Optional<List<T>> = map { mutable -> mutable.toList() }


@Suppress("UNCHECKED_CAST")
public inline fun <K, V, R> Optional<Map<K, V>>.mapValues(mapper: (Map.Entry<K, V>) -> R): Optional<Map<K, R>> = when (this) {
Expand All @@ -221,7 +223,6 @@ public inline fun <K, V, R> Optional<Map<K, V>>.mapValues(mapper: (Map.Entry<K,
}


@Suppress("UNCHECKED_CAST")
public inline fun <E> Optional<List<E>>.filterList(mapper: (E) -> Boolean): Optional<List<E>> = when (this) {
is Missing, is Null<*> -> this
is Value -> Value(value.filter(mapper))
Expand Down
15 changes: 9 additions & 6 deletions core/api/core.api
Original file line number Diff line number Diff line change
Expand Up @@ -2839,20 +2839,22 @@ public final class dev/kord/core/cache/data/AutoModerationRuleData$Companion {
public final class dev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData {
public static final field Companion Ldev/kord/core/cache/data/AutoModerationRuleTriggerMetadataData$Companion;
public fun <init> ()V
public synthetic fun <init> (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 <init> (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 <init> (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 synthetic fun <init> (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/OptionalInt;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (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/OptionalInt;)V
public synthetic fun <init> (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/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 final fun component4 ()Ldev/kord/common/entity/optional/Optional;
public final fun component5 ()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/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/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 final fun getRegexPatterns ()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
Expand Down Expand Up @@ -7589,6 +7591,7 @@ public final class dev/kord/core/entity/automoderation/KeywordAutoModerationRule
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 final fun getRegexPatterns ()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;
Expand Down
2 changes: 2 additions & 0 deletions core/src/main/kotlin/cache/data/AutoModeration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public data class AutoModerationRuleData(
@Serializable
public data class AutoModerationRuleTriggerMetadataData(
val keywordFilter: Optional<List<String>> = Optional.Missing(),
val regexPatterns: Optional<List<String>> = Optional.Missing(),
val presets: Optional<List<AutoModerationRuleKeywordPresetType>> = Optional.Missing(),
val allowList: Optional<List<String>> = Optional.Missing(),
val mentionTotalLimit: OptionalInt = OptionalInt.Missing,
Expand All @@ -58,6 +59,7 @@ public data class AutoModerationRuleTriggerMetadataData(
with(metadata) {
AutoModerationRuleTriggerMetadataData(
keywordFilter = keywordFilter,
regexPatterns = regexPatterns,
presets = presets,
allowList = allowList,
mentionTotalLimit = mentionTotalLimit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,13 @@ public class KeywordAutoModerationRule(data: AutoModerationRuleData, kord: Kord,
*/
public val keywords: List<String> get() = data.triggerMetadata.keywordFilter.orEmpty()

/**
* Regular expression patterns which will be matched against content.
*
* Only Rust flavored regex is currently supported.
*/
public val regexPatterns: List<String> get() = data.triggerMetadata.regexPatterns.orEmpty()

override suspend fun asAutoModerationRuleOrNull(): KeywordAutoModerationRule = this
override suspend fun asAutoModerationRule(): KeywordAutoModerationRule = this

Expand Down
15 changes: 12 additions & 3 deletions rest/api/rest.api
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public final class dev/kord/rest/builder/automoderation/AutoModerationRuleBuilde
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 regexPattern (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/lang/String;)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
Expand Down Expand Up @@ -189,32 +190,40 @@ public final class dev/kord/rest/builder/automoderation/BlockMessageAutoModerati
}

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 synthetic fun assignKeywords (Ljava/util/List;)V
public abstract fun getKeywords ()Ljava/util/List;
public abstract fun getRegexPatterns ()Ljava/util/List;
public abstract fun getTriggerType ()Ldev/kord/common/entity/AutoModerationRuleTriggerType$Keyword;
public abstract fun setKeywords (Ljava/util/List;)V
public abstract fun setRegexPatterns (Ljava/util/List;)V
}

public final class dev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder$DefaultImpls {
public static synthetic fun assignKeywords (Ldev/kord/rest/builder/automoderation/KeywordAutoModerationRuleBuilder;Ljava/util/List;)V
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 <init> (Ljava/lang/String;Ldev/kord/common/entity/AutoModerationRuleEventType;)V
public fun assignKeywords (Ljava/util/List;)V
public synthetic fun assignKeywords (Ljava/util/List;)V
public synthetic fun buildTriggerMetadata ()Ldev/kord/common/entity/optional/Optional;
public fun getKeywords ()Ljava/util/List;
public fun getRegexPatterns ()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 fun setRegexPatterns (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 <init> ()V
public fun assignKeywords (Ljava/util/List;)V
public synthetic fun assignKeywords (Ljava/util/List;)V
public fun getKeywords ()Ljava/util/List;
public fun getRegexPatterns ()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 fun setRegexPatterns (Ljava/util/List;)V
}

public abstract interface class dev/kord/rest/builder/automoderation/KeywordPresetAutoModerationRuleBuilder : dev/kord/rest/builder/automoderation/TypedAutoModerationRuleBuilder {
Expand Down
Loading