Skip to content

Commit

Permalink
fix(Resolvables): valid resolvables throw error when uncached (#5495)
Browse files Browse the repository at this point in the history
Co-authored-by: Sugden <[email protected]>
  • Loading branch information
iShibi and NotSugden authored Apr 14, 2021
1 parent b380f16 commit fa5a37e
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 20 deletions.
6 changes: 3 additions & 3 deletions src/managers/GuildEmojiManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ class GuildEmojiManager extends BaseGuildEmojiManager {
if (roles) {
data.roles = [];
for (let role of roles instanceof Collection ? roles.values() : roles) {
role = this.guild.roles.resolve(role);
if (!role) {
const roleID = this.guild.roles.resolveID(role);
if (!roleID) {
return Promise.reject(
new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true),
);
}
data.roles.push(role.id);
data.roles.push(roleID);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/managers/GuildEmojiRoleManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class GuildEmojiRoleManager {
add(roleOrRoles) {
if (roleOrRoles instanceof Collection) return this.add(roleOrRoles.keyArray());
if (!Array.isArray(roleOrRoles)) return this.add([roleOrRoles]);
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolve(r));
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolveID(r));

if (roleOrRoles.includes(null)) {
return Promise.reject(new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true));
Expand Down
20 changes: 10 additions & 10 deletions src/managers/GuildMemberRoleManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,23 +100,23 @@ class GuildMemberRoleManager {
*/
async add(roleOrRoles, reason) {
if (roleOrRoles instanceof Collection || Array.isArray(roleOrRoles)) {
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolve(r));
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolveID(r));
if (roleOrRoles.includes(null)) {
throw new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true);
}

const newRoles = [...new Set(roleOrRoles.concat(...this._roles.values()))];
return this.set(newRoles, reason);
} else {
roleOrRoles = this.guild.roles.resolve(roleOrRoles);
if (roleOrRoles === null) {
const roleID = this.guild.roles.resolveID(roleOrRoles);
if (roleID === null) {
throw new TypeError('INVALID_TYPE', 'roles', 'Role, Snowflake or Array or Collection of Roles or Snowflakes');
}

await this.client.api.guilds[this.guild.id].members[this.member.id].roles[roleOrRoles.id].put({ reason });
await this.client.api.guilds[this.guild.id].members[this.member.id].roles[roleID].put({ reason });

const clone = this.member._clone();
clone._roles = [...this._roles.keys(), roleOrRoles.id];
clone._roles = [...this._roles.keys(), roleID];
return clone;
}
}
Expand All @@ -129,23 +129,23 @@ class GuildMemberRoleManager {
*/
async remove(roleOrRoles, reason) {
if (roleOrRoles instanceof Collection || Array.isArray(roleOrRoles)) {
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolve(r));
roleOrRoles = roleOrRoles.map(r => this.guild.roles.resolveID(r));
if (roleOrRoles.includes(null)) {
throw new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true);
}

const newRoles = this._roles.filter(role => !roleOrRoles.includes(role));
return this.set(newRoles, reason);
} else {
roleOrRoles = this.guild.roles.resolve(roleOrRoles);
if (roleOrRoles === null) {
const roleID = this.guild.roles.resolveID(roleOrRoles);
if (roleID === null) {
throw new TypeError('INVALID_TYPE', 'roles', 'Array or Collection of Roles or Snowflakes', true);
}

await this.client.api.guilds[this.guild.id].members[this.member.id].roles[roleOrRoles.id].delete({ reason });
await this.client.api.guilds[this.guild.id].members[this.member.id].roles[roleID].delete({ reason });

const clone = this.member._clone();
const newRoles = this._roles.filter(role => role.id !== roleOrRoles.id);
const newRoles = this._roles.filter(role => role.id !== roleID);
clone._roles = [...newRoles.keys()];
return clone;
}
Expand Down
6 changes: 3 additions & 3 deletions src/structures/Guild.js
Original file line number Diff line number Diff line change
Expand Up @@ -911,11 +911,11 @@ class Guild extends Base {
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) {
let roleID = this.roles.resolveID(role);
if (!roleID) {
throw new TypeError('INVALID_TYPE', 'options.roles', 'Array or Collection of Roles or Snowflakes', true);
}
roles.push(role.id);
roles.push(roleID);
}
options.roles = roles;
}
Expand Down
7 changes: 4 additions & 3 deletions src/structures/GuildMember.js
Original file line number Diff line number Diff line change
Expand Up @@ -285,11 +285,12 @@ class GuildMember extends Base {
*/
async edit(data, reason) {
if (data.channel) {
data.channel = this.guild.channels.resolve(data.channel);
if (!data.channel || data.channel.type !== 'voice') {
const voiceChannelID = this.guild.channels.resolveID(data.channel);
const voiceChannel = this.guild.channels.cache.get(voiceChannelID);
if (!voiceChannelID || (voiceChannel && voiceChannel?.type !== 'voice')) {
throw new Error('GUILD_VOICE_CHANNEL_RESOLVE');
}
data.channel_id = data.channel.id;
data.channel_id = voiceChannelID;
data.channel = undefined;
} else if (data.channel === null) {
data.channel_id = null;
Expand Down

0 comments on commit fa5a37e

Please sign in to comment.