From 9d694d2b67b1b0539ba96518d0dff17456ea78b3 Mon Sep 17 00:00:00 2001 From: Schuyler Cebulskie Date: Tue, 6 Sep 2016 16:55:42 -0400 Subject: [PATCH] Add ability to ban non-members from guilds (#638) --- src/client/rest/RESTMethods.js | 13 +++++++------ src/structures/Guild.js | 26 ++++++++++++++++++++------ src/structures/GuildMember.js | 2 +- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 5cbf1c6d7..9f8bdf4c6 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -331,14 +331,15 @@ class RESTMethods { }); } - banGuildMember(member, deleteDays) { + banGuildMember(guild, member, deleteDays) { return new Promise((resolve, reject) => { - const data = { + const user = this.rest.client.resolver.resolveUser(member); + if (!user) throw new Error('cannot ban a user that is not a user resolvable'); + this.rest.makeRequest('put', `${Constants.Endpoints.guildBans(guild.id)}/${user.id}`, true, { 'delete-message-days': deleteDays, - }; - this.rest.makeRequest('put', `${Constants.Endpoints.guildBans(member.guild.id)}/${member.id}`, true, data) - .then(() => resolve(member)) - .catch(reject); + }).then(() => { + resolve(member instanceof GuildMember ? member : user); + }).catch(reject); }); } diff --git a/src/structures/Guild.js b/src/structures/Guild.js index 1ba0c26ce..7141983a4 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -146,7 +146,7 @@ class Guild { /** * Returns the GuildMember form of a User object, if the User is present in the guild. * @param {UserResolvable} user The user that you want to obtain the GuildMember of - * @returns {GuildMember|null} + * @returns {?GuildMember} * @example * // get the guild member of a user * const member = guild.member(message.author); @@ -533,17 +533,31 @@ class Guild { } /** - * Unbans a member from the Guild - * @param {UserResolvable} member The member to unban + * Bans a user from the guild. + * @param {UserResolvable} user The user to ban + * @param {number} [deleteDays=0] The amount of days worth of messages from this user that should + * also be deleted. Between `0` and `7`. + * @returns {Promise} + * @example + * // ban a user + * guild.ban('123123123123'); + */ + ban(user, deleteDays = 0) { + return this.client.rest.methods.banGuildMember(this, user, deleteDays); + } + + /** + * Unbans a user from the Guild. + * @param {UserResolvable} user The user to unban * @returns {Promise} * @example - * // unban a member + * // unban a user * guild.unban('123123123123') * .then(user => console.log(`Unbanned ${user.username} from ${guild.name}`)) * .catch(reject); */ - unban(member) { - return this.client.rest.methods.unbanGuildMember(this, member); + unban(user) { + return this.client.rest.methods.unbanGuildMember(this, user); } /** diff --git a/src/structures/GuildMember.js b/src/structures/GuildMember.js index 1eab30831..dad29af91 100644 --- a/src/structures/GuildMember.js +++ b/src/structures/GuildMember.js @@ -271,7 +271,7 @@ class GuildMember { * guildMember.ban(7); */ ban(deleteDays = 0) { - return this.client.rest.methods.banGuildMember(this, deleteDays); + return this.client.rest.methods.banGuildMember(this.guild, this, deleteDays); } sendMessage() {