Refactor & update member search v2 (#3046)
This commit is contained in:
@@ -13,7 +13,12 @@ public class MemberSearchPropertiesV2
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the after property for the search.
|
/// Gets or sets the after property for the search.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchPropertiesV2After After { get; set; }
|
public MemberSearchPaginationFilter After { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the before property for the search.
|
||||||
|
/// </summary>
|
||||||
|
public MemberSearchPaginationFilter Before { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the sort type for the search.
|
/// Gets or sets the sort type for the search.
|
||||||
@@ -23,19 +28,19 @@ public class MemberSearchPropertiesV2
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the and query for the search.
|
/// Gets or sets the and query for the search.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2QueryParams? AndQuery { get; set; }
|
public MemberSearchFilter? AndQuery { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the or query for the search.
|
/// Gets or sets the or query for the search.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2QueryParams? OrQuery { get; set; }
|
public MemberSearchFilter? OrQuery { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the after property for searching members in a guild.
|
/// Represents the after property for searching members in a guild.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct MemberSearchPropertiesV2After
|
public struct MemberSearchPaginationFilter
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the user ID to search after.
|
/// Gets or sets the user ID to search after.
|
||||||
@@ -47,24 +52,26 @@ public struct MemberSearchPropertiesV2After
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public long GuildJoinedAt { get; set; }
|
public long GuildJoinedAt { get; set; }
|
||||||
|
|
||||||
public MemberSearchPropertiesV2After(ulong userId, long guildJoinedAt)
|
public MemberSearchPaginationFilter(ulong userId, long guildJoinedAt)
|
||||||
{
|
{
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
GuildJoinedAt = guildJoinedAt;
|
GuildJoinedAt = guildJoinedAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemberSearchPropertiesV2After(ulong userId, DateTimeOffset guildJoinedAt)
|
public MemberSearchPaginationFilter(ulong userId, DateTimeOffset guildJoinedAt)
|
||||||
{
|
{
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
GuildJoinedAt = guildJoinedAt.ToUnixTimeMilliseconds();
|
GuildJoinedAt = guildJoinedAt.ToUnixTimeMilliseconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MemberSearchPaginationFilter() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the query parameters for searching members in a guild.
|
/// Represents the query parameters for searching members in a guild.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct MemberSearchV2QueryParams
|
public struct MemberSearchFilter
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the safety signal search properties.
|
/// Gets or sets the safety signal search properties.
|
||||||
@@ -74,27 +81,60 @@ public struct MemberSearchV2QueryParams
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the role IDs to search for.
|
/// Gets or sets the role IDs to search for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2QueryProperties? RoleIds { get; set; }
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.OrQuery"/> and <see cref="IMemberSearchQuery.AndQuery"/> are supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchSnowflakeQuery? RoleIds { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the range to search for the user ID.
|
/// Gets or sets the range to search for the user ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2RangeProperties? UserId { get; set; }
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.OrQuery"/> and <see cref="IMemberSearchQuery.Range"/> are supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchSnowflakeQuery? UserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the range to search for the user's guild joined at timestamp.
|
/// Gets or sets the range to search for the user's guild joined at timestamp.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2RangeProperties? GuildJoinedAt { get; set; }
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.Range"/> is supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchIntQuery? GuildJoinedAt { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the source invite code to search for.
|
/// Gets or sets the source invite code to search for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2QueryProperties? SourceInviteCode { get; set; }
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.OrQuery"/> is supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchStringQuery? SourceInviteCode { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the join source type to search for.
|
/// Gets or sets the join source type to search for.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2QueryProperties? JoinSourceType { get; set; }
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.OrQuery"/> is supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchIntQuery? JoinSourceType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets whether the member left and rejoined the guild.
|
||||||
|
/// </summary>
|
||||||
|
public bool? DidRejoin { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets whether the member has not yet passed the guild's member verification requirements.
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsPending { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the usernames to match against.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Only <see cref="IMemberSearchQuery.OrQuery"/> is supported.
|
||||||
|
/// </remarks>
|
||||||
|
public MemberSearchStringQuery? Usernames { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -106,12 +146,12 @@ public struct MemberSearchV2SafetySignalsProperties
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the unusual DM activity until property for the search.
|
/// Gets or sets the unusual DM activity until property for the search.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2SafetySignalProperties? UnusualDmActivityUntil { get; set; }
|
public MemberSearchIntQuery? UnusualDmActivityUntil { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the communication disabled until property for the search.
|
/// Gets or sets the communication disabled until property for the search.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MemberSearchV2SafetySignalProperties? CommunicationDisabledUntil { get; set; }
|
public MemberSearchIntQuery? CommunicationDisabledUntil { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the unusual account activity property for the search.
|
/// Gets or sets the unusual account activity property for the search.
|
||||||
@@ -124,52 +164,10 @@ public struct MemberSearchV2SafetySignalsProperties
|
|||||||
public bool? AutomodQuarantinedUsername { get; set; }
|
public bool? AutomodQuarantinedUsername { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Represents the query properties for searching members in a guild.
|
|
||||||
/// </summary>
|
|
||||||
public readonly struct MemberSearchV2QueryProperties
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the and query for the search.
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<int, object> AndQuery { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the or query for the search.
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<int, object> OrQuery { get; }
|
|
||||||
|
|
||||||
public MemberSearchV2QueryProperties(Dictionary<int, string> andQuery, Dictionary<int, string> orQuery)
|
|
||||||
{
|
|
||||||
AndQuery = andQuery.Select(x => new KeyValuePair<int, object>(x.Key, x.Value)).ToDictionary(x => x.Key, y => y.Value);
|
|
||||||
OrQuery = orQuery.Select(x => new KeyValuePair<int, object>(x.Key, x.Value)).ToDictionary(x => x.Key, y => y.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MemberSearchV2QueryProperties(Dictionary<int, long> andQuery, Dictionary<int, long> orQuery)
|
|
||||||
{
|
|
||||||
AndQuery = andQuery.Select(x => new KeyValuePair<int, object>(x.Key, x.Value)).ToDictionary(x => x.Key, y => y.Value);
|
|
||||||
OrQuery = orQuery.Select(x => new KeyValuePair<int, object>(x.Key, x.Value)).ToDictionary(x => x.Key, y => y.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Represents the safety signal properties for searching members in a guild.
|
|
||||||
/// </summary>
|
|
||||||
public struct MemberSearchV2SafetySignalProperties
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the range for the search.
|
|
||||||
/// </summary>
|
|
||||||
public MemberSearchV2RangeProperties Range { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents the range properties for searching members in a guild.
|
/// Represents the range properties for searching members in a guild.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct MemberSearchV2RangeProperties
|
public struct MemberSearchV2Range
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the less than property for the search.
|
/// Gets or sets the less than property for the search.
|
||||||
@@ -181,3 +179,78 @@ public struct MemberSearchV2RangeProperties
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public long? GreaterThanOrEqual { get; set; }
|
public long? GreaterThanOrEqual { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public interface IMemberSearchQuery
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the range for the search.
|
||||||
|
/// </summary>
|
||||||
|
MemberSearchV2Range? Range { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the AND query for the search.
|
||||||
|
/// </summary>
|
||||||
|
IEnumerable<object> AndQuery { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the OR query for the search.
|
||||||
|
/// </summary>
|
||||||
|
IEnumerable<object> OrQuery { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct MemberSearchStringQuery : IMemberSearchQuery
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public MemberSearchV2Range? Range { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.AndQuery"/>
|
||||||
|
public IEnumerable<string> AndQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.OrQuery"/>
|
||||||
|
public IEnumerable<string> OrQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.AndQuery => AndQuery;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.OrQuery => OrQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public struct MemberSearchIntQuery : IMemberSearchQuery
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public MemberSearchV2Range? Range { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.AndQuery"/>
|
||||||
|
public IEnumerable<int> AndQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.OrQuery"/>
|
||||||
|
public IEnumerable<int> OrQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.AndQuery => AndQuery.Select(x => (object)x);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.OrQuery => OrQuery.Select(x => (object)x);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public struct MemberSearchSnowflakeQuery : IMemberSearchQuery
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public MemberSearchV2Range? Range { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.AndQuery"/>
|
||||||
|
public IEnumerable<ulong> AndQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc cref="IMemberSearchQuery.OrQuery"/>
|
||||||
|
public IEnumerable<ulong> OrQuery { get; set; }
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.AndQuery => AndQuery.Select(x => (object)x);
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
IEnumerable<object> IMemberSearchQuery.OrQuery => OrQuery.Select(x => (object)x);
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ internal class GuildMemberSearchResponse
|
|||||||
public ulong GuildId { get; set; }
|
public ulong GuildId { get; set; }
|
||||||
|
|
||||||
[JsonProperty("members")]
|
[JsonProperty("members")]
|
||||||
public GuildSearchMemberData[] Members { get; set; }
|
public SupplementalGuildUser[] Members { get; set; }
|
||||||
|
|
||||||
[JsonProperty("page_result_count")]
|
[JsonProperty("page_result_count")]
|
||||||
public int PageResultCount { get; set; }
|
public int PageResultCount { get; set; }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ using Newtonsoft.Json;
|
|||||||
|
|
||||||
namespace Discord.API;
|
namespace Discord.API;
|
||||||
|
|
||||||
internal class GuildSearchMemberData
|
internal class SupplementalGuildUser
|
||||||
{
|
{
|
||||||
[JsonProperty("member")]
|
[JsonProperty("member")]
|
||||||
public GuildMember Member { get; set; }
|
public GuildMember Member { get; set; }
|
||||||
@@ -9,19 +9,22 @@ internal class SearchGuildMembersParamsV2
|
|||||||
public Optional<int?> Limit { get; set; }
|
public Optional<int?> Limit { get; set; }
|
||||||
|
|
||||||
[JsonProperty("and_query")]
|
[JsonProperty("and_query")]
|
||||||
public Optional<SearchQueryParams> AndQuery { get; set; }
|
public Optional<MemberSearchFilter> AndQuery { get; set; }
|
||||||
|
|
||||||
[JsonProperty("or_query")]
|
[JsonProperty("or_query")]
|
||||||
public Optional<SearchQueryParams> OrQuery { get; set; }
|
public Optional<MemberSearchFilter> OrQuery { get; set; }
|
||||||
|
|
||||||
[JsonProperty("after")]
|
[JsonProperty("after")]
|
||||||
public Optional<SearchParamsAfter> After { get; set; }
|
public Optional<MemberSearchPaginationFilter> After { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("before")]
|
||||||
|
public Optional<MemberSearchPaginationFilter> Before { get; set; }
|
||||||
|
|
||||||
[JsonProperty("sort")]
|
[JsonProperty("sort")]
|
||||||
public Optional<MemberSearchV2SortType> Sort { get; set; }
|
public Optional<MemberSearchV2SortType> Sort { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SearchParamsAfter
|
internal class MemberSearchPaginationFilter
|
||||||
{
|
{
|
||||||
[JsonProperty("guild_joined_at")]
|
[JsonProperty("guild_joined_at")]
|
||||||
public long GuildJoinedAt { get; set; }
|
public long GuildJoinedAt { get; set; }
|
||||||
@@ -30,7 +33,7 @@ internal class SearchParamsAfter
|
|||||||
public ulong UserId { get; set; }
|
public ulong UserId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SearchQueryParams
|
internal class MemberSearchFilter
|
||||||
{
|
{
|
||||||
[JsonProperty("safety_signals")]
|
[JsonProperty("safety_signals")]
|
||||||
public Optional<SafetySignalsProperties> SafetySignals { get; set; }
|
public Optional<SafetySignalsProperties> SafetySignals { get; set; }
|
||||||
@@ -39,34 +42,46 @@ internal class SearchQueryParams
|
|||||||
public Optional<SearchQueryProperties> RoleIds { get; set; }
|
public Optional<SearchQueryProperties> RoleIds { get; set; }
|
||||||
|
|
||||||
[JsonProperty("user_id")]
|
[JsonProperty("user_id")]
|
||||||
public Optional<SearchRangeProperties> UserId { get; set; }
|
public Optional<SearchQueryProperties> UserId { get; set; }
|
||||||
|
|
||||||
[JsonProperty("guild_joined_at")]
|
[JsonProperty("guild_joined_at")]
|
||||||
public Optional<SearchRangeProperties> GuildJoinedAt { get; set; }
|
public Optional<SearchQueryProperties> GuildJoinedAt { get; set; }
|
||||||
|
|
||||||
[JsonProperty("source_invite_code")]
|
[JsonProperty("source_invite_code")]
|
||||||
public Optional<SearchQueryProperties> SourceInviteCode { get; set; }
|
public Optional<SearchQueryProperties> SourceInviteCode { get; set; }
|
||||||
|
|
||||||
[JsonProperty("join_source_type")]
|
[JsonProperty("join_source_type")]
|
||||||
public Optional<SearchQueryProperties> JoinSourceType { get; set; }
|
public Optional<SearchQueryProperties> JoinSourceType { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("did_rejoin")]
|
||||||
|
public Optional<bool> DidRejoin { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("is_pending")]
|
||||||
|
public Optional<bool> IsPending { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("usernames")]
|
||||||
|
public Optional<SearchQueryProperties> Usernames { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SearchQueryProperties
|
internal class SearchQueryProperties
|
||||||
{
|
{
|
||||||
[JsonProperty("and_query")]
|
[JsonProperty("and_query")]
|
||||||
public Optional<Dictionary<int, object>> AndQuery { get; set; }
|
public Optional<IEnumerable<object>> AndQuery { get; set; }
|
||||||
|
|
||||||
[JsonProperty("or_query")]
|
[JsonProperty("or_query")]
|
||||||
public Optional<Dictionary<int, object>> OrQuery { get; set; }
|
public Optional<IEnumerable<object>> OrQuery { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty("range")]
|
||||||
|
public Optional<SearchRangeProperties> Range { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SafetySignalsProperties
|
internal class SafetySignalsProperties
|
||||||
{
|
{
|
||||||
[JsonProperty("unusual_dm_activity_until")]
|
[JsonProperty("unusual_dm_activity_until")]
|
||||||
public Optional<SafetySignalProperties> UnusualDMActivityUntil { get; set; }
|
public Optional<SearchQueryProperties> UnusualDMActivityUntil { get; set; }
|
||||||
|
|
||||||
[JsonProperty("communication_disabled_until")]
|
[JsonProperty("communication_disabled_until")]
|
||||||
public Optional<SafetySignalProperties> CommunicationDisabledUntil { get; set; }
|
public Optional<SearchQueryProperties> CommunicationDisabledUntil { get; set; }
|
||||||
|
|
||||||
[JsonProperty("unusual_account_activity")]
|
[JsonProperty("unusual_account_activity")]
|
||||||
public Optional<bool> UnusualAccountActivity { get; set; }
|
public Optional<bool> UnusualAccountActivity { get; set; }
|
||||||
@@ -75,12 +90,6 @@ internal class SafetySignalsProperties
|
|||||||
public Optional<bool> AutomodQuarantinedUsername { get; set; }
|
public Optional<bool> AutomodQuarantinedUsername { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SafetySignalProperties
|
|
||||||
{
|
|
||||||
[JsonProperty("range")]
|
|
||||||
public SearchRangeProperties Until { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class SearchRangeProperties
|
internal class SearchRangeProperties
|
||||||
{
|
{
|
||||||
[JsonProperty("gte")]
|
[JsonProperty("gte")]
|
||||||
|
|||||||
@@ -2047,13 +2047,15 @@ namespace Discord.API
|
|||||||
return SendAsync<IReadOnlyCollection<GuildMember>>("GET", endpoint, ids, options: options);
|
return SendAsync<IReadOnlyCollection<GuildMember>>("GET", endpoint, ids, options: options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<GuildMemberSearchResponse> SearchGuildMembersAsyncV2(ulong guildId, SearchGuildMembersParamsV2 args, RequestOptions options = null)
|
public async Task<GuildMemberSearchResponse> SearchGuildMembersAsyncV2(ulong guildId, SearchGuildMembersParamsV2 args, RequestOptions options = null)
|
||||||
{
|
{
|
||||||
Preconditions.NotEqual(guildId, 0, nameof(guildId));
|
Preconditions.NotEqual(guildId, 0, nameof(guildId));
|
||||||
options = RequestOptions.CreateOrClone(options);
|
options = RequestOptions.CreateOrClone(options);
|
||||||
|
|
||||||
var ids = new BucketIds(guildId: guildId);
|
var ids = new BucketIds(guildId: guildId);
|
||||||
return SendJsonAsync<GuildMemberSearchResponse>("POST", () => $"guilds/{guildId}/members-search", args, ids, options: options);
|
var response = await SendJsonAsync<GuildMemberSearchResponse>("POST", () => $"guilds/{guildId}/members-search", args, ids, options: options);
|
||||||
|
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -779,166 +779,14 @@ namespace Discord.Rest
|
|||||||
Limit = limit,
|
Limit = limit,
|
||||||
After = args is null
|
After = args is null
|
||||||
? null
|
? null
|
||||||
: new SearchParamsAfter
|
: new API.Rest.MemberSearchPaginationFilter
|
||||||
{
|
{
|
||||||
UserId = args.After.UserId,
|
UserId = args.After.UserId,
|
||||||
GuildJoinedAt = args.After.GuildJoinedAt
|
GuildJoinedAt = args.After.GuildJoinedAt
|
||||||
},
|
},
|
||||||
Sort = args?.Sort ?? Optional<MemberSearchV2SortType>.Unspecified,
|
Sort = args?.Sort ?? Optional<MemberSearchV2SortType>.Unspecified,
|
||||||
OrQuery = args is null
|
OrQuery = args?.OrQuery?.ToModel() ?? Optional<API.Rest.MemberSearchFilter>.Unspecified,
|
||||||
? Optional<SearchQueryParams>.Unspecified
|
AndQuery = args?.AndQuery?.ToModel() ?? Optional<API.Rest.MemberSearchFilter>.Unspecified
|
||||||
: args.OrQuery is null
|
|
||||||
? Optional<SearchQueryParams>.Unspecified
|
|
||||||
: new SearchQueryParams
|
|
||||||
{
|
|
||||||
GuildJoinedAt = args.OrQuery.Value.GuildJoinedAt is null
|
|
||||||
? Optional<SearchRangeProperties>.Unspecified
|
|
||||||
: new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.OrQuery.Value.GuildJoinedAt.Value.GreaterThanOrEqual is null
|
|
||||||
? Optional<long>.Unspecified
|
|
||||||
: args.OrQuery.Value.GuildJoinedAt.Value.GreaterThanOrEqual.Value,
|
|
||||||
LessThanOrEqual = args.OrQuery.Value.GuildJoinedAt.Value.LessThanOrEqual is null
|
|
||||||
? Optional<long>.Unspecified
|
|
||||||
: args.OrQuery.Value.GuildJoinedAt.Value.LessThanOrEqual.Value,
|
|
||||||
},
|
|
||||||
JoinSourceType = args.OrQuery.Value.JoinSourceType is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.OrQuery.Value.JoinSourceType.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.OrQuery.Value.JoinSourceType.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
RoleIds = args.OrQuery.Value.RoleIds is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.OrQuery.Value.RoleIds.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.OrQuery.Value.RoleIds.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
SourceInviteCode = args.OrQuery.Value.SourceInviteCode is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.OrQuery.Value.SourceInviteCode.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.OrQuery.Value.SourceInviteCode.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
SafetySignals = args.OrQuery.Value.SafetySignals is null
|
|
||||||
? Optional<SafetySignalsProperties>.Unspecified
|
|
||||||
: new SafetySignalsProperties
|
|
||||||
{
|
|
||||||
AutomodQuarantinedUsername = args.OrQuery.Value.SafetySignals.Value.AutomodQuarantinedUsername is null
|
|
||||||
? Optional<bool>.Unspecified
|
|
||||||
: args.OrQuery.Value.SafetySignals.Value.AutomodQuarantinedUsername.Value,
|
|
||||||
UnusualAccountActivity = args.OrQuery.Value.SafetySignals.Value.UnusualAccountActivity is null
|
|
||||||
? Optional<bool>.Unspecified
|
|
||||||
: args.OrQuery.Value.SafetySignals.Value.UnusualAccountActivity.Value,
|
|
||||||
CommunicationDisabledUntil = args.OrQuery.Value.SafetySignals.Value.CommunicationDisabledUntil is null
|
|
||||||
? Optional<SafetySignalProperties>.Unspecified
|
|
||||||
: new SafetySignalProperties
|
|
||||||
{
|
|
||||||
Until = new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.OrQuery.Value.SafetySignals.Value.CommunicationDisabledUntil.Value.Range.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
LessThanOrEqual = args.OrQuery.Value.SafetySignals.Value.CommunicationDisabledUntil.Value.Range.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
UnusualDMActivityUntil = args.OrQuery.Value.SafetySignals.Value.UnusualDmActivityUntil is null
|
|
||||||
? Optional<SafetySignalProperties>.Unspecified
|
|
||||||
: new SafetySignalProperties
|
|
||||||
{
|
|
||||||
Until = new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.OrQuery.Value.SafetySignals.Value.UnusualDmActivityUntil.Value.Range.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
LessThanOrEqual = args.OrQuery.Value.SafetySignals.Value.UnusualDmActivityUntil.Value.Range.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
UserId = args.OrQuery.Value.UserId is null
|
|
||||||
? Optional<SearchRangeProperties>.Unspecified
|
|
||||||
: new SearchRangeProperties
|
|
||||||
{
|
|
||||||
LessThanOrEqual = args.OrQuery.Value.UserId.Value.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
GreaterThanOrEqual = args.OrQuery.Value.UserId.Value.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
AndQuery = args is null
|
|
||||||
? Optional<SearchQueryParams>.Unspecified
|
|
||||||
: args.AndQuery is null
|
|
||||||
? Optional<SearchQueryParams>.Unspecified
|
|
||||||
: new SearchQueryParams
|
|
||||||
{
|
|
||||||
GuildJoinedAt = args.AndQuery.Value.GuildJoinedAt is null
|
|
||||||
? Optional<SearchRangeProperties>.Unspecified
|
|
||||||
: new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.AndQuery.Value.GuildJoinedAt.Value.GreaterThanOrEqual is null
|
|
||||||
? Optional<long>.Unspecified
|
|
||||||
: args.AndQuery.Value.GuildJoinedAt.Value.GreaterThanOrEqual.Value,
|
|
||||||
LessThanOrEqual = args.AndQuery.Value.GuildJoinedAt.Value.LessThanOrEqual is null
|
|
||||||
? Optional<long>.Unspecified
|
|
||||||
: args.AndQuery.Value.GuildJoinedAt.Value.LessThanOrEqual.Value,
|
|
||||||
},
|
|
||||||
JoinSourceType = args.AndQuery.Value.JoinSourceType is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.AndQuery.Value.JoinSourceType.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.AndQuery.Value.JoinSourceType.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
RoleIds = args.AndQuery.Value.RoleIds is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.AndQuery.Value.RoleIds.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.AndQuery.Value.RoleIds.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
SourceInviteCode = args.AndQuery.Value.SourceInviteCode is null
|
|
||||||
? Optional<SearchQueryProperties>.Unspecified
|
|
||||||
: new SearchQueryProperties
|
|
||||||
{
|
|
||||||
AndQuery = args.AndQuery.Value.SourceInviteCode.Value.AndQuery ?? Optional<Dictionary<int, object>>.Unspecified,
|
|
||||||
OrQuery = args.AndQuery.Value.SourceInviteCode.Value.OrQuery ?? Optional<Dictionary<int, object>>.Unspecified
|
|
||||||
},
|
|
||||||
SafetySignals = args.AndQuery.Value.SafetySignals is null
|
|
||||||
? Optional<SafetySignalsProperties>.Unspecified
|
|
||||||
: new SafetySignalsProperties
|
|
||||||
{
|
|
||||||
AutomodQuarantinedUsername = args.AndQuery.Value.SafetySignals.Value.AutomodQuarantinedUsername is null
|
|
||||||
? Optional<bool>.Unspecified
|
|
||||||
: args.AndQuery.Value.SafetySignals.Value.AutomodQuarantinedUsername.Value,
|
|
||||||
UnusualAccountActivity = args.AndQuery.Value.SafetySignals.Value.UnusualAccountActivity is null
|
|
||||||
? Optional<bool>.Unspecified
|
|
||||||
: args.AndQuery.Value.SafetySignals.Value.UnusualAccountActivity.Value,
|
|
||||||
CommunicationDisabledUntil = args.AndQuery.Value.SafetySignals.Value.CommunicationDisabledUntil is null
|
|
||||||
? Optional<SafetySignalProperties>.Unspecified
|
|
||||||
: new SafetySignalProperties
|
|
||||||
{
|
|
||||||
Until = new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.AndQuery.Value.SafetySignals.Value.CommunicationDisabledUntil.Value.Range.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
LessThanOrEqual = args.AndQuery.Value.SafetySignals.Value.CommunicationDisabledUntil.Value.Range.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
UnusualDMActivityUntil = args.AndQuery.Value.SafetySignals.Value.UnusualDmActivityUntil is null
|
|
||||||
? Optional<SafetySignalProperties>.Unspecified
|
|
||||||
: new SafetySignalProperties
|
|
||||||
{
|
|
||||||
Until = new SearchRangeProperties
|
|
||||||
{
|
|
||||||
GreaterThanOrEqual = args.AndQuery.Value.SafetySignals.Value.UnusualDmActivityUntil.Value.Range.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
LessThanOrEqual = args.AndQuery.Value.SafetySignals.Value.UnusualDmActivityUntil.Value.Range.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
UserId = args.AndQuery.Value.UserId is null
|
|
||||||
? Optional<SearchRangeProperties>.Unspecified
|
|
||||||
: new SearchRangeProperties
|
|
||||||
{
|
|
||||||
LessThanOrEqual = args.AndQuery.Value.UserId.Value.LessThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
GreaterThanOrEqual = args.AndQuery.Value.UserId.Value.GreaterThanOrEqual ?? Optional<long>.Unspecified,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
var model = await client.ApiClient.SearchGuildMembersAsyncV2(guild.Id, apiArgs, options);
|
var model = await client.ApiClient.SearchGuildMembersAsyncV2(guild.Id, apiArgs, options);
|
||||||
|
|
||||||
|
|||||||
43
src/Discord.Net.Rest/Extensions/MemberSearchExtensions.cs
Normal file
43
src/Discord.Net.Rest/Extensions/MemberSearchExtensions.cs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Discord.Rest;
|
||||||
|
|
||||||
|
internal static class MemberSearchExtensions
|
||||||
|
{
|
||||||
|
internal static API.Rest.SearchQueryProperties ToModel(this IMemberSearchQuery props)
|
||||||
|
=> new ()
|
||||||
|
{
|
||||||
|
Range = props.Range.HasValue
|
||||||
|
? new API.Rest.SearchRangeProperties
|
||||||
|
{
|
||||||
|
GreaterThanOrEqual = props.Range.Value.GreaterThanOrEqual.HasValue ? props.Range.Value.GreaterThanOrEqual.Value : Optional<long>.Unspecified,
|
||||||
|
LessThanOrEqual = props.Range.Value.LessThanOrEqual.HasValue ? props.Range.Value.LessThanOrEqual.Value : Optional<long>.Unspecified
|
||||||
|
}
|
||||||
|
: Optional<API.Rest.SearchRangeProperties>.Unspecified,
|
||||||
|
AndQuery = props.AndQuery is not null ? new Optional<IEnumerable<object>>(props.AndQuery) : Optional<IEnumerable<object>>.Unspecified,
|
||||||
|
OrQuery = props.OrQuery is not null ? new Optional<IEnumerable<object>>(props.OrQuery) : Optional<IEnumerable<object>>.Unspecified
|
||||||
|
};
|
||||||
|
|
||||||
|
internal static API.Rest.SafetySignalsProperties ToModel(this MemberSearchV2SafetySignalsProperties props)
|
||||||
|
=> new()
|
||||||
|
{
|
||||||
|
AutomodQuarantinedUsername = props.AutomodQuarantinedUsername ?? Optional<bool>.Unspecified,
|
||||||
|
UnusualAccountActivity = props.UnusualAccountActivity ?? Optional<bool>.Unspecified,
|
||||||
|
CommunicationDisabledUntil = props.CommunicationDisabledUntil?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
UnusualDMActivityUntil = props.UnusualDmActivityUntil?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
};
|
||||||
|
|
||||||
|
internal static API.Rest.MemberSearchFilter ToModel(this MemberSearchFilter props)
|
||||||
|
=> new()
|
||||||
|
{
|
||||||
|
DidRejoin = props.DidRejoin ?? Optional<bool>.Unspecified,
|
||||||
|
IsPending = props.IsPending ?? Optional<bool>.Unspecified,
|
||||||
|
JoinSourceType = props.JoinSourceType?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
GuildJoinedAt = props.GuildJoinedAt?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
RoleIds = props.RoleIds?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
SourceInviteCode = props.SourceInviteCode?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
SafetySignals = props.SafetySignals?.ToModel() ?? Optional<API.Rest.SafetySignalsProperties>.Unspecified,
|
||||||
|
UserId = props.UserId?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified,
|
||||||
|
Usernames = props.Usernames?.ToModel() ?? Optional<API.Rest.SearchQueryProperties>.Unspecified
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user