fix(Guild): fetch member if already in the guild (#4967)

This commit is contained in:
SpaceEEC
2020-11-21 17:16:22 +01:00
committed by GitHub
parent 2b2994badc
commit 643f96c79b

View File

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