diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
index 2f0599d76..1761b3f88 100644
--- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
+++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
@@ -1,4 +1,4 @@
-using Discord.Audio;
+using Discord.Audio;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -66,6 +66,24 @@ namespace Discord
/// Gets a collection of all users banned on this guild.
Task> GetBansAsync(RequestOptions options = null);
+ ///
+ /// Gets a ban object for a banned user.
+ ///
+ /// The banned user.
+ ///
+ /// An awaitable containing the ban object, which contains the user information and the
+ /// reason for the ban; if the ban entry cannot be found.
+ ///
+ Task GetBanAsync(IUser user, RequestOptions options = null);
+ ///
+ /// Gets a ban object for a banned user.
+ ///
+ /// The snowflake identifier for the banned user.
+ ///
+ /// An awaitable containing the ban object, which contains the user information and the
+ /// reason for the ban; if the ban entry cannot be found.
+ ///
+ Task GetBanAsync(ulong userId, RequestOptions options = null);
/// Bans the provided user from this guild and optionally prunes their recent messages.
/// The number of days to remove messages from this user for - must be between [0, 7]
Task AddBanAsync(IUser user, int pruneDays = 0, string reason = null, RequestOptions options = null);
@@ -135,4 +153,4 @@ namespace Discord
/// Deletes an existing emote from this guild.
Task DeleteEmoteAsync(GuildEmote emote, RequestOptions options = null);
}
-}
\ No newline at end of file
+}
diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs
index 042ae9970..fbf9896b8 100644
--- a/src/Discord.Net.Rest/DiscordRestApiClient.cs
+++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs
@@ -800,6 +800,15 @@ namespace Discord.API
var ids = new BucketIds(guildId: guildId);
return await SendAsync>("GET", () => $"guilds/{guildId}/bans", ids, options: options).ConfigureAwait(false);
}
+ public async Task GetGuildBanAsync(ulong guildId, ulong userId, RequestOptions options)
+ {
+ Preconditions.NotEqual(userId, 0, nameof(userId));
+ Preconditions.NotEqual(guildId, 0, nameof(guildId));
+ options = RequestOptions.CreateOrClone(options);
+
+ var ids = new BucketIds(guildId: guildId);
+ return await SendAsync("GET", () => $"guilds/{guildId}/bans/{userId}", ids, options: options).ConfigureAwait(false);
+ }
public async Task CreateGuildBanAsync(ulong guildId, ulong userId, CreateGuildBanParams args, RequestOptions options = null)
{
Preconditions.NotEqual(guildId, 0, nameof(guildId));
diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
index 12fdb075d..e3fd1a8c3 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
@@ -1,4 +1,4 @@
-using Discord.API.Rest;
+using Discord.API.Rest;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -111,6 +111,11 @@ namespace Discord.Rest
var models = await client.ApiClient.GetGuildBansAsync(guild.Id, options).ConfigureAwait(false);
return models.Select(x => RestBan.Create(client, x)).ToImmutableArray();
}
+ public static async Task GetBanAsync(IGuild guild, BaseDiscordClient client, ulong userId, RequestOptions options)
+ {
+ var model = await client.ApiClient.GetGuildBanAsync(guild.Id, userId, options).ConfigureAwait(false);
+ return RestBan.Create(client, model);
+ }
public static async Task AddBanAsync(IGuild guild, BaseDiscordClient client,
ulong userId, int pruneDays, string reason, RequestOptions options)
diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
index 5d12731a6..a7123930a 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
@@ -1,4 +1,4 @@
-using Discord.Audio;
+using Discord.Audio;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -140,6 +140,10 @@ namespace Discord.Rest
//Bans
public Task> GetBansAsync(RequestOptions options = null)
=> GuildHelper.GetBansAsync(this, Discord, options);
+ public Task GetBanAsync(IUser user, RequestOptions options = null)
+ => GuildHelper.GetBanAsync(this, Discord, user.Id, options);
+ public Task GetBanAsync(ulong userId, RequestOptions options = null)
+ => GuildHelper.GetBanAsync(this, Discord, userId, options);
public Task AddBanAsync(IUser user, int pruneDays = 0, string reason = null, RequestOptions options = null)
=> GuildHelper.AddBanAsync(this, Discord, user.Id, pruneDays, reason, options);
@@ -291,6 +295,12 @@ namespace Discord.Rest
async Task> IGuild.GetBansAsync(RequestOptions options)
=> await GetBansAsync(options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetBanAsync(IUser user, RequestOptions options)
+ => await GetBanAsync(user, options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetBanAsync(ulong userId, RequestOptions options)
+ => await GetBanAsync(userId, options).ConfigureAwait(false);
async Task> IGuild.GetChannelsAsync(CacheMode mode, RequestOptions options)
{
diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
index 259dae5a8..3dbd1160c 100644
--- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
+++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
@@ -288,6 +288,10 @@ namespace Discord.WebSocket
//Bans
public Task> GetBansAsync(RequestOptions options = null)
=> GuildHelper.GetBansAsync(this, Discord, options);
+ public Task GetBanAsync(IUser user, RequestOptions options = null)
+ => GuildHelper.GetBanAsync(this, Discord, user.Id, options);
+ public Task GetBanAsync(ulong userId, RequestOptions options = null)
+ => GuildHelper.GetBanAsync(this, Discord, userId, options);
public Task AddBanAsync(IUser user, int pruneDays = 0, string reason = null, RequestOptions options = null)
=> GuildHelper.AddBanAsync(this, Discord, user.Id, pruneDays, reason, options);
@@ -641,6 +645,12 @@ namespace Discord.WebSocket
async Task> IGuild.GetBansAsync(RequestOptions options)
=> await GetBansAsync(options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetBanAsync(IUser user, RequestOptions options)
+ => await GetBanAsync(user, options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetBanAsync(ulong userId, RequestOptions options)
+ => await GetBanAsync(userId, options).ConfigureAwait(false);
Task> IGuild.GetChannelsAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult>(Channels);