diff --git a/DisCatSharp.Experimental/DiscordApiClientHook.cs b/DisCatSharp.Experimental/DiscordApiClientHook.cs index 30267799a..0476b1d3b 100644 --- a/DisCatSharp.Experimental/DiscordApiClientHook.cs +++ b/DisCatSharp.Experimental/DiscordApiClientHook.cs @@ -183,7 +183,7 @@ internal async Task GenerateClydePersonalityAsync(string? basePersonalit /// A list of supplemental guild members that match the search criteria. internal async Task SearchGuildMembersAsync(ulong guildId, DiscordGuildMemberSearchParams searchParams) { - var validationResult = DiscordGuildMemberSearchValidator.Validate(searchParams); + var validationResult = searchParams.Validate(); if (!validationResult.IsValid) throw new ValidationException( typeof(DiscordGuildMemberSearchParams), diff --git a/DisCatSharp.Experimental/Entities/Guild/DiscordGuildMemberSearchValidator.cs b/DisCatSharp.Experimental/Entities/Guild/DiscordGuildMemberSearchValidator.cs index 03db42a97..7175ce038 100644 --- a/DisCatSharp.Experimental/Entities/Guild/DiscordGuildMemberSearchValidator.cs +++ b/DisCatSharp.Experimental/Entities/Guild/DiscordGuildMemberSearchValidator.cs @@ -5,7 +5,7 @@ namespace DisCatSharp.Experimental.Entities; /// /// Provides a validator for . /// -internal sealed class DiscordGuildMemberSearchValidator +public static class DiscordGuildMemberSearchValidator { /// /// Gets the max OR query item count. @@ -37,21 +37,21 @@ internal sealed class DiscordGuildMemberSearchValidator /// /// The search parameters to validate. /// A tuple containing a boolean indicating validity and an optional error message. - public static (bool IsValid, string? ErrorMessage) Validate(DiscordGuildMemberSearchParams searchParams) + public static (bool IsValid, string? ErrorMessage) Validate(this DiscordGuildMemberSearchParams searchParams) { if (searchParams.Limit is < MIN_LIMIT or > MAX_LIMIT) return (false, $"Limit must be between {MIN_LIMIT} and {MAX_LIMIT}."); if (searchParams.OrQuery is not null) { - var orQueryCheck = ValidateQuery(searchParams.OrQuery, "OR", true); + var orQueryCheck = searchParams.OrQuery.ValidateQuery("OR", true); if (!orQueryCheck.IsValid) return orQueryCheck; } if (searchParams.AndQuery is not null) { - var andQueryCheck = ValidateQuery(searchParams.AndQuery, "AND", false); + var andQueryCheck = searchParams.AndQuery.ValidateQuery("AND", false); if (!andQueryCheck.IsValid) return andQueryCheck; } @@ -62,18 +62,18 @@ public static (bool IsValid, string? ErrorMessage) Validate(DiscordGuildMemberSe /// /// Validates a DiscordMemberFilter query. /// - private static (bool IsValid, string? ErrorMessage) ValidateQuery(DiscordMemberFilter filter, string queryType, bool validateOrQuery) + private static (bool IsValid, string? ErrorMessage) ValidateQuery(this DiscordMemberFilter filter, string queryType, bool validateOrQuery) { if (filter.UserId is not null) { - var result = ValidateQueryConditions(filter.UserId, queryType, "UserId", ValidateSnowflakeType, allowRange: true); + var result = filter.UserId.ValidateQueryConditions(queryType, "UserId", ValidateSnowflakeType, allowRange: true); if (!result.IsValid) return result; } if (filter.Usernames is not null && validateOrQuery) { - var result = ValidateQueryConditions(filter.Usernames, queryType, "Usernames", ValidateStringType, true); + var result = filter.Usernames.ValidateQueryConditions(queryType, "Usernames", ValidateStringType, true); if (!result.IsValid) return result; } @@ -82,28 +82,28 @@ private static (bool IsValid, string? ErrorMessage) ValidateQuery(DiscordMemberF if (filter.RoleIds is not null) { - var result = ValidateQueryConditions(filter.RoleIds, queryType, "RoleIds", ValidateSnowflakeType, true, true); + var result = filter.RoleIds.ValidateQueryConditions(queryType, "RoleIds", ValidateSnowflakeType, true, true); if (!result.IsValid) return result; } if (filter.GuildJoinedAt is not null) { - var result = ValidateQueryConditions(filter.GuildJoinedAt, queryType, "GuildJoinedAt", ValidateIntegerType, allowRange: true); + var result = filter.GuildJoinedAt.ValidateQueryConditions(queryType, "GuildJoinedAt", ValidateIntegerType, allowRange: true); if (!result.IsValid) return result; } if (filter.JoinSourceType is not null) { - var result = ValidateQueryConditions(filter.JoinSourceType, queryType, "JoinSourceType", ValidateIntegerType, true); + var result = filter.JoinSourceType.ValidateQueryConditions(queryType, "JoinSourceType", ValidateIntegerType, true); if (!result.IsValid) return result; } if (filter.SourceInviteCode is not null) { - var result = ValidateQueryConditions(filter.SourceInviteCode, queryType, "SourceInviteCode", ValidateStringType, true); + var result = filter.SourceInviteCode.ValidateQueryConditions(queryType, "SourceInviteCode", ValidateStringType, true); if (!result.IsValid) return result; } @@ -121,7 +121,7 @@ private static (bool IsValid, string? ErrorMessage) ValidateQuery(DiscordMemberF /// /// Validates the conditions and types of an individual query within a filter. /// - private static (bool IsValid, string? ErrorMessage) ValidateQueryConditions(DiscordQuery query, string queryType, string fieldName, Func validateType, bool allowOr = false, bool allowAnd = false, bool allowRange = false) + private static (bool IsValid, string? ErrorMessage) ValidateQueryConditions(this DiscordQuery query, string queryType, string fieldName, Func validateType, bool allowOr = false, bool allowAnd = false, bool allowRange = false) { if (query.OrQuery is not null && !allowOr) return (false, $"{fieldName} in {queryType} filter cannot be used with OR queries."); @@ -157,18 +157,18 @@ private static (bool IsValid, string? ErrorMessage) ValidateQueryConditions(Disc /// /// Validates safety signals queries. /// - private static (bool IsValid, string? ErrorMessage) ValidateSafetySignals(DiscordSafetySignals safetySignals) + private static (bool IsValid, string? ErrorMessage) ValidateSafetySignals(this DiscordSafetySignals safetySignals) { if (safetySignals.UnusualDmActivityUntil is not null) { - var result = ValidateQueryConditions(safetySignals.UnusualDmActivityUntil, "SafetySignals", "UnusualDmActivityUntil", ValidateIntegerType, allowRange: true); + var result = safetySignals.UnusualDmActivityUntil.ValidateQueryConditions("SafetySignals", "UnusualDmActivityUntil", ValidateIntegerType, allowRange: true); if (!result.IsValid) return result; } if (safetySignals.CommunicationDisabledUntil is not null) { - var result = ValidateQueryConditions(safetySignals.CommunicationDisabledUntil, "SafetySignals", "CommunicationDisabledUntil", ValidateIntegerType, allowRange: true); + var result = safetySignals.CommunicationDisabledUntil.ValidateQueryConditions("SafetySignals", "CommunicationDisabledUntil", ValidateIntegerType, allowRange: true); if (!result.IsValid) return result; } @@ -179,18 +179,18 @@ private static (bool IsValid, string? ErrorMessage) ValidateSafetySignals(Discor /// /// Validates that the query type is snowflake. /// - private static bool ValidateSnowflakeType(string query) + private static bool ValidateSnowflakeType(this string query) => ulong.TryParse(query, out _); /// /// Validates that the query type is integer. /// - private static bool ValidateIntegerType(string query) + private static bool ValidateIntegerType(this string query) => int.TryParse(query, out _); /// /// Validates that the query type is string. /// - private static bool ValidateStringType(string query) + private static bool ValidateStringType(this string query) => !string.IsNullOrWhiteSpace(query); }