From 79d999e4c10e36330ee897065987ad99d558edca Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:21:11 +0400 Subject: [PATCH] feat: Guest invites (#11079) feat(Invite): add `flags` --- packages/discord.js/src/index.js | 1 + packages/discord.js/src/structures/Invite.js | 12 ++++++++ packages/discord.js/src/util/APITypes.js | 5 ++++ .../src/util/InviteFlagsBitField.js | 28 +++++++++++++++++++ packages/discord.js/typings/index.d.ts | 9 ++++++ 5 files changed, 55 insertions(+) create mode 100644 packages/discord.js/src/util/InviteFlagsBitField.js diff --git a/packages/discord.js/src/index.js b/packages/discord.js/src/index.js index cd86cfd0e..cb2f7d722 100644 --- a/packages/discord.js/src/index.js +++ b/packages/discord.js/src/index.js @@ -33,6 +33,7 @@ exports.Events = require('./util/Events'); exports.Formatters = require('./util/Formatters'); exports.GuildMemberFlagsBitField = require('./util/GuildMemberFlagsBitField').GuildMemberFlagsBitField; exports.IntentsBitField = require('./util/IntentsBitField'); +exports.InviteFlagsBitField = require('./util/InviteFlagsBitField.js').InviteFlagsBitField; exports.LimitedCollection = require('./util/LimitedCollection'); exports.MessageFlagsBitField = require('./util/MessageFlagsBitField'); exports.Options = require('./util/Options'); diff --git a/packages/discord.js/src/structures/Invite.js b/packages/discord.js/src/structures/Invite.js index 8d9b833dc..954f047b1 100644 --- a/packages/discord.js/src/structures/Invite.js +++ b/packages/discord.js/src/structures/Invite.js @@ -6,6 +6,7 @@ const { GuildScheduledEvent } = require('./GuildScheduledEvent'); const IntegrationApplication = require('./IntegrationApplication'); const InviteStageInstance = require('./InviteStageInstance'); const { DiscordjsError, ErrorCodes } = require('../errors'); +const { InviteFlagsBitField } = require('../util/InviteFlagsBitField.js'); /** * Represents an invitation to a guild channel. @@ -222,6 +223,17 @@ class Invite extends Base { } else { this.guildScheduledEvent ??= null; } + + if ('flags' in data) { + /** + * The flags of this invite. + * + * @type {Readonly} + */ + this.flags = new InviteFlagsBitField(data.flags).freeze(); + } else { + this.flags ??= new InviteFlagsBitField().freeze(); + } } /** diff --git a/packages/discord.js/src/util/APITypes.js b/packages/discord.js/src/util/APITypes.js index 70520cebc..8ad10cc1f 100644 --- a/packages/discord.js/src/util/APITypes.js +++ b/packages/discord.js/src/util/APITypes.js @@ -515,6 +515,11 @@ * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InteractionResponseType} */ +/** + * @external InviteFlags + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InviteFlags} + */ + /** * @external InviteType * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/InviteType} diff --git a/packages/discord.js/src/util/InviteFlagsBitField.js b/packages/discord.js/src/util/InviteFlagsBitField.js new file mode 100644 index 000000000..87f4e7e74 --- /dev/null +++ b/packages/discord.js/src/util/InviteFlagsBitField.js @@ -0,0 +1,28 @@ +'use strict'; + +const { InviteFlags } = require('discord-api-types/v10'); +const { BitField } = require('./BitField.js'); + +/** + * Data structure that makes it easy to interact with a {@link GuildInvite#flags} bit field. + * + * @extends {BitField} + */ +class InviteFlagsBitField extends BitField { + /** + * Numeric invite flags. + * + * @type {InviteFlags} + * @memberof InviteFlagsBitField + */ + static Flags = InviteFlags; +} + +/** + * @name InviteFlagsBitField + * @kind constructor + * @memberof InviteFlagsBitField + * @param {BitFieldResolvable} [bits=0] Bit(s) to read from + */ + +exports.InviteFlagsBitField = InviteFlagsBitField; diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 966eb291e..5f933203a 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -215,6 +215,7 @@ import { APIFileComponent, APIMessageTopLevelComponent, EntryPointCommandHandlerType, + InviteFlags, } from 'discord-api-types/v10'; import { ChildProcess } from 'node:child_process'; import { EventEmitter } from 'node:events'; @@ -2274,6 +2275,7 @@ export class Invite extends Base { /** @deprecated Public Stage Instances don't exist anymore */ public stageInstance: InviteStageInstance | null; public guildScheduledEvent: GuildScheduledEvent | null; + public flags: Readonly; } /** @deprecated Public Stage Instances don't exist anymore */ @@ -2294,6 +2296,13 @@ export class InviteGuild extends AnonymousGuild { public welcomeScreen: WelcomeScreen | null; } +export type InviteFlagsString = keyof typeof InviteFlags; + +export class InviteFlagsBitField extends BitField { + public static Flags: typeof InviteFlags; + public static resolve(bit?: BitFieldResolvable): number; +} + export class LimitedCollection extends Collection { public constructor(options?: LimitedCollectionOptions, iterable?: Iterable); public maxSize: number;