diff --git a/src/client/Client.js b/src/client/Client.js
index 11cd5f403..1b6beab17 100644
--- a/src/client/Client.js
+++ b/src/client/Client.js
@@ -270,11 +270,12 @@ class Client extends EventEmitter {
* Caches a user, or obtains it from the cache if it's already cached.
* This is only available when using a bot account.
* @param {string} id The ID of the user to obtain
+ * @param {boolean} [cache=true] Insert the user into the users cache
* @returns {Promise}
*/
- fetchUser(id) {
+ fetchUser(id, cache = true) {
if (this.users.has(id)) return Promise.resolve(this.users.get(id));
- return this.rest.methods.getUser(id);
+ return this.rest.methods.getUser(id, cache);
}
/**
diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js
index 414959582..de8198b3c 100644
--- a/src/client/rest/RESTMethods.js
+++ b/src/client/rest/RESTMethods.js
@@ -258,10 +258,14 @@ class RESTMethods {
);
}
- getUser(userID) {
- return this.rest.makeRequest('get', Constants.Endpoints.user(userID), true).then(data =>
- this.client.actions.UserGet.handle(data).user
- );
+ getUser(userID, cache) {
+ return this.rest.makeRequest('get', Constants.Endpoints.user(userID), true).then(data => {
+ if (cache) {
+ return this.client.actions.UserGet.handle(data).user;
+ } else {
+ return new User(this.client, data);
+ }
+ });
}
updateCurrentUser(_data, password) {
@@ -351,10 +355,14 @@ class RESTMethods {
return this.rest.makeRequest('get', Constants.Endpoints.channelMessage(channel.id, messageID), true);
}
- getGuildMember(guild, user) {
- return this.rest.makeRequest('get', Constants.Endpoints.guildMember(guild.id, user.id), true).then(data =>
- this.client.actions.GuildMemberGet.handle(guild, data).member
- );
+ getGuildMember(guild, user, cache) {
+ return this.rest.makeRequest('get', Constants.Endpoints.guildMember(guild.id, user.id), true).then(data => {
+ if (cache) {
+ return this.client.actions.GuildMemberGet.handle(guild, data).member;
+ } else {
+ return new GuildMember(guild, data);
+ }
+ });
}
updateGuildMember(member, data) {
diff --git a/src/structures/Guild.js b/src/structures/Guild.js
index c9de61847..26ec4273c 100644
--- a/src/structures/Guild.js
+++ b/src/structures/Guild.js
@@ -325,14 +325,15 @@ class Guild {
/**
* Fetch a single guild member from a user.
* @param {UserResolvable} user The user to fetch the member for
+ * @param {boolean} [cache=true] Insert the user into the users cache
* @returns {Promise}
*/
- fetchMember(user) {
+ fetchMember(user, cache = true) {
if (this._fetchWaiter) return Promise.reject(new Error('Already fetching guild members.'));
user = this.client.resolver.resolveUser(user);
if (!user) return Promise.reject(new Error('User is not cached. Use Client.fetchUser first.'));
if (this.members.has(user.id)) return Promise.resolve(this.members.get(user.id));
- return this.client.rest.methods.getGuildMember(this, user);
+ return this.client.rest.methods.getGuildMember(this, user, cache);
}
/**