| @@ -31,6 +31,21 @@ namespace Discord | |||||
| /// </summary> | /// </summary> | ||||
| public Optional<string[]> KeywordFilter { get; set; } | public Optional<string[]> KeywordFilter { get; set; } | ||||
| /// <summary> | |||||
| /// Gets or sets regex patterns for the rule. | |||||
| /// </summary> | |||||
| public Optional<string[]> RegexPatterns { get; set; } | |||||
| /// <summary> | |||||
| /// Gets or sets the allow list for the rule. | |||||
| /// </summary> | |||||
| public Optional<string[]> AllowList { get; set; } | |||||
| /// <summary> | |||||
| /// Gets or sets total mention limit for the rule. | |||||
| /// </summary> | |||||
| public Optional<int> MentionLimit { get; set; } | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets or sets the presets for the rule. | /// Gets or sets the presets for the rule. | ||||
| /// </summary> | /// </summary> | ||||
| @@ -76,10 +76,10 @@ namespace Discord | |||||
| /// Gets the total mention limit for this rule. | /// Gets the total mention limit for this rule. | ||||
| /// </summary> | /// </summary> | ||||
| /// <remarks> | /// <remarks> | ||||
| /// This collection will be empty if <see cref="TriggerType"/> is not | |||||
| /// This property will be <see langword="null"/> if <see cref="TriggerType"/> is not | |||||
| /// <see cref="AutoModTriggerType.MentionSpam"/>. | /// <see cref="AutoModTriggerType.MentionSpam"/>. | ||||
| /// </remarks> | /// </remarks> | ||||
| public int MentionTotalLimit { get; } | |||||
| public int? MentionTotalLimit { get; } | |||||
| /// <summary> | /// <summary> | ||||
| /// Gets a collection of actions that will be preformed if a user breaks this rule. | /// Gets a collection of actions that will be preformed if a user breaks this rule. | ||||
| @@ -10,18 +10,18 @@ namespace Discord.API | |||||
| internal class TriggerMetadata | internal class TriggerMetadata | ||||
| { | { | ||||
| [JsonProperty("keyword_filter")] | [JsonProperty("keyword_filter")] | ||||
| public string[] KeywordFilter { get; set; } | |||||
| public Optional<string[]> KeywordFilter { get; set; } | |||||
| [JsonProperty("regex_patterns")] | [JsonProperty("regex_patterns")] | ||||
| public string[] RegexPatterns { get; set; } | |||||
| public Optional<string[]> RegexPatterns { get; set; } | |||||
| [JsonProperty("presets")] | [JsonProperty("presets")] | ||||
| public KeywordPresetTypes[] Presets { get; set; } | |||||
| public Optional<KeywordPresetTypes[]> Presets { get; set; } | |||||
| [JsonProperty("allow_list")] | [JsonProperty("allow_list")] | ||||
| public string[] AllowList { get; set; } | |||||
| public Optional<string[]> AllowList { get; set; } | |||||
| [JsonProperty("mention_total_limit")] | [JsonProperty("mention_total_limit")] | ||||
| public int MentionLimit { get; set; } | |||||
| public Optional<int> MentionLimit { get; set; } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1087,6 +1087,9 @@ namespace Discord.Rest | |||||
| TriggerMetadata = args.KeywordFilter.IsSpecified || args.Presets.IsSpecified ? new API.TriggerMetadata | TriggerMetadata = args.KeywordFilter.IsSpecified || args.Presets.IsSpecified ? new API.TriggerMetadata | ||||
| { | { | ||||
| KeywordFilter = args.KeywordFilter.GetValueOrDefault(Array.Empty<string>()), | KeywordFilter = args.KeywordFilter.GetValueOrDefault(Array.Empty<string>()), | ||||
| RegexPatterns = args.RegexPatterns.GetValueOrDefault(Array.Empty<string>()), | |||||
| AllowList = args.AllowList.GetValueOrDefault(Array.Empty<string>()), | |||||
| MentionLimit = args.MentionLimit, | |||||
| Presets = args.Presets.GetValueOrDefault(Array.Empty<KeywordPresetTypes>()) | Presets = args.Presets.GetValueOrDefault(Array.Empty<KeywordPresetTypes>()) | ||||
| } : Optional<API.TriggerMetadata>.Unspecified | } : Optional<API.TriggerMetadata>.Unspecified | ||||
| }; | }; | ||||
| @@ -46,7 +46,7 @@ namespace Discord.WebSocket | |||||
| public IReadOnlyCollection<AutoModRuleAction> Actions { get; private set; } | public IReadOnlyCollection<AutoModRuleAction> Actions { get; private set; } | ||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public int MentionTotalLimit { get; private set; } | |||||
| public int? MentionTotalLimit { get; private set; } | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public bool Enabled { get; private set; } | public bool Enabled { get; private set; } | ||||
| @@ -87,11 +87,13 @@ namespace Discord.WebSocket | |||||
| Creator ??= Guild.GetUser(_creatorId); | Creator ??= Guild.GetUser(_creatorId); | ||||
| EventType = model.EventType; | EventType = model.EventType; | ||||
| TriggerType = model.TriggerType; | TriggerType = model.TriggerType; | ||||
| KeywordFilter = model.TriggerMetadata.KeywordFilter.ToImmutableArray(); | |||||
| Presets = model.TriggerMetadata.Presets.ToImmutableArray(); | |||||
| RegexPatterns = model.TriggerMetadata.RegexPatterns.ToImmutableArray(); | |||||
| AllowList = model.TriggerMetadata.AllowList.ToImmutableArray(); | |||||
| MentionTotalLimit = model.TriggerMetadata.MentionLimit; | |||||
| KeywordFilter = model.TriggerMetadata.KeywordFilter.GetValueOrDefault(Array.Empty<string>()).ToImmutableArray(); | |||||
| Presets = model.TriggerMetadata.Presets.GetValueOrDefault(Array.Empty<KeywordPresetTypes>()).ToImmutableArray(); | |||||
| RegexPatterns = model.TriggerMetadata.RegexPatterns.GetValueOrDefault(Array.Empty<string>()).ToImmutableArray(); | |||||
| AllowList = model.TriggerMetadata.AllowList.GetValueOrDefault(Array.Empty<string>()).ToImmutableArray(); | |||||
| MentionTotalLimit = model.TriggerMetadata.MentionLimit.IsSpecified | |||||
| ? model.TriggerMetadata.MentionLimit.Value | |||||
| : null; | |||||
| Actions = model.Actions.Select(x => new AutoModRuleAction(x.Type, x.Metadata.GetValueOrDefault()?.ChannelId.ToNullable(), x.Metadata.GetValueOrDefault()?.DurationSeconds.ToNullable())).ToImmutableArray(); | Actions = model.Actions.Select(x => new AutoModRuleAction(x.Type, x.Metadata.GetValueOrDefault()?.ChannelId.ToNullable(), x.Metadata.GetValueOrDefault()?.DurationSeconds.ToNullable())).ToImmutableArray(); | ||||
| Enabled = model.Enabled; | Enabled = model.Enabled; | ||||
| ExemptRoles = model.ExemptRoles.Select(x => Guild.GetRole(x)).ToImmutableArray(); | ExemptRoles = model.ExemptRoles.Select(x => Guild.GetRole(x)).ToImmutableArray(); | ||||