mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 08:33:30 +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 {
|
||||
/**
|
||||
* @param {number|PermissionResolvable[]} permissions Permissions or bitfield to read from
|
||||
* @param {PermissionResolvable} permissions Permission(s) to read from
|
||||
*/
|
||||
constructor(permissions) {
|
||||
/**
|
||||
* Bitfield of the packed permissions
|
||||
* @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.
|
||||
* @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
|
||||
* @returns {boolean}
|
||||
*/
|
||||
@@ -32,11 +32,12 @@ class Permissions {
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @returns {PermissionResolvable[]}
|
||||
* @returns {string[]}
|
||||
*/
|
||||
missing(permissions, checkAdmin = true) {
|
||||
if (!(permissions instanceof Array)) permissions = new this.constructor(permissions).toArray(false);
|
||||
return permissions.filter(p => !this.has(p, checkAdmin));
|
||||
}
|
||||
|
||||
@@ -92,17 +93,32 @@ class Permissions {
|
||||
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:
|
||||
* * A string (see {@link Permissions.FLAGS})
|
||||
* * A permission number
|
||||
* * 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.
|
||||
* @param {PermissionResolvable|PermissionResolvable[]} permission - Permission(s) to resolve
|
||||
* @param {PermissionResolvable} permission - Permission(s) to resolve
|
||||
* @returns {number}
|
||||
*/
|
||||
static resolve(permission) {
|
||||
|
||||
Reference in New Issue
Block a user