Skip to content

refactor!: Invite classes #10888

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions packages/discord.js/src/client/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ const { ShardClientUtil } = require('../sharding/ShardClientUtil.js');
const { ClientPresence } = require('../structures/ClientPresence.js');
const { GuildPreview } = require('../structures/GuildPreview.js');
const { GuildTemplate } = require('../structures/GuildTemplate.js');
const { Invite } = require('../structures/Invite.js');
const { SoundboardSound } = require('../structures/SoundboardSound.js');
const { Sticker } = require('../structures/Sticker.js');
const { StickerPack } = require('../structures/StickerPack.js');
Expand All @@ -28,6 +27,7 @@ const { Widget } = require('../structures/Widget.js');
const { resolveInviteCode, resolveGuildTemplateCode } = require('../util/DataResolver.js');
const { Events } = require('../util/Events.js');
const { IntentsBitField } = require('../util/IntentsBitField.js');
const { createInvite } = require('../util/Invites.js');
const { Options } = require('../util/Options.js');
const { PermissionsBitField } = require('../util/PermissionsBitField.js');
const { Status } = require('../util/Status.js');
Expand Down Expand Up @@ -423,6 +423,7 @@ class Client extends BaseClient {
/**
* Options used when fetching an invite from Discord.
* @typedef {Object} ClientFetchInviteOptions
* @property {boolean} [withCounts] Whether to include approximate member counts
* @property {Snowflake} [guildScheduledEventId] The id of the guild scheduled event to include with
* the invite
*/
Expand All @@ -437,14 +438,16 @@ class Client extends BaseClient {
* .then(invite => console.log(`Obtained invite with code: ${invite.code}`))
* .catch(console.error);
*/
async fetchInvite(invite, options) {
async fetchInvite(invite, { withCounts, guildScheduledEventId } = {}) {
const code = resolveInviteCode(invite);

const query = makeURLSearchParams({
with_counts: true,
guild_scheduled_event_id: options?.guildScheduledEventId,
with_counts: withCounts,
guild_scheduled_event_id: guildScheduledEventId,
});

const data = await this.rest.get(Routes.invite(code), { query });
return new Invite(this, data);
return createInvite(this, data);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = (client, { d: data }) => {
* Emitted when an invite is created.
* <info>This event requires the {@link PermissionFlagsBits.ManageChannels} permission for the channel.</info>
* @event Client#inviteCreate
* @param {Invite} invite The invite that was created
* @param {GuildInvite} invite The invite that was created
*/
client.emit(Events.InviteCreate, invite);
};
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const { Invite } = require('../../../structures/Invite.js');
const { GuildInvite } = require('../../../structures/GuildInvite.js');
const { Events } = require('../../../util/Events.js');

module.exports = (client, { d: data }) => {
Expand All @@ -9,15 +9,15 @@ module.exports = (client, { d: data }) => {
if (!channel) return;

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

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

/**
* Emitted when an invite is deleted.
* <info>This event requires the {@link PermissionFlagsBits.ManageChannels} permission for the channel.</info>
* @event Client#inviteDelete
* @param {Invite} invite The invite that was deleted
* @param {GuildInvite} invite The invite that was deleted
*/
client.emit(Events.InviteDelete, invite);
};
4 changes: 3 additions & 1 deletion packages/discord.js/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ exports.BaseGuildEmoji = require('./structures/BaseGuildEmoji.js').BaseGuildEmoj
exports.BaseGuildTextChannel = require('./structures/BaseGuildTextChannel.js').BaseGuildTextChannel;
exports.BaseGuildVoiceChannel = require('./structures/BaseGuildVoiceChannel.js').BaseGuildVoiceChannel;
exports.BaseInteraction = require('./structures/BaseInteraction.js').BaseInteraction;
exports.BaseInvite = require('./structures/BaseInvite.js').BaseInvite;
exports.BaseSelectMenuComponent = require('./structures/BaseSelectMenuComponent.js').BaseSelectMenuComponent;
exports.ButtonComponent = require('./structures/ButtonComponent.js').ButtonComponent;
exports.ButtonInteraction = require('./structures/ButtonInteraction.js').ButtonInteraction;
Expand All @@ -138,12 +139,14 @@ exports.Embed = require('./structures/Embed.js').Embed;
exports.Emoji = require('./structures/Emoji.js').Emoji;
exports.Entitlement = require('./structures/Entitlement.js').Entitlement;
exports.ForumChannel = require('./structures/ForumChannel.js').ForumChannel;
exports.GroupDMInvite = require('./structures/GroupDMInvite.js').GroupDMInvite;
exports.Guild = require('./structures/Guild.js').Guild;
exports.GuildAuditLogs = require('./structures/GuildAuditLogs.js').GuildAuditLogs;
exports.GuildAuditLogsEntry = require('./structures/GuildAuditLogsEntry.js').GuildAuditLogsEntry;
exports.GuildBan = require('./structures/GuildBan.js').GuildBan;
exports.GuildChannel = require('./structures/GuildChannel.js').GuildChannel;
exports.GuildEmoji = require('./structures/GuildEmoji.js').GuildEmoji;
exports.GuildInvite = require('./structures/GuildInvite.js').GuildInvite;
exports.GuildMember = require('./structures/GuildMember.js').GuildMember;
exports.GuildOnboarding = require('./structures/GuildOnboarding.js').GuildOnboarding;
exports.GuildOnboardingPrompt = require('./structures/GuildOnboardingPrompt.js').GuildOnboardingPrompt;
Expand All @@ -162,7 +165,6 @@ exports.InteractionCallbackResponse =
require('./structures/InteractionCallbackResponse.js').InteractionCallbackResponse;
exports.InteractionCollector = require('./structures/InteractionCollector.js').InteractionCollector;
exports.InteractionWebhook = require('./structures/InteractionWebhook.js').InteractionWebhook;
exports.Invite = require('./structures/Invite.js').Invite;
exports.InviteGuild = require('./structures/InviteGuild.js').InviteGuild;
exports.MediaChannel = require('./structures/MediaChannel.js').MediaChannel;
exports.MentionableSelectMenuComponent =
Expand Down
36 changes: 22 additions & 14 deletions packages/discord.js/src/managers/GuildInviteManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const { Collection } = require('@discordjs/collection');
const { Routes } = require('discord-api-types/v10');
const { CachedManager } = require('./CachedManager.js');
const { DiscordjsError, ErrorCodes } = require('../errors/index.js');
const { Invite } = require('../structures/Invite.js');
const { GuildInvite } = require('../structures/GuildInvite.js');
const { resolveInviteCode } = require('../util/DataResolver.js');

/**
Expand All @@ -13,7 +13,7 @@ const { resolveInviteCode } = require('../util/DataResolver.js');
*/
class GuildInviteManager extends CachedManager {
constructor(guild, iterable) {
super(guild.client, Invite, iterable);
super(guild.client, GuildInvite, iterable);

/**
* The guild this Manager belongs to
Expand All @@ -24,7 +24,7 @@ class GuildInviteManager extends CachedManager {

/**
* The cache of this Manager
* @type {Collection<string, Invite>}
* @type {Collection<string, GuildInvite>}
* @name GuildInviteManager#cache
*/

Expand All @@ -33,32 +33,39 @@ class GuildInviteManager extends CachedManager {
}

/**
* Data that resolves to give an Invite object. This can be:
* Data that resolves to give a `GuildInvite`. This can be:
* * An invite code
* * An invite URL
* @typedef {string} InviteResolvable
* @typedef {string} GuildInviteResolvable
*/

/**
* Data that can be resolved to a channel that an invite can be created on. This can be:
* A guild channel where an invite may be created on. This can be:
* * TextChannel
* * VoiceChannel
* * AnnouncementChannel
* * StageChannel
* * ForumChannel
* * MediaChannel
* @typedef {TextChannel|VoiceChannel|AnnouncementChannel|StageChannel|ForumChannel|MediaChannel}
* GuildInvitableChannel
*/

/**
* Data that can be resolved to a guild channel where an invite may be created on. This can be:
* * GuildInvitableChannel
* * Snowflake
* @typedef {TextChannel|VoiceChannel|AnnouncementChannel|StageChannel|ForumChannel|MediaChannel|Snowflake}
* @typedef {GuildInvitableChannel|Snowflake}
* GuildInvitableChannelResolvable
*/

/**
* Resolves an InviteResolvable to an Invite object.
* Resolves an `GuildInviteResolvable` to a `GuildInvite` object.
* @method resolve
* @memberof GuildInviteManager
* @instance
* @param {InviteResolvable} invite The invite resolvable to resolve
* @returns {?Invite}
* @param {GuildInviteResolvable} invite The invite resolvable to resolve
* @returns {?GuildInvite}
*/

/**
Expand Down Expand Up @@ -88,8 +95,9 @@ class GuildInviteManager extends CachedManager {

/**
* Fetches invite(s) from Discord.
* @param {InviteResolvable|FetchInviteOptions|FetchInvitesOptions} [options] Options for fetching guild invite(s)
* @returns {Promise<Invite|Collection<string, Invite>>}
* @param {GuildInviteResolvable|FetchInviteOptions|FetchInvitesOptions} [options]
* Options for fetching guild invite(s)
* @returns {Promise<GuildInvite|Collection<string, GuildInvite>>}
* @example
* // Fetch all invites from a guild
* guild.invites.fetch()
Expand Down Expand Up @@ -170,7 +178,7 @@ class GuildInviteManager extends CachedManager {
* Create an invite to the guild from the provided channel.
* @param {GuildInvitableChannelResolvable} channel The options for creating the invite from a channel.
* @param {InviteCreateOptions} [options={}] The options for creating the invite from a channel.
* @returns {Promise<Invite>}
* @returns {Promise<GuildInvite>}
* @example
* // Create an invite to a selected channel
* guild.invites.create('599942732013764608')
Expand All @@ -196,7 +204,7 @@ class GuildInviteManager extends CachedManager {
},
reason,
});
return new Invite(this.client, invite);
return new GuildInvite(this.client, invite);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions packages/discord.js/src/managers/GuildManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ const { ShardClientUtil } = require('../sharding/ShardClientUtil.js');
const { Guild } = require('../structures/Guild.js');
const { GuildChannel } = require('../structures/GuildChannel.js');
const { GuildEmoji } = require('../structures/GuildEmoji.js');
const { GuildInvite } = require('../structures/GuildInvite.js');
const { GuildMember } = require('../structures/GuildMember.js');
const { Invite } = require('../structures/Invite.js');
const { OAuth2Guild } = require('../structures/OAuth2Guild.js');
const { Role } = require('../structures/Role.js');
const { resolveImage } = require('../util/DataResolver.js');
Expand Down Expand Up @@ -112,7 +112,7 @@ class GuildManager extends CachedManager {
guild instanceof GuildMember ||
guild instanceof GuildEmoji ||
guild instanceof Role ||
(guild instanceof Invite && guild.guild)
(guild instanceof GuildInvite && guild.guild)
) {
return super.resolve(guild.guild);
}
Expand All @@ -133,7 +133,7 @@ class GuildManager extends CachedManager {
guild instanceof GuildMember ||
guild instanceof GuildEmoji ||
guild instanceof Role ||
(guild instanceof Invite && guild.guild)
(guild instanceof GuildInvite && guild.guild)
) {
return super.resolveId(guild.guild.id);
}
Expand Down
Loading