Skip to content

Commit

Permalink
refactor(RoleManager): Move some methods over from Role (#7096)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jiralite authored Dec 14, 2021
1 parent 49f9a18 commit 1e00fc2
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 8 deletions.
36 changes: 36 additions & 0 deletions src/managers/RoleManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,23 @@ class RoleManager extends CachedManager {
return clone;
}

/**
* Deletes a role.
* @param {RoleResolvable} role The role to delete
* @param {string} [reason] Reason for deleting the role
* @returns {Promise<void>}
* @example
* // Delete a role
* guild.roles.delete('222079219327434752', 'The role needed to go')
* .then(deleted => console.log(`Deleted role ${deleted.name}`))
* .catch(console.error);
*/
async delete(role, reason) {
const id = this.resolveId(role);
await this.client.api.guilds[this.guild.id].roles[id].delete({ reason });
this.client.actions.GuildRoleDelete.handle({ guild_id: this.guild.id, role_id: id });
}

/**
* Batch-updates the guild's role positions
* @param {GuildRolePosition[]} rolePositions Role positions to update
Expand All @@ -244,6 +261,25 @@ class RoleManager extends CachedManager {
}).guild;
}

/**
* Compares the positions of two roles.
* @param {RoleResolvable} role1 First role to compare
* @param {RoleResolvable} role2 Second role to compare
* @returns {number} Negative number if the first role's position is lower (second role's is higher),
* positive number if the first's is higher (second's is lower), 0 if equal
*/
comparePositions(role1, role2) {
const resolvedRole1 = this.resolve(role1);
const resolvedRole2 = this.resolve(role2);
if (!resolvedRole1 || !resolvedRole2) throw new TypeError('INVALID_TYPE', 'role', 'Role nor a Snowflake');

if (resolvedRole1.position === resolvedRole2.position) {
return Number(BigInt(resolvedRole2.id) - BigInt(resolvedRole1.id));
}

return resolvedRole1.position - resolvedRole2.position;
}

/**
* Gets the managed role a user created when joining the guild, if any
* <info>Only ever available for bots</info>
Expand Down
24 changes: 16 additions & 8 deletions src/structures/Role.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
'use strict';

const Base = require('./Base');
const { Error, TypeError } = require('../errors');
const { Error } = require('../errors');
const Permissions = require('../util/Permissions');
const SnowflakeUtil = require('../util/SnowflakeUtil');
const Util = require('../util/Util');

let deprecationEmittedForComparePositions = false;

/**
* @type {WeakSet<Role>}
* @private
Expand Down Expand Up @@ -207,9 +209,7 @@ class Role extends Base {
* positive number if this one is higher (other's is lower), 0 if equal
*/
comparePositionTo(role) {
role = this.guild.roles.resolve(role);
if (!role) throw new TypeError('INVALID_TYPE', 'role', 'Role nor a Snowflake');
return this.constructor.comparePositions(this, role);
return this.guild.roles.comparePositions(this, role);
}

/**
Expand Down Expand Up @@ -407,8 +407,7 @@ class Role extends Base {
* .catch(console.error);
*/
async delete(reason) {
await this.client.api.guilds[this.guild.id].roles[this.id].delete({ reason });
this.client.actions.GuildRoleDelete.handle({ guild_id: this.guild.id, role_id: this.id });
await this.guild.roles.delete(this.id, reason);
return this;
}

Expand Down Expand Up @@ -469,10 +468,19 @@ class Role extends Base {
* @param {Role} role2 Second role to compare
* @returns {number} Negative number if the first role's position is lower (second role's is higher),
* positive number if the first's is higher (second's is lower), 0 if equal
* @deprecated Use {@link RoleManager#comparePositions} instead.
*/
static comparePositions(role1, role2) {
if (role1.position === role2.position) return role2.id - role1.id;
return role1.position - role2.position;
if (!deprecationEmittedForComparePositions) {
process.emitWarning(
'The Role.comparePositions method is deprecated. Use RoleManager#comparePositions instead.',
'DeprecationWarning',
);

deprecationEmittedForComparePositions = true;
}

return role1.guild.roles.comparePositions(role1, role2);
}
}

Expand Down
3 changes: 3 additions & 0 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1895,6 +1895,7 @@ export class Role extends Base {
public toJSON(): unknown;
public toString(): RoleMention;

/** @deprecated Use {@link RoleManager.comparePositions} instead. */
public static comparePositions(role1: Role, role2: Role): number;
}

Expand Down Expand Up @@ -3074,7 +3075,9 @@ export class RoleManager extends CachedManager<Snowflake, Role, RoleResolvable>
public fetch(id?: undefined, options?: BaseFetchOptions): Promise<Collection<Snowflake, Role>>;
public create(options?: CreateRoleOptions): Promise<Role>;
public edit(role: RoleResolvable, options: RoleData, reason?: string): Promise<Role>;
public delete(role: RoleResolvable, reason?: string): Promise<void>;
public setPositions(rolePositions: readonly RolePosition[]): Promise<Guild>;
public comparePositions(role1: RoleResolvable, role2: RoleResolvable): number;
}

export class StageInstanceManager extends CachedManager<Snowflake, StageInstance, StageInstanceResolvable> {
Expand Down

0 comments on commit 1e00fc2

Please sign in to comment.