Skip to content

Commit 43a995b

Browse files
authored
refactor!: Invite classes (#10888)
BREAKING CHANGE: Invites are now split up into classes based on their type.
1 parent aee6d31 commit 43a995b

File tree

15 files changed

+594
-425
lines changed

15 files changed

+594
-425
lines changed

packages/discord.js/src/client/Client.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const { ShardClientUtil } = require('../sharding/ShardClientUtil.js');
1414
const { ClientPresence } = require('../structures/ClientPresence.js');
1515
const { GuildPreview } = require('../structures/GuildPreview.js');
1616
const { GuildTemplate } = require('../structures/GuildTemplate.js');
17-
const { Invite } = require('../structures/Invite.js');
1817
const { SoundboardSound } = require('../structures/SoundboardSound.js');
1918
const { Sticker } = require('../structures/Sticker.js');
2019
const { StickerPack } = require('../structures/StickerPack.js');
@@ -24,6 +23,7 @@ const { Widget } = require('../structures/Widget.js');
2423
const { resolveInviteCode, resolveGuildTemplateCode } = require('../util/DataResolver.js');
2524
const { Events } = require('../util/Events.js');
2625
const { IntentsBitField } = require('../util/IntentsBitField.js');
26+
const { createInvite } = require('../util/Invites.js');
2727
const { Options } = require('../util/Options.js');
2828
const { PermissionsBitField } = require('../util/PermissionsBitField.js');
2929
const { Status } = require('../util/Status.js');
@@ -459,6 +459,7 @@ class Client extends BaseClient {
459459
* Options used when fetching an invite from Discord.
460460
*
461461
* @typedef {Object} ClientFetchInviteOptions
462+
* @property {boolean} [withCounts] Whether to include approximate member counts
462463
* @property {Snowflake} [guildScheduledEventId] The id of the guild scheduled event to include with
463464
* the invite
464465
*/
@@ -474,14 +475,16 @@ class Client extends BaseClient {
474475
* .then(invite => console.log(`Obtained invite with code: ${invite.code}`))
475476
* .catch(console.error);
476477
*/
477-
async fetchInvite(invite, options) {
478+
async fetchInvite(invite, { withCounts, guildScheduledEventId } = {}) {
478479
const code = resolveInviteCode(invite);
480+
479481
const query = makeURLSearchParams({
480-
with_counts: true,
481-
guild_scheduled_event_id: options?.guildScheduledEventId,
482+
with_counts: withCounts,
483+
guild_scheduled_event_id: guildScheduledEventId,
482484
});
485+
483486
const data = await this.rest.get(Routes.invite(code), { query });
484-
return new Invite(this, data);
487+
return createInvite(this, data);
485488
}
486489

487490
/**

packages/discord.js/src/client/websocket/handlers/INVITE_CREATE.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = (client, { d: data }) => {
1515
* <info>This event requires the {@link PermissionFlagsBits.ManageChannels} permission for the channel.</info>
1616
*
1717
* @event Client#inviteCreate
18-
* @param {Invite} invite The invite that was created
18+
* @param {GuildInvite} invite The invite that was created
1919
*/
2020
client.emit(Events.InviteCreate, invite);
2121
};
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const { Invite } = require('../../../structures/Invite.js');
3+
const { GuildInvite } = require('../../../structures/GuildInvite.js');
44
const { Events } = require('../../../util/Events.js');
55

66
module.exports = (client, { d: data }) => {
@@ -9,7 +9,7 @@ module.exports = (client, { d: data }) => {
99
if (!channel) return;
1010

1111
const inviteData = Object.assign(data, { channel, guild });
12-
const invite = new Invite(client, inviteData);
12+
const invite = new GuildInvite(client, inviteData);
1313

1414
guild.invites.cache.delete(invite.code);
1515

@@ -18,7 +18,7 @@ module.exports = (client, { d: data }) => {
1818
* <info>This event requires the {@link PermissionFlagsBits.ManageChannels} permission for the channel.</info>
1919
*
2020
* @event Client#inviteDelete
21-
* @param {Invite} invite The invite that was deleted
21+
* @param {GuildInvite} invite The invite that was deleted
2222
*/
2323
client.emit(Events.InviteDelete, invite);
2424
};

packages/discord.js/src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ exports.BaseGuildEmoji = require('./structures/BaseGuildEmoji.js').BaseGuildEmoj
124124
exports.BaseGuildTextChannel = require('./structures/BaseGuildTextChannel.js').BaseGuildTextChannel;
125125
exports.BaseGuildVoiceChannel = require('./structures/BaseGuildVoiceChannel.js').BaseGuildVoiceChannel;
126126
exports.BaseInteraction = require('./structures/BaseInteraction.js').BaseInteraction;
127+
exports.BaseInvite = require('./structures/BaseInvite.js').BaseInvite;
127128
exports.BaseSelectMenuComponent = require('./structures/BaseSelectMenuComponent.js').BaseSelectMenuComponent;
128129
exports.ButtonComponent = require('./structures/ButtonComponent.js').ButtonComponent;
129130
exports.ButtonInteraction = require('./structures/ButtonInteraction.js').ButtonInteraction;
@@ -151,12 +152,14 @@ exports.Emoji = require('./structures/Emoji.js').Emoji;
151152
exports.Entitlement = require('./structures/Entitlement.js').Entitlement;
152153
exports.FileComponent = require('./structures/FileComponent.js').FileComponent;
153154
exports.ForumChannel = require('./structures/ForumChannel.js').ForumChannel;
155+
exports.GroupDMInvite = require('./structures/GroupDMInvite.js').GroupDMInvite;
154156
exports.Guild = require('./structures/Guild.js').Guild;
155157
exports.GuildAuditLogs = require('./structures/GuildAuditLogs.js').GuildAuditLogs;
156158
exports.GuildAuditLogsEntry = require('./structures/GuildAuditLogsEntry.js').GuildAuditLogsEntry;
157159
exports.GuildBan = require('./structures/GuildBan.js').GuildBan;
158160
exports.GuildChannel = require('./structures/GuildChannel.js').GuildChannel;
159161
exports.GuildEmoji = require('./structures/GuildEmoji.js').GuildEmoji;
162+
exports.GuildInvite = require('./structures/GuildInvite.js').GuildInvite;
160163
exports.GuildMember = require('./structures/GuildMember.js').GuildMember;
161164
exports.GuildOnboarding = require('./structures/GuildOnboarding.js').GuildOnboarding;
162165
exports.GuildOnboardingPrompt = require('./structures/GuildOnboardingPrompt.js').GuildOnboardingPrompt;
@@ -175,7 +178,6 @@ exports.InteractionCallbackResponse =
175178
require('./structures/InteractionCallbackResponse.js').InteractionCallbackResponse;
176179
exports.InteractionCollector = require('./structures/InteractionCollector.js').InteractionCollector;
177180
exports.InteractionWebhook = require('./structures/InteractionWebhook.js').InteractionWebhook;
178-
exports.Invite = require('./structures/Invite.js').Invite;
179181
exports.InviteGuild = require('./structures/InviteGuild.js').InviteGuild;
180182
exports.MediaChannel = require('./structures/MediaChannel.js').MediaChannel;
181183
exports.MediaGalleryComponent = require('./structures/MediaGalleryComponent.js').MediaGalleryComponent;

packages/discord.js/src/managers/GuildInviteManager.js

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const { Collection } = require('@discordjs/collection');
44
const { Routes } = require('discord-api-types/v10');
55
const { DiscordjsError, ErrorCodes } = require('../errors/index.js');
6-
const { Invite } = require('../structures/Invite.js');
6+
const { GuildInvite } = require('../structures/GuildInvite.js');
77
const { resolveInviteCode } = require('../util/DataResolver.js');
88
const { CachedManager } = require('./CachedManager.js');
99

@@ -14,7 +14,7 @@ const { CachedManager } = require('./CachedManager.js');
1414
*/
1515
class GuildInviteManager extends CachedManager {
1616
constructor(guild, iterable) {
17-
super(guild.client, Invite, iterable);
17+
super(guild.client, GuildInvite, iterable);
1818

1919
/**
2020
* The guild this Manager belongs to
@@ -27,7 +27,7 @@ class GuildInviteManager extends CachedManager {
2727
/**
2828
* The cache of this Manager
2929
*
30-
* @type {Collection<string, Invite>}
30+
* @type {Collection<string, GuildInvite>}
3131
* @name GuildInviteManager#cache
3232
*/
3333

@@ -36,35 +36,44 @@ class GuildInviteManager extends CachedManager {
3636
}
3737

3838
/**
39-
* Data that resolves to give an Invite object. This can be:
39+
* Data that resolves to give a `GuildInvite`. This can be:
40+
*
4041
* - An invite code
4142
* - An invite URL
4243
*
43-
* @typedef {string} InviteResolvable
44+
* @typedef {string} GuildInviteResolvable
4445
*/
4546

4647
/**
47-
* Data that can be resolved to a channel that an invite can be created on. This can be:
48+
* A guild channel where an invite may be created on. This can be:
4849
* - TextChannel
4950
* - VoiceChannel
5051
* - AnnouncementChannel
5152
* - StageChannel
5253
* - ForumChannel
5354
* - MediaChannel
55+
*
56+
* @typedef {TextChannel|VoiceChannel|AnnouncementChannel|StageChannel|ForumChannel|MediaChannel}
57+
* GuildInvitableChannel
58+
*/
59+
60+
/**
61+
* Data that can be resolved to a guild channel where an invite may be created on. This can be:
62+
* - GuildInvitableChannel
5463
* - Snowflake
5564
*
56-
* @typedef {TextChannel|VoiceChannel|AnnouncementChannel|StageChannel|ForumChannel|MediaChannel|Snowflake}
65+
* @typedef {GuildInvitableChannel|Snowflake}
5766
* GuildInvitableChannelResolvable
5867
*/
5968

6069
/**
61-
* Resolves an InviteResolvable to an Invite object.
70+
* Resolves an `GuildInviteResolvable` to a `GuildInvite` object.
6271
*
6372
* @method resolve
6473
* @memberof GuildInviteManager
6574
* @instance
66-
* @param {InviteResolvable} invite The invite resolvable to resolve
67-
* @returns {?Invite}
75+
* @param {GuildInviteResolvable} invite The invite resolvable to resolve
76+
* @returns {?GuildInvite}
6877
*/
6978

7079
/**
@@ -98,8 +107,9 @@ class GuildInviteManager extends CachedManager {
98107
/**
99108
* Fetches invite(s) from Discord.
100109
*
101-
* @param {InviteResolvable|FetchInviteOptions|FetchInvitesOptions} [options] Options for fetching guild invite(s)
102-
* @returns {Promise<Invite|Collection<string, Invite>>}
110+
* @param {GuildInviteResolvable|FetchInviteOptions|FetchInvitesOptions} [options]
111+
* Options for fetching guild invite(s)
112+
* @returns {Promise<GuildInvite|Collection<string, GuildInvite>>}
103113
* @example
104114
* // Fetch all invites from a guild
105115
* guild.invites.fetch()
@@ -183,7 +193,7 @@ class GuildInviteManager extends CachedManager {
183193
*
184194
* @param {GuildInvitableChannelResolvable} channel The options for creating the invite from a channel.
185195
* @param {InviteCreateOptions} [options={}] The options for creating the invite from a channel.
186-
* @returns {Promise<Invite>}
196+
* @returns {Promise<GuildInvite>}
187197
* @example
188198
* // Create an invite to a selected channel
189199
* guild.invites.create('599942732013764608')
@@ -209,7 +219,7 @@ class GuildInviteManager extends CachedManager {
209219
},
210220
reason,
211221
});
212-
return new Invite(this.client, invite);
222+
return new GuildInvite(this.client, invite);
213223
}
214224

215225
/**

packages/discord.js/src/managers/GuildManager.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ const { ShardClientUtil } = require('../sharding/ShardClientUtil.js');
1010
const { Guild } = require('../structures/Guild.js');
1111
const { GuildChannel } = require('../structures/GuildChannel.js');
1212
const { GuildEmoji } = require('../structures/GuildEmoji.js');
13+
const { GuildInvite } = require('../structures/GuildInvite.js');
1314
const { GuildMember } = require('../structures/GuildMember.js');
14-
const { Invite } = require('../structures/Invite.js');
1515
const { OAuth2Guild } = require('../structures/OAuth2Guild.js');
1616
const { Role } = require('../structures/Role.js');
1717
const { resolveImage } = require('../util/DataResolver.js');
@@ -119,7 +119,7 @@ class GuildManager extends CachedManager {
119119
guild instanceof GuildMember ||
120120
guild instanceof GuildEmoji ||
121121
guild instanceof Role ||
122-
(guild instanceof Invite && guild.guild)
122+
(guild instanceof GuildInvite && guild.guild)
123123
) {
124124
return super.resolve(guild.guild);
125125
}
@@ -142,7 +142,7 @@ class GuildManager extends CachedManager {
142142
guild instanceof GuildMember ||
143143
guild instanceof GuildEmoji ||
144144
guild instanceof Role ||
145-
(guild instanceof Invite && guild.guild)
145+
(guild instanceof GuildInvite && guild.guild)
146146
) {
147147
return super.resolveId(guild.guild.id);
148148
}

0 commit comments

Comments
 (0)