mirror of
https://github.com/oliverbooth/X10D
synced 2024-11-09 23:45:42 +00:00
Add DiscordGuild.GetMemberOrNullAsync
D#+ throws an undocumented NotFoundException when a member does not exist. This method returns null instead
This commit is contained in:
parent
6cd7d8d5ce
commit
a076a61ae4
@ -1,5 +1,6 @@
|
||||
using DSharpPlus;
|
||||
using DSharpPlus.Entities;
|
||||
using DSharpPlus.Exceptions;
|
||||
|
||||
namespace X10D.DSharpPlus;
|
||||
|
||||
@ -27,6 +28,39 @@ public static class DiscordGuildExtensions
|
||||
await Task.WhenAll(guild.Threads.Values.Select(t => t.JoinThreadAsync())).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a guild member by their ID. If the member is not found, <see langword="null" /> is returned instead of
|
||||
/// <see cref="NotFoundException" /> being thrown.
|
||||
/// </summary>
|
||||
/// <param name="guild">The guild whose member list to search.</param>
|
||||
/// <param name="userId">The ID of the member to retrieve.</param>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="guild" /> is <see langword="null" />.</exception>
|
||||
public static async Task<DiscordMember?> GetMemberOrNullAsync(this DiscordGuild guild, ulong userId)
|
||||
{
|
||||
#if NET6_0_OR_GREATER
|
||||
ArgumentNullException.ThrowIfNull(guild);
|
||||
#else
|
||||
if (guild is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(guild));
|
||||
}
|
||||
#endif
|
||||
|
||||
try
|
||||
{
|
||||
// we should never use exceptions for flow control but this is D#+ we're talking about.
|
||||
// NotFoundException isn't even documented, and yet it gets thrown when a member doesn't exist.
|
||||
// so this method should hopefully clearly express that - and at least using exceptions for flow control *here*,
|
||||
// removes the need to do the same in consumer code.
|
||||
// god I hate this.
|
||||
return await guild.GetMemberAsync(userId).ConfigureAwait(false);
|
||||
}
|
||||
catch (NotFoundException)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Normalizes a <see cref="DiscordGuild" /> so that the internal client is assured to be a specified value.
|
||||
/// </summary>
|
||||
|
Loading…
Reference in New Issue
Block a user