mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-13 10:03:31 +01:00
Permissions improvements (#2126)
* add Permissions.toArray() * accept Permissions objects to Permissions.missing() * accept Permissions as parameter to Permissions.has() * style fixes * remove redundant line, update JSDoc for Permission.resolve() * JSDoc, style, and checkAdmin fixes * add Permissions.resolveToObject() * accept PermissionResolvable to Permissions.missing() * remove `resolveToObject`, fix constructor JSDoc * remove redundant parameter type * fix `Permissions.missing()` * fix checkAdmin * update Permissions.toArray() description * eliminate ambiguity in Permissions.toArray() description * add backticks to permission example * remove irrelevant type in Permission ctor description * use this.constructor to properly support OOP * use simplified approach for Permissions.toArray() * fix return type on Permissions.toArray() * move `Permissions#toArray` to more suitable position * bitwise approach to `Permissions#missing` * allow `Permissions` to be iterated over * don't checkAdmin on return array * remove unnecessary conditional * fix JSDoc indentation * use simpler & more reliable approach for missing() * update PermissionResolvable typedef
This commit is contained in:
committed by
Isabella
parent
1db0906483
commit
d5b0cf9ffb
@@ -7,19 +7,19 @@ const { RangeError } = require('../errors');
|
|||||||
*/
|
*/
|
||||||
class Permissions {
|
class Permissions {
|
||||||
/**
|
/**
|
||||||
* @param {number|PermissionResolvable[]} permissions Permissions or bitfield to read from
|
* @param {PermissionResolvable} permissions Permission(s) to read from
|
||||||
*/
|
*/
|
||||||
constructor(permissions) {
|
constructor(permissions) {
|
||||||
/**
|
/**
|
||||||
* Bitfield of the packed permissions
|
* Bitfield of the packed permissions
|
||||||
* @type {number}
|
* @type {number}
|
||||||
*/
|
*/
|
||||||
this.bitfield = typeof permissions === 'number' ? permissions : this.constructor.resolve(permissions);
|
this.bitfield = this.constructor.resolve(permissions);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the bitfield has a permission, or multiple permissions.
|
* Checks whether the bitfield has a permission, or multiple permissions.
|
||||||
* @param {PermissionResolvable|PermissionResolvable[]} permission Permission(s) to check for
|
* @param {PermissionResolvable} permission Permission(s) to check for
|
||||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
@@ -32,11 +32,12 @@ class Permissions {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets all given permissions that are missing from the bitfield.
|
* Gets all given permissions that are missing from the bitfield.
|
||||||
* @param {PermissionResolvable[]} permissions Permissions to check for
|
* @param {PermissionResolvable} permissions Permission(s) to check for
|
||||||
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||||
* @returns {PermissionResolvable[]}
|
* @returns {string[]}
|
||||||
*/
|
*/
|
||||||
missing(permissions, checkAdmin = true) {
|
missing(permissions, checkAdmin = true) {
|
||||||
|
if (!(permissions instanceof Array)) permissions = new this.constructor(permissions).toArray(false);
|
||||||
return permissions.filter(p => !this.has(p, checkAdmin));
|
return permissions.filter(p => !this.has(p, checkAdmin));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,17 +93,32 @@ class Permissions {
|
|||||||
return serialized;
|
return serialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an {@link Array} of permission names (such as `VIEW_CHANNEL`) based on the permissions available.
|
||||||
|
* @param {boolean} [checkAdmin=true] Whether to allow the administrator permission to override
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
toArray(checkAdmin = true) {
|
||||||
|
return Object.keys(this.constructor.FLAGS).filter(perm => this.has(perm, checkAdmin));
|
||||||
|
}
|
||||||
|
|
||||||
|
*[Symbol.iterator]() {
|
||||||
|
const keys = this.toArray();
|
||||||
|
while (keys.length) yield keys.shift();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data that can be resolved to give a permission number. This can be:
|
* Data that can be resolved to give a permission number. This can be:
|
||||||
* * A string (see {@link Permissions.FLAGS})
|
* * A string (see {@link Permissions.FLAGS})
|
||||||
* * A permission number
|
* * A permission number
|
||||||
* * An instance of Permissions
|
* * An instance of Permissions
|
||||||
* @typedef {string|number|Permissions} PermissionResolvable
|
* * An Array of PermissionResolvable
|
||||||
|
* @typedef {string|number|Permissions|PermissionResolvable[]} PermissionResolvable
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves permissions to their numeric form.
|
* Resolves permissions to their numeric form.
|
||||||
* @param {PermissionResolvable|PermissionResolvable[]} permission - Permission(s) to resolve
|
* @param {PermissionResolvable} permission - Permission(s) to resolve
|
||||||
* @returns {number}
|
* @returns {number}
|
||||||
*/
|
*/
|
||||||
static resolve(permission) {
|
static resolve(permission) {
|
||||||
|
|||||||
Reference in New Issue
Block a user