mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-14 02:23:31 +01:00
feat(GuildMember): add flags (#9098)
* feat: guildMember flags * Apply suggestions from code review Co-authored-by: Almeida <almeidx@pm.me> * Update GuildMember.js --------- Co-authored-by: Almeida <almeidx@pm.me>
This commit is contained in:
@@ -18,6 +18,7 @@ exports.Constants = require('./util/Constants');
|
||||
exports.DataResolver = require('./util/DataResolver');
|
||||
exports.DiscordAPIError = require('./rest/DiscordAPIError');
|
||||
exports.Formatters = require('./util/Formatters');
|
||||
exports.GuildMemberFlags = require('./util/GuildMemberFlags');
|
||||
exports.HTTPError = require('./rest/HTTPError');
|
||||
exports.Intents = require('./util/Intents');
|
||||
exports.LimitedCollection = require('./util/LimitedCollection');
|
||||
|
||||
@@ -10,6 +10,7 @@ const { GuildMember } = require('../structures/GuildMember');
|
||||
const { Role } = require('../structures/Role');
|
||||
const { Events, Opcodes } = require('../util/Constants');
|
||||
const { PartialTypes } = require('../util/Constants');
|
||||
const GuildMemberFlags = require('../util/GuildMemberFlags');
|
||||
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
||||
|
||||
/**
|
||||
@@ -260,6 +261,7 @@ class GuildMemberManager extends CachedManager {
|
||||
* (if they are connected to voice), or `null` if you want to disconnect them from voice
|
||||
* @property {DateResolvable|null} [communicationDisabledUntil] The date or timestamp
|
||||
* for the member's communication to be disabled until. Provide `null` to enable communication again.
|
||||
* @property {GuildMemberFlagsResolvable} [flags] The flags to set for the member
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -292,6 +294,8 @@ class GuildMemberManager extends CachedManager {
|
||||
_data.communication_disabled_until =
|
||||
_data.communicationDisabledUntil && new Date(_data.communicationDisabledUntil).toISOString();
|
||||
|
||||
_data.flags = _data.flags && GuildMemberFlags.resolve(_data.flags);
|
||||
|
||||
let endpoint = this.client.api.guilds(this.guild.id);
|
||||
if (id === this.client.user.id) {
|
||||
const keys = Object.keys(data);
|
||||
|
||||
@@ -6,6 +6,7 @@ const VoiceState = require('./VoiceState');
|
||||
const TextBasedChannel = require('./interfaces/TextBasedChannel');
|
||||
const { Error } = require('../errors');
|
||||
const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
|
||||
const GuildMemberFlags = require('../util/GuildMemberFlags');
|
||||
const Permissions = require('../util/Permissions');
|
||||
|
||||
/**
|
||||
@@ -95,6 +96,15 @@ class GuildMember extends Base {
|
||||
this.communicationDisabledUntilTimestamp =
|
||||
data.communication_disabled_until && Date.parse(data.communication_disabled_until);
|
||||
}
|
||||
if ('flags' in data) {
|
||||
/**
|
||||
* The flags of this member
|
||||
* @type {Readonly<GuildMemberFlags>}
|
||||
*/
|
||||
this.flags = new GuildMemberFlags(data.flags).freeze();
|
||||
} else {
|
||||
this.flags ??= new GuildMemberFlags().freeze();
|
||||
}
|
||||
}
|
||||
|
||||
_clone() {
|
||||
@@ -347,6 +357,16 @@ class GuildMember extends Base {
|
||||
return this.edit({ nick }, reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the flags for this member.
|
||||
* @param {GuildMemberFlagsResolvable} flags The flags to set
|
||||
* @param {string} [reason] Reason for setting the flags
|
||||
* @returns {Promise<GuildMember>}
|
||||
*/
|
||||
setFlags(flags, reason) {
|
||||
return this.edit({ flags, reason });
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a DM channel between the client and this member.
|
||||
* @param {boolean} [force=false] Whether to skip the cache check and request the API
|
||||
@@ -446,6 +466,7 @@ class GuildMember extends Base {
|
||||
this.avatar === member.avatar &&
|
||||
this.pending === member.pending &&
|
||||
this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
|
||||
this.flags.equals(member.flags) &&
|
||||
(this._roles === member._roles ||
|
||||
(this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
|
||||
);
|
||||
|
||||
43
src/util/GuildMemberFlags.js
Normal file
43
src/util/GuildMemberFlags.js
Normal file
@@ -0,0 +1,43 @@
|
||||
'use strict';
|
||||
|
||||
const BitField = require('./BitField');
|
||||
|
||||
/**
|
||||
* Data structure that makes it easy to interact with an {@link GuildMember#flags} bitfield.
|
||||
* @extends {BitField}
|
||||
*/
|
||||
class GuildMemberFlags extends BitField {}
|
||||
|
||||
/**
|
||||
* @name GuildMemberFlags
|
||||
* @kind constructor
|
||||
* @memberof GuildMemberFlags
|
||||
* @param {BitFieldResolvable} [bits=0] Bit(s) to read from
|
||||
*/
|
||||
|
||||
/**
|
||||
* Numeric guild member flags. All available properties:
|
||||
* * `DID_REJOIN`
|
||||
* * `COMPLETED_ONBOARDING`
|
||||
* * `BYPASSES_VERIFICATION`
|
||||
* * `STARTED_ONBOARDING`
|
||||
* @type {Object}
|
||||
* @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object-guild-member-flags}
|
||||
*/
|
||||
GuildMemberFlags.FLAGS = {
|
||||
DID_REJOIN: 1 << 0,
|
||||
COMPLETED_ONBOARDING: 1 << 1,
|
||||
BYPASSES_VERIFICATION: 1 << 2,
|
||||
STARTED_ONBOARDING: 1 << 3,
|
||||
};
|
||||
|
||||
/**
|
||||
* Data that can be resolved to give a guild member flag bitfield. This can be:
|
||||
* * A string (see {@link GuildMemberFlags.FLAGS})
|
||||
* * A guild member flag
|
||||
* * An instance of GuildMemberFlags
|
||||
* * An Array of GuildMemberFlagsResolvable
|
||||
* @typedef {string|number|GuildMemberFlags|GuildMemberFlagsResolvable[]} GuildMemberFlagsResolvable
|
||||
*/
|
||||
|
||||
module.exports = GuildMemberFlags;
|
||||
Reference in New Issue
Block a user