diff --git a/src/structures/Guild.js b/src/structures/Guild.js index dda3a7c67..46dc76a07 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -18,6 +18,7 @@ const RoleManager = require('../managers/RoleManager'); const VoiceStateManager = require('../managers/VoiceStateManager'); const Collection = require('../util/Collection'); const { + browser, ChannelTypes, DefaultMessageNotifications, PartialTypes, @@ -993,29 +994,25 @@ class Guild extends Base { * @param {boolean} [options.deaf] Whether the member should be deafened (requires `DEAFEN_MEMBERS`) * @returns {Promise} */ - addMember(user, options) { + async addMember(user, options) { user = this.client.users.resolveID(user); - if (!user) return Promise.reject(new TypeError('INVALID_TYPE', 'user', 'UserResolvable')); - if (this.members.cache.has(user)) return Promise.resolve(this.members.cache.get(user)); + if (!user) throw new TypeError('INVALID_TYPE', 'user', 'UserResolvable'); + if (this.members.cache.has(user)) return this.members.cache.get(user); options.access_token = options.accessToken; if (options.roles) { const roles = []; for (let role of options.roles instanceof Collection ? options.roles.values() : options.roles) { role = this.roles.resolve(role); if (!role) { - return Promise.reject( - new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true), - ); + throw new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true); } roles.push(role.id); } options.roles = roles; } - return this.client.api - .guilds(this.id) - .members(user) - .put({ data: options }) - .then(data => this.members.add(data)); + const data = await this.client.api.guilds(this.id).members(user).put({ data: options }); + // Data is an empty buffer if the member is already part of the guild. + return data instanceof (browser ? ArrayBuffer : Buffer) ? this.members.fetch(user) : this.members.add(data); } /**