Skip to content

Commit

Permalink
@KordExperimental for Spam and MentionSpam trigger types
Browse files Browse the repository at this point in the history
  • Loading branch information
lukellmann committed Aug 28, 2022
1 parent 694a99d commit b9ca8c6
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 12 deletions.
15 changes: 13 additions & 2 deletions common/src/main/kotlin/entity/AutoModeration.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.kord.common.entity

import dev.kord.common.annotation.KordExperimental
import dev.kord.common.entity.AutoModerationRuleTriggerType.Keyword
import dev.kord.common.entity.Permission.ModerateMembers
import dev.kord.common.entity.optional.Optional
Expand Down Expand Up @@ -52,13 +53,23 @@ public sealed class AutoModerationRuleTriggerType(public val value: Int) {
/** Check if content contains words from a user defined list of keywords. */
public object Keyword : AutoModerationRuleTriggerType(1)

/** Check if content represents generic spam. */
/**
* 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. */
/**
* 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)


Expand Down
2 changes: 2 additions & 0 deletions core/src/main/kotlin/Unsafe.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public class Unsafe(private val kord: 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)

Expand All @@ -42,6 +43,7 @@ public class Unsafe(private val kord: Kord) {
ruleId: Snowflake,
): KeywordPresetAutoModerationRuleBehavior = KeywordPresetAutoModerationRuleBehavior(guildId, ruleId, kord)

@KordExperimental
public fun mentionSpamAutoModerationRule(
guildId: Snowflake,
ruleId: Snowflake,
Expand Down
8 changes: 8 additions & 0 deletions core/src/main/kotlin/behavior/GuildBehavior.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ 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
Expand Down Expand Up @@ -1133,11 +1135,14 @@ public suspend inline fun GuildBehavior.createKeywordAutoModerationRule(
*
* 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,
Expand Down Expand Up @@ -1173,12 +1178,15 @@ public suspend inline fun GuildBehavior.createKeywordPresetAutoModerationRule(
*
* 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,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
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
Expand Down Expand Up @@ -216,7 +217,12 @@ public suspend inline fun KeywordAutoModerationRuleBehavior.edit(
}


/** The behavior of a [SpamAutoModerationRule]. */
/**
* 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
Expand Down Expand Up @@ -272,8 +278,11 @@ internal fun SpamAutoModerationRuleBehavior(
*
* 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 {
Expand Down Expand Up @@ -350,7 +359,12 @@ public suspend inline fun KeywordPresetAutoModerationRuleBehavior.edit(
}


/** The behavior of a [MentionSpamAutoModerationRule]. */
/**
* 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
Expand Down Expand Up @@ -406,8 +420,11 @@ internal fun MentionSpamAutoModerationRuleBehavior(
*
* 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 {
Expand Down
15 changes: 13 additions & 2 deletions core/src/main/kotlin/entity/automoderation/AutoModerationRule.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
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
Expand Down Expand Up @@ -137,7 +138,12 @@ public class KeywordAutoModerationRule(data: AutoModerationRuleData, kord: Kord,
override fun toString(): String = "KeywordAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)"
}

/** An [AutoModerationRule] with trigger type [Spam]. */
/**
* 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 {
Expand Down Expand Up @@ -175,7 +181,12 @@ public class KeywordPresetAutoModerationRule(data: AutoModerationRuleData, kord:
override fun toString(): String = "KeywordPresetAutoModerationRule(data=$data, kord=$kord, supplier=$supplier)"
}

/** An [AutoModerationRule] with trigger type [MentionSpam]. */
/**
* 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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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
Expand Down Expand Up @@ -189,8 +190,13 @@ public fun KeywordAutoModerationRuleBuilder.anywhereKeyword(keyword: String) {
}


/** An [AutoModerationRuleBuilder] for building rules with trigger type [Spam]. */
/**
* 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
}
Expand Down Expand Up @@ -234,8 +240,13 @@ public fun KeywordPresetAutoModerationRuleBuilder.allowKeyword(keyword: String)
}


/** An [AutoModerationRuleBuilder] for building rules with trigger type [MentionSpam]. */
/**
* 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 : TypedAutoModerationRuleBuilder {

override val triggerType: MentionSpam get() = MentionSpam
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
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.*
Expand Down Expand Up @@ -76,8 +79,13 @@ public class KeywordAutoModerationRuleCreateBuilder(
DiscordAutoModerationRuleTriggerMetadata(keywordFilter = keywords.toList().optional()).optional()
}

/** A [SpamAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. */
/**
* 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,
Expand Down Expand Up @@ -107,8 +115,13 @@ public class KeywordPresetAutoModerationRuleCreateBuilder(
).optional()
}

/** A [MentionSpamAutoModerationRuleBuilder] for building [AutoModerationRuleCreateRequest]s. */
/**
* 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,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
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
Expand Down Expand Up @@ -89,9 +92,14 @@ public class KeywordAutoModerationRuleModifyBuilder :
_keywords.map { DiscordAutoModerationRuleTriggerMetadata(keywordFilter = it.toList().optional()) }
}

/** A [SpamAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. */
/**
* 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
Expand Down Expand Up @@ -128,8 +136,13 @@ public class KeywordPresetAutoModerationRuleModifyBuilder :
}
}

/** A [MentionSpamAutoModerationRuleBuilder] for building [AutoModerationRuleModifyRequest]s. */
/**
* 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 {
Expand Down
5 changes: 5 additions & 0 deletions rest/src/main/kotlin/service/AutoModerationService.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
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
Expand Down Expand Up @@ -46,6 +47,7 @@ public class AutoModerationService(requestHandler: RequestHandler) : RestService
return createAutoModerationRule(guildId, request.toRequest(), request.reason)
}

@KordExperimental
public suspend inline fun createSpamAutoModerationRule(
guildId: Snowflake,
name: String,
Expand All @@ -68,6 +70,7 @@ public class AutoModerationService(requestHandler: RequestHandler) : RestService
return createAutoModerationRule(guildId, request.toRequest(), request.reason)
}

@KordExperimental
public suspend inline fun createMentionSpamAutoModerationRule(
guildId: Snowflake,
name: String,
Expand Down Expand Up @@ -112,6 +115,7 @@ public class AutoModerationService(requestHandler: RequestHandler) : RestService
return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason)
}

@KordExperimental
public suspend inline fun modifySpamAutoModerationRule(
guildId: Snowflake,
ruleId: Snowflake,
Expand All @@ -132,6 +136,7 @@ public class AutoModerationService(requestHandler: RequestHandler) : RestService
return modifyAutoModerationRule(guildId, ruleId, request.toRequest(), request.reason)
}

@KordExperimental
public suspend inline fun modifyMentionSpamAutoModerationRule(
guildId: Snowflake,
ruleId: Snowflake,
Expand Down

0 comments on commit b9ca8c6

Please sign in to comment.