@@ -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(); | ||||