Skip to content

Commit 3b18e5b

Browse files
N1ckProjaw0r3k
andauthored
feat(Role): add flags (#9694)
* feat(Role): add `flags` * types: use RoleFlags enum * Update packages/discord.js/typings/index.d.ts Co-authored-by: Jaw0r3k <jaworekwiadomosci@gmail.com> --------- Co-authored-by: Jaw0r3k <jaworekwiadomosci@gmail.com>
1 parent 692f0fc commit 3b18e5b

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

packages/discord.js/src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ exports.MessageFlagsBitField = require('./util/MessageFlagsBitField');
3636
exports.Options = require('./util/Options');
3737
exports.Partials = require('./util/Partials');
3838
exports.PermissionsBitField = require('./util/PermissionsBitField');
39+
exports.RoleFlagsBitField = require('./util/RoleFlagsBitField');
3940
exports.ShardEvents = require('./util/ShardEvents');
4041
exports.Status = require('./util/Status');
4142
exports.SnowflakeUtil = require('@sapphire/snowflake').DiscordSnowflake;

packages/discord.js/src/structures/Role.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { PermissionFlagsBits } = require('discord-api-types/v10');
55
const Base = require('./Base');
66
const { DiscordjsError, ErrorCodes } = require('../errors');
77
const PermissionsBitField = require('../util/PermissionsBitField');
8+
const RoleFlagsBitField = require('../util/RoleFlagsBitField');
89

910
/**
1011
* Represents a role on Discord.
@@ -101,6 +102,16 @@ class Role extends Base {
101102

102103
if ('unicode_emoji' in data) this.unicodeEmoji = data.unicode_emoji;
103104

105+
if ('flags' in data) {
106+
/**
107+
* The flags of this role
108+
* @type {Readonly<RoleFlagsBitField>}
109+
*/
110+
this.flags = new RoleFlagsBitField(data.flags).freeze();
111+
} else {
112+
this.flags ??= new RoleFlagsBitField().freeze();
113+
}
114+
104115
/**
105116
* The tags this role has
106117
* @type {?Object}

packages/discord.js/src/util/APITypes.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,11 @@
410410
* @see {@link https://discord-api-types.dev/api/discord-api-types-payloads/common#PermissionFlagsBits}
411411
*/
412412

413+
/**
414+
* @external RoleFlags
415+
* @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/RoleFlags}
416+
*/
417+
413418
/**
414419
* @external RESTGetAPIGuildThreadsResult
415420
* @see {@link https://discord-api-types.dev/api/discord-api-types-v10#RESTGetAPIGuildThreadsResult}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'use strict';
2+
3+
const { RoleFlags } = require('discord-api-types/v10');
4+
const BitField = require('./BitField');
5+
6+
/**
7+
* Data structure that makes it easy to interact with a {@link Role#flags} bitfield.
8+
* @extends {BitField}
9+
*/
10+
class RoleFlagsBitField extends BitField {
11+
/**
12+
* Numeric role flags.
13+
* @type {RoleFlags}
14+
* @memberof RoleFlagsBitField
15+
*/
16+
static Flags = RoleFlags;
17+
}
18+
19+
/**
20+
* @name RoleFlagsBitField
21+
* @kind constructor
22+
* @memberof RoleFlagsBitField
23+
* @param {BitFieldResolvable} [bits=0] Bit(s) to read from
24+
*/
25+
26+
module.exports = RoleFlagsBitField;

packages/discord.js/typings/index.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ import {
167167
APIGuildOnboardingPromptOption,
168168
GuildOnboardingPromptType,
169169
AttachmentFlags,
170+
RoleFlags,
170171
} from 'discord-api-types/v10';
171172
import { ChildProcess } from 'node:child_process';
172173
import { EventEmitter } from 'node:events';
@@ -2524,6 +2525,7 @@ export class Role extends Base {
25242525
public get createdAt(): Date;
25252526
public get createdTimestamp(): number;
25262527
public get editable(): boolean;
2528+
public flags: RoleFlagsBitField;
25272529
public guild: Guild;
25282530
public get hexColor(): HexColorString;
25292531
public hoist: boolean;
@@ -2559,6 +2561,13 @@ export class Role extends Base {
25592561
public toString(): RoleMention;
25602562
}
25612563

2564+
export type RoleFlagsString = keyof typeof RoleFlags;
2565+
2566+
export class RoleFlagsBitField extends BitField<RoleFlagsString> {
2567+
public static Flags: typeof RoleFlags;
2568+
public static resolve(bit?: BitFieldResolvable<RoleFlagsString, number>): number;
2569+
}
2570+
25622571
export class StringSelectMenuInteraction<
25632572
Cached extends CacheType = CacheType,
25642573
> extends MessageComponentInteraction<Cached> {

0 commit comments

Comments
 (0)