Skip to content

Commit

Permalink
feat: support guild onboarding (#65)
Browse files Browse the repository at this point in the history
* Initial guild onboarding support

* link to guild onboarding structure in the JSDoc
  • Loading branch information
TTtie committed May 11, 2023
1 parent 8b8a0ac commit b15d968
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 0 deletions.
30 changes: 30 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ declare namespace Dysnomia {
type GuildScheduledEventPrivacyLevel = Constants["GuildScheduledEventPrivacyLevel"][keyof Constants["GuildScheduledEventPrivacyLevel"]];
type GuildScheduledEventStatus = Constants["GuildScheduledEventStatus"][keyof Constants["GuildScheduledEventStatus"]];
type NSFWLevel = Constants["GuildNSFWLevels"][keyof Constants["GuildNSFWLevels"]];
type OnboardingPromptTypes = Constants["OnboardingPromptTypes"][keyof Constants["OnboardingPromptTypes"]];
type PossiblyUncachedGuild = Guild | Uncached;
type PossiblyUncachedGuildScheduledEvent = GuildScheduledEvent | Uncached;
type PremiumTier = Constants["PremiumTiers"][keyof Constants["PremiumTiers"]];
Expand Down Expand Up @@ -1064,6 +1065,29 @@ declare namespace Dysnomia {
reason?: string;
user: User;
}
interface GuildOnboarding {
enabled: boolean;
default_channel_ids: string[];
guild_id: string;
prompts: GuildOnboardingPrompt[];
}
interface GuildOnboardingPrompt {
id: string;
in_onboarding: boolean;
options: GuildOnboardingPromptOption[];
required: boolean;
single_select: boolean;
type: OnboardingPromptTypes;
title: string;
}
interface GuildOnboardingPromptOption {
channel_ids: string[];
description: string | null;
emoji: PartialEmoji;
id: string;
role_ids: string[];
title: string;
}
interface GuildOptions {
afkChannelID?: string;
afkTimeout?: number;
Expand Down Expand Up @@ -2251,6 +2275,10 @@ declare namespace Dysnomia {
INVITED: 1;
ACCEPTED: 2;
};
OnboardingPromptTypes: {
MULTIPLE_CHOICE: 0;
DROPDOWN: 1;
};
PermissionOverwriteTypes: {
ROLE: 0;
USER: 1;
Expand Down Expand Up @@ -2791,6 +2819,7 @@ declare namespace Dysnomia {
getGuildDiscovery(guildID: string): Promise<DiscoveryMetadata>;
getGuildIntegrations(guildID: string): Promise<GuildIntegration[]>;
getGuildInvites(guildID: string): Promise<Invite[]>;
getGuildOnboarding(guildID: string): Promise<GuildOnboarding>;
getGuildPreview(guildID: string): Promise<GuildPreview>;
getGuildScheduledEvents(guildID: string, options?: GetGuildScheduledEventOptions): Promise<GuildScheduledEvent[]>;
getGuildScheduledEventUsers(guildID: string, eventID: string, options?: GetGuildScheduledEventUsersOptions): Promise<GuildScheduledEventUser[]>;
Expand Down Expand Up @@ -3177,6 +3206,7 @@ declare namespace Dysnomia {
getDiscovery(): Promise<DiscoveryMetadata>;
getIntegrations(): Promise<GuildIntegration>;
getInvites(): Promise<Invite[]>;
getOnboarding(): Promise<GuildOnboarding>;
getPruneCount(options?: GetPruneOptions): Promise<number>;
getRESTChannels(): Promise<AnyGuildChannel[]>;
getRESTEmoji(emojiID: string): Promise<Emoji>;
Expand Down
9 changes: 9 additions & 0 deletions lib/Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -2417,6 +2417,15 @@ class Client extends EventEmitter {
return this.requestHandler.request("GET", Endpoints.GUILD_INVITES(guildID), true).then((invites) => invites.map((invite) => new Invite(invite, this)));
}

/**
* Get the onboarding flow of a guild, shown to new members
* @param {String} guildID The ID of the guild
* @returns {Promise<Object>} Resolves with the [guild onboarding object](https://discord.com/developers/docs/resources/guild#guild-onboarding-object)
*/
getGuildOnboarding(guildID) {
return this.requestHandler.request("GET", Endpoints.GUILD_ONBOARDING(guildID), true);
}

/**
* Get a guild preview for a guild. Only available for community guilds.
* @arg {String} guildID The ID of the guild
Expand Down
5 changes: 5 additions & 0 deletions lib/Constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,11 @@ module.exports.MembershipState = {
ACCEPTED: 2
};

module.exports.OnboardingPromptTypes = {
MULTIPLE_CHOICE: 0,
DROPDOWN: 1
};

module.exports.PermissionOverwriteTypes = {
ROLE: 0,
USER: 1
Expand Down
1 change: 1 addition & 0 deletions lib/rest/Endpoints.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ module.exports.GUILD_MEMBER_ROLE = (guildID, memberID, roleID)
module.exports.GUILD_MEMBERS = (guildID) => `/guilds/${guildID}/members`;
module.exports.GUILD_MEMBERS_SEARCH = (guildID) => `/guilds/${guildID}/members/search`;
module.exports.GUILD_MFA_LEVEL = (guildID) => `/guilds/${guildID}/mfa`;
module.exports.GUILD_ONBOARDING = (guildID) => `/guilds/${guildID}/onboarding`;
module.exports.GUILD_PREVIEW = (guildID) => `/guilds/${guildID}/preview`;
module.exports.GUILD_PRUNE = (guildID) => `/guilds/${guildID}/prune`;
module.exports.GUILD_ROLE = (guildID, roleID) => `/guilds/${guildID}/roles/${roleID}`;
Expand Down
8 changes: 8 additions & 0 deletions lib/structures/Guild.js
Original file line number Diff line number Diff line change
Expand Up @@ -1046,6 +1046,14 @@ class Guild extends Base {
return this._client.getGuildInvites.call(this._client, this.id);
}

/**
* Get the onboarding flow of the guild, shown to new members
* @returns {Promise<Object>} Resolves with the [guild onboarding object](https://discord.com/developers/docs/resources/guild#guild-onboarding-object)
*/
getOnboarding() {
return this._client.getGuildOnboarding.call(this._client, this.id);
}

/**
* Get the prune count for the guild
* @arg {Number} [options] The options to use to get number of prune members
Expand Down

0 comments on commit b15d968

Please sign in to comment.