Skip to content

Commit

Permalink
Automod updates (#697)
Browse files Browse the repository at this point in the history
* Remove @KordExperimental from Spam and MentionSpam types

see discord/discord-api-docs@cc2fddc

* Use named instead of anonymous classes for behavior implementations

* Update docs for MentionSpam type

see discord/discord-api-docs@2f2ea98

* Update audit log

see discord/discord-api-docs@9bac5d6
  • Loading branch information
lukellmann authored Oct 9, 2022
1 parent bf033d9 commit f934885
Show file tree
Hide file tree
Showing 13 changed files with 117 additions and 210 deletions.
32 changes: 23 additions & 9 deletions common/api/common.api
Original file line number Diff line number Diff line change
Expand Up @@ -874,20 +874,26 @@ public final class dev/kord/common/entity/AuditLogChangeKey$WidgetEnabled : dev/
public final class dev/kord/common/entity/AuditLogEntryOptionalInfo {
public static final field Companion Ldev/kord/common/entity/AuditLogEntryOptionalInfo$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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)V
public synthetic fun <init> (Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;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 synthetic fun <init> (ILdev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Ldev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)V
public synthetic fun <init> (Ldev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;
public final fun component10 ()Ldev/kord/common/entity/optional/Optional;
public final fun component11 ()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/OptionalSnowflake;
public final fun component4 ()Ldev/kord/common/entity/optional/OptionalSnowflake;
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/Optional;
public final fun component6 ()Ldev/kord/common/entity/optional/OptionalSnowflake;
public final fun component7 ()Ldev/kord/common/entity/optional/Optional;
public final fun component7 ()Ldev/kord/common/entity/optional/OptionalSnowflake;
public final fun component8 ()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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/common/entity/AuditLogEntryOptionalInfo;
public static synthetic fun copy$default (Ldev/kord/common/entity/AuditLogEntryOptionalInfo;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/common/entity/AuditLogEntryOptionalInfo;
public final fun component9 ()Ldev/kord/common/entity/optional/OptionalSnowflake;
public final fun copy (Ldev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;)Ldev/kord/common/entity/AuditLogEntryOptionalInfo;
public static synthetic fun copy$default (Ldev/kord/common/entity/AuditLogEntryOptionalInfo;Ldev/kord/common/entity/optional/OptionalSnowflake;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/OptionalSnowflake;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/OptionalSnowflake;Ldev/kord/common/entity/optional/Optional;Ldev/kord/common/entity/optional/Optional;ILjava/lang/Object;)Ldev/kord/common/entity/AuditLogEntryOptionalInfo;
public fun equals (Ljava/lang/Object;)Z
public final fun getApplicationId ()Ldev/kord/common/entity/optional/OptionalSnowflake;
public final fun getAutoModerationRuleName ()Ldev/kord/common/entity/optional/Optional;
public final fun getAutoModerationRuleTriggerType ()Ldev/kord/common/entity/optional/Optional;
public final fun getChannelId ()Ldev/kord/common/entity/optional/OptionalSnowflake;
public final fun getCount ()Ldev/kord/common/entity/optional/Optional;
public final fun getDeleteMemberDays ()Ldev/kord/common/entity/optional/Optional;
Expand Down Expand Up @@ -934,6 +940,10 @@ public final class dev/kord/common/entity/AuditLogEvent$AutoModerationBlockMessa
public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationBlockMessage;
}

public final class dev/kord/common/entity/AuditLogEvent$AutoModerationFlagToChannel : dev/kord/common/entity/AuditLogEvent {
public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationFlagToChannel;
}

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;
}
Expand All @@ -946,6 +956,10 @@ public final class dev/kord/common/entity/AuditLogEvent$AutoModerationRuleUpdate
public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationRuleUpdate;
}

public final class dev/kord/common/entity/AuditLogEvent$AutoModerationUserCommunicationDisabled : dev/kord/common/entity/AuditLogEvent {
public static final field INSTANCE Ldev/kord/common/entity/AuditLogEvent$AutoModerationUserCommunicationDisabled;
}

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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,10 +299,20 @@ public sealed class AuditLogEvent(
public object AutoModerationRuleDelete : AuditLogEvent(142)

/**
* Message was blocked by AutoMod (according to a rule).
* Message was blocked by AutoMod.
*/
public object AutoModerationBlockMessage : AuditLogEvent(143)

/**
* Message was flagged by AutoMod.
*/
public object AutoModerationFlagToChannel : AuditLogEvent(144)

/**
* Member was timed out by AutoMod.
*/
public object AutoModerationUserCommunicationDisabled : AuditLogEvent(145)

internal object Serializer : KSerializer<AuditLogEvent> {
public override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("dev.kord.common.entity.AuditLogEvent", PrimitiveKind.INT)
Expand Down Expand Up @@ -363,6 +373,8 @@ public sealed class AuditLogEvent(
141 -> AutoModerationRuleUpdate
142 -> AutoModerationRuleDelete
143 -> AutoModerationBlockMessage
144 -> AutoModerationFlagToChannel
145 -> AutoModerationUserCommunicationDisabled
else -> Unknown(value)
}
}
Expand Down Expand Up @@ -425,6 +437,8 @@ public sealed class AuditLogEvent(
AutoModerationRuleUpdate,
AutoModerationRuleDelete,
AutoModerationBlockMessage,
AutoModerationFlagToChannel,
AutoModerationUserCommunicationDisabled,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package dev.kord.common.entity

import dev.kord.common.`annotation`.KordExperimental
import kotlin.Any
import kotlin.Boolean
import kotlin.Int
Expand Down Expand Up @@ -55,11 +54,7 @@ public sealed class AutoModerationRuleTriggerType(

/**
* 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)

/**
Expand All @@ -68,12 +63,8 @@ public sealed class AutoModerationRuleTriggerType(
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.
* Check if content contains more unique mentions than allowed.
*/
@KordExperimental
public object MentionSpam : AutoModerationRuleTriggerType(5)

internal object Serializer : KSerializer<AutoModerationRuleTriggerType> {
Expand Down
10 changes: 9 additions & 1 deletion common/src/main/kotlin/entity/AuditLog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@
Entry("AutoModerationRuleCreate", intValue = 140, kDoc = "Auto Moderation rule was created."),
Entry("AutoModerationRuleUpdate", intValue = 141, kDoc = "Auto Moderation rule was updated."),
Entry("AutoModerationRuleDelete", intValue = 142, kDoc = "Auto Moderation rule was deleted."),
Entry("AutoModerationBlockMessage", intValue = 143, kDoc = "Message was blocked by AutoMod (according to a rule)."),
Entry("AutoModerationBlockMessage", intValue = 143, kDoc = "Message was blocked by AutoMod."),
Entry("AutoModerationFlagToChannel", intValue = 144, kDoc = "Message was flagged by AutoMod."),
Entry("AutoModerationUserCommunicationDisabled", intValue = 145, kDoc = "Member was timed out by AutoMod."),
],
)

Expand Down Expand Up @@ -118,6 +120,12 @@ public data class DiscordAuditLogEntry(

@Serializable
public data class AuditLogEntryOptionalInfo(
@SerialName("application_id")
val applicationId: OptionalSnowflake = OptionalSnowflake.Missing,
@SerialName("auto_moderation_rule_name")
val autoModerationRuleName: Optional<String> = Optional.Missing(),
@SerialName("auto_moderation_rule_trigger_type")
val autoModerationRuleTriggerType: Optional<String> = Optional.Missing(),
/*
Do not trust the docs:
2020-11-12 field is described as present but is in fact optional
Expand Down
12 changes: 2 additions & 10 deletions common/src/main/kotlin/entity/AutoModeration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,12 @@
kDoc = "Characterizes the type of content which can trigger the rule.",
entries = [
Entry("Keyword", intValue = 1, kDoc = "Check if content contains words from a user defined list of keywords."),
Entry(
"Spam", intValue = 3, isKordExperimental = true,
kDoc = "Check if content represents generic spam.\n\nThis [trigger·type][AutoModerationRuleTriggerType] " +
"is not yet released, so it cannot be used in most servers."
),
Entry("Spam", intValue = 3, kDoc = "Check if content represents generic spam."),
Entry(
"KeywordPreset", intValue = 4,
kDoc = "Check if content contains words from internal pre-defined wordsets."
),
Entry(
"MentionSpam", intValue = 5, isKordExperimental = true,
kDoc = "Check if content contains more mentions than allowed.\n\nThis [trigger·type][" +
"AutoModerationRuleTriggerType] is not yet released, so it cannot be used in most servers."
),
Entry("MentionSpam", intValue = 5, kDoc = "Check if content contains more unique mentions than allowed."),
],
)

Expand Down
12 changes: 5 additions & 7 deletions core/src/main/kotlin/Unsafe.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,23 @@ import kotlin.DeprecationLevel.HIDDEN
public class Unsafe(private val kord: Kord) {

public fun autoModerationRule(guildId: Snowflake, ruleId: Snowflake): AutoModerationRuleBehavior =
AutoModerationRuleBehavior(guildId, ruleId, kord)
AutoModerationRuleBehaviorImpl(guildId, ruleId, kord)

public fun keywordAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): KeywordAutoModerationRuleBehavior =
KeywordAutoModerationRuleBehavior(guildId, ruleId, kord)
KeywordAutoModerationRuleBehaviorImpl(guildId, ruleId, kord)

@KordExperimental
public fun spamAutoModerationRule(guildId: Snowflake, ruleId: Snowflake): SpamAutoModerationRuleBehavior =
SpamAutoModerationRuleBehavior(guildId, ruleId, kord)
SpamAutoModerationRuleBehaviorImpl(guildId, ruleId, kord)

public fun keywordPresetAutoModerationRule(
guildId: Snowflake,
ruleId: Snowflake,
): KeywordPresetAutoModerationRuleBehavior = KeywordPresetAutoModerationRuleBehavior(guildId, ruleId, kord)
): KeywordPresetAutoModerationRuleBehavior = KeywordPresetAutoModerationRuleBehaviorImpl(guildId, ruleId, kord)

@KordExperimental
public fun mentionSpamAutoModerationRule(
guildId: Snowflake,
ruleId: Snowflake,
): MentionSpamAutoModerationRuleBehavior = MentionSpamAutoModerationRuleBehavior(guildId, ruleId, kord)
): MentionSpamAutoModerationRuleBehavior = MentionSpamAutoModerationRuleBehaviorImpl(guildId, ruleId, kord)

public fun message(channelId: Snowflake, messageId: Snowflake): MessageBehavior =
MessageBehavior(channelId = channelId, messageId = messageId, kord = kord)
Expand Down
10 changes: 1 addition & 9 deletions core/src/main/kotlin/behavior/GuildBehavior.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ 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 @@ -1116,14 +1114,11 @@ 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 @@ -1159,15 +1154,12 @@ 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).
* @param mentionLimit total number of unique role and user mentions 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
Loading

0 comments on commit f934885

Please sign in to comment.