@@ -12,20 +12,55 @@ namespace Discord;
/// </summary>
public class AutoModRuleBuilder
{
private const int MaxKeywordCount = 1000;
private const int MaxKeywordLength = 30;
/// <summary>
/// Returns the max keyword count for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxKeywordCount = 1000;
/// <summary>
/// Returns the max keyword length for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxKeywordLength = 30;
/// <summary>
/// Returns the max regex pattern count for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxRegexPatternCount = 10;
/// <summary>
/// Returns the max regex pattern length for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxRegexPatternLength = 260;
private const int MaxRegexPatternCount = 10;
private const int MaxRegexPatternLength = 260;
/// <summary>
/// Returns the max allowlist keyword count for a <see cref="AutoModTriggerType.Keyword"/> AutoMod rule allowed by Discord.
/// </summary>
public const int MaxAllowListCountKeyword = 100;
private const int MaxAllowListCountKeyword = 100;
private const int MaxAllowListCountKeywordPreset = 1000;
private const int MaxAllowListEntryLength = 30;
/// <summary>
/// Returns the max allowlist keyword count for a <see cref="AutoModTriggerType.KeywordPreset"/> AutoMod rule allowed by Discord.
/// </summary>
public const int MaxAllowListCountKeywordPreset = 1000;
private const int MaxMentionLimit = 50;
/// <summary>
/// Returns the max allowlist keyword length for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxAllowListEntryLength = 30;
private const int MaxExemptRoles = 20;
private const int MaxExemptChannels = 50;
/// <summary>
/// Returns the max mention limit for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxMentionLimit = 50;
/// <summary>
/// Returns the max exempt role count for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxExemptRoles = 20;
/// <summary>
/// Returns the max exempt channel count for an AutoMod rule allowed by Discord.
/// </summary>
public const int MaxExemptChannels = 50;
private List<string> _keywordFilter = new();
private List<string> _regexPatterns = new();
@@ -33,11 +68,12 @@ public class AutoModRuleBuilder
private List<ulong> _exemptRoles = new();
private List<ulong> _exemptChannels = new();
private HashSet<KeywordPresetTypes> _presets = new();
private int? _mentionLimit;
/// <summary>
///
/// Gets or sets the list of <see cref="string"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<string> KeywordFilter
{
@@ -58,7 +94,7 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the list of <see cref="string"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<string> RegexPatterns
{
@@ -79,7 +115,7 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the list of <see cref="string"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<string> AllowList
{
@@ -103,7 +139,7 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the list of <see cref="ulong"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<ulong> ExemptRoles
{
@@ -118,7 +154,7 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the list of <see cref="ulong"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<ulong> ExemptChannels
{
@@ -133,7 +169,7 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the hashset of <see cref="KeywordPresetTypes"/> of an <see cref="AutoModRule"/>.
/// </summary>
public HashSet<KeywordPresetTypes> Presets
{
@@ -148,22 +184,22 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the name of an <see cref="AutoModRule"/>.
/// </summary>
public string Name { get; set; }
/// <summary>
///
/// Gets or sets the event type of an <see cref="AutoModRule"/>.
/// </summary>
public AutoModEventType EventType { get; set; } = AutoModEventType.MessageSend;
/// <summary>
///
/// Gets the trigger type of an <see cref="AutoModRule"/>.
/// </summary>
public AutoModTriggerType TriggerType { get; }
public AutoModTriggerType TriggerType { get; }
/// <summary>
///
/// Gets or sets the mention limit of an <see cref="AutoModRule"/>.
/// </summary>
public int? MentionLimit
{
@@ -180,30 +216,28 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Gets or sets the list of <see cref="AutoModRuleActionBuilder"/> of an <see cref="AutoModRule"/>.
/// </summary>
public List<AutoModRuleActionBuilder> Actions = new();
private HashSet<KeywordPresetTypes> _presets = new();
/// <summary>
///
/// Gets or sets the enabled status of an <see cref="AutoModRule"/>.
/// </summary>
public bool Enabled { get; set; } = false;
/// <summary>
///
/// Initializes a new instance of <see cref="AutoModRuleBuilder"/> used to create a new <see cref="AutoModRule"/>.
/// </summary>
/// <param name="type"></param>
/// <param name="type">The trigger type of an <see cref="AutoModRule"/> </param>
public AutoModRuleBuilder(AutoModTriggerType type)
{
TriggerType = type;
}
/// <summary>
///
/// Sets the name of an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder WithName(string name)
{
Name = name;
@@ -211,9 +245,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Sets the enabled status of an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder WithEnabled(bool enabled)
{
Enabled = enabled;
@@ -221,9 +255,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Sets the event type of an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder WithEventType(AutoModEventType eventType)
{
EventType = eventType;
@@ -231,9 +265,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Sets the mention limit of an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder WithMentionLimit(int limit)
{
MentionLimit = limit;
@@ -241,10 +275,10 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds a <see cref="string"/> keyword to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
public AutoModRuleBuilder AddKeywordFilter (string keyword)
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddKeyword(string keyword)
{
if (TriggerType != AutoModTriggerType.Keyword)
throw new ArgumentException(message: $"Keyword filter can only be used with 'Keyword' trigger type.");
@@ -261,10 +295,10 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds a <see cref="string"/> allow list keyword to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
public AutoModRuleBuilder AddAllowList(string keyword)
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddAllowListKeyword (string keyword)
{
if (TriggerType is not AutoModTriggerType.Keyword or AutoModTriggerType.KeywordPreset)
throw new ArgumentException(message: $"Allow list can only be used with 'Keyword' or 'KeywordPreset' trigger type.");
@@ -284,9 +318,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds a <see cref="KeyNotFoundException"/> to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddKeywordPreset(KeywordPresetTypes type)
{
if (TriggerType != AutoModTriggerType.KeywordPreset)
@@ -297,9 +331,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds a <see cref="string"/> regex pattern to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddRegexPattern(string regex)
{
if (TriggerType != AutoModTriggerType.Keyword)
@@ -317,9 +351,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds an exempt <see cref="IRole"/> to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddExemptRole(IRole role)
{
AddExemptRole(role.Id);
@@ -327,9 +361,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds a exempt role with <see cref="ulong"/> id keyword to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddExemptRole(ulong roleId)
{
ExemptRoles.Add(roleId);
@@ -337,9 +371,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds an exempt <see cref="IMessageChannel"/> keyword to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddExemptChannel(IMessageChannel channel)
{
AddExemptChannel(channel.Id);
@@ -347,9 +381,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds an exempt channel with <see cref="ulong"/> id keyword to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddExemptChannel(ulong channelId)
{
ExemptChannels.Add(channelId);
@@ -357,9 +391,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Adds an <see cref="AutoModRuleActionBuilder"/> to an <see cref="AutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The current builder. </returns>
public AutoModRuleBuilder AddAction(AutoModRuleActionBuilder builder)
{
Actions.Add(builder);
@@ -367,9 +401,9 @@ public class AutoModRuleBuilder
}
/// <summary>
///
/// Creates a new instance of <see cref="AutoModRuleBuilder"/> with data from a <see cref="IAutoModRule"/>.
/// </summary>
/// <returns></returns>
/// <returns>The new builder. </returns>
public static AutoModRuleBuilder FromAutoModRule(IAutoModRule rule)
=> new(rule.TriggerType)
{
@@ -385,9 +419,9 @@ public class AutoModRuleBuilder
Enabled = rule.Enabled,
EventType = rule.EventType
};
/// <summary>
///
/// Builds the <see cref="AutoModRuleBuilder" /> into <see cref="AutoModRule"/> ready to be sent.
/// </summary>
/// <returns></returns>
public AutoModRule Build()
@@ -460,7 +494,7 @@ public class AutoModRuleActionBuilder
}
/// <summary>
///
/// Creates a new instance of <see cref="AutoModRuleActionBuilder"/> used to define actions of an <see cref="AutoModRule"/>.
/// </summary>
public AutoModRuleActionBuilder(AutoModActionType type, ulong? channelId = null, TimeSpan? duration = null)
{