diff --git a/src/Discord.Net/API/Endpoints.cs b/src/Discord.Net/API/Endpoints.cs index 67c256a88..f283d9bae 100644 --- a/src/Discord.Net/API/Endpoints.cs +++ b/src/Discord.Net/API/Endpoints.cs @@ -28,6 +28,7 @@ public static string ServerBan(string serverId, string userId) => $"guilds/{serverId}/bans/{userId}"; public static string ServerRoles(string serverId) => $"guilds/{serverId}/roles"; public static string ServerRole(string serverId, string roleId) => $"guilds/{serverId}/roles/{roleId}"; + public static string ServerPrune(string serverId, int days) => $"guilds/{serverId}/prune?days={days}"; public const string Invites = "invite"; public static string Invite(string inviteId) => $"invite/{inviteId}"; diff --git a/src/Discord.Net/API/Members.cs b/src/Discord.Net/API/Members.cs index 2a48b653d..9e69390c6 100644 --- a/src/Discord.Net/API/Members.cs +++ b/src/Discord.Net/API/Members.cs @@ -82,6 +82,12 @@ namespace Discord.API public IEnumerable Roles; } + public class PruneUsersResponse + { + [JsonProperty("pruned")] + public int? Pruned; + } + //Events internal sealed class MemberAddEvent : MemberInfo { } internal sealed class MemberUpdateEvent : MemberInfo { } diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/DiscordAPIClient.cs index 8b3590a27..92f23f008 100644 --- a/src/Discord.Net/DiscordAPIClient.cs +++ b/src/Discord.Net/DiscordAPIClient.cs @@ -136,7 +136,7 @@ namespace Discord return _rest.Delete(Endpoints.Invite(inviteId)); } - //Members + //Users public Task EditUser(string serverId, string userId, bool? mute = null, bool? deaf = null, IEnumerable roles = null) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); @@ -145,27 +145,39 @@ namespace Discord var request = new EditMemberRequest { Mute = mute, Deaf = deaf, Roles = roles }; return _rest.Patch(Endpoints.ServerMember(serverId, userId), request); } - public Task Kick(string serverId, string userId) + public Task KickUser(string serverId, string userId) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); if (userId == null) throw new ArgumentNullException(nameof(userId)); return _rest.Delete(Endpoints.ServerMember(serverId, userId)); } - public Task Ban(string serverId, string userId) + public Task BanUser(string serverId, string userId) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); if (userId == null) throw new ArgumentNullException(nameof(userId)); return _rest.Put(Endpoints.ServerBan(serverId, userId)); } - public Task Unban(string serverId, string userId) + public Task UnbanUser(string serverId, string userId) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); if (userId == null) throw new ArgumentNullException(nameof(userId)); return _rest.Delete(Endpoints.ServerBan(serverId, userId)); } + public async Task PruneUsers(string serverId, int days, bool simulate) + { + if (serverId == null) throw new ArgumentNullException(nameof(serverId)); + if (days <= 0) throw new ArgumentOutOfRangeException(nameof(days)); + + PruneUsersResponse response; + if (simulate) + response = await _rest.Get(Endpoints.ServerPrune(serverId, days)); + else + response = await _rest.Post(Endpoints.ServerPrune(serverId, days)); + return response.Pruned ?? 0; + } //Messages public Task SendMessage(string channelId, string message, IEnumerable mentionedUserIds = null, string nonce = null, bool isTTS = false) diff --git a/src/Discord.Net/DiscordClient.Bans.cs b/src/Discord.Net/DiscordClient.Bans.cs index e910d4bf6..6272f9d0b 100644 --- a/src/Discord.Net/DiscordClient.Bans.cs +++ b/src/Discord.Net/DiscordClient.Bans.cs @@ -38,7 +38,7 @@ namespace Discord if (user.Server == null) throw new ArgumentException("Unable to ban a user in a private chat."); CheckReady(); - return _api.Ban(user.Server.Id, user.Id); + return _api.BanUser(user.Server.Id, user.Id); } /// Unbans a user from the provided server. @@ -48,7 +48,7 @@ namespace Discord if (userId == null) throw new ArgumentNullException(nameof(userId)); CheckReady(); - try { await _api.Unban(server.Id, userId).ConfigureAwait(false); } + try { await _api.UnbanUser(server.Id, userId).ConfigureAwait(false); } catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { } } } diff --git a/src/Discord.Net/DiscordClient.Users.cs b/src/Discord.Net/DiscordClient.Users.cs index dba8f06a4..b236c2220 100644 --- a/src/Discord.Net/DiscordClient.Users.cs +++ b/src/Discord.Net/DiscordClient.Users.cs @@ -173,6 +173,15 @@ namespace Discord return _api.EditUser(user.Server?.Id, user.Id, mute: mute, deaf: deaf, roles: roles.Select(x => x.Id)); } + public Task PruneUsers(string serverId, int days, bool simulate = false) + { + if (serverId == null) throw new ArgumentNullException(nameof(serverId)); + if (days <= 0) throw new ArgumentOutOfRangeException(nameof(days)); + CheckReady(); + + return _api.PruneUsers(serverId, days, simulate); + } + public Task EditProfile(string currentPassword = "", string username = null, string email = null, string password = null, ImageType avatarType = ImageType.Png, byte[] avatar = null)