diff --git a/common/index.ts b/common/index.ts index d05f6b500..676d584b3 100644 --- a/common/index.ts +++ b/common/index.ts @@ -52,6 +52,8 @@ export enum RESTJSONErrorCodes { MaximumNumberOfAttachmentsInAMessageReached = 30015, MaximumNumberOfInvitesReached, + GuildAlreadyHasTemplate = 30031, + Unauthorized = 40001, VerifyYourAccount, diff --git a/v8/payloads/guild.ts b/v8/payloads/guild.ts index 7a644a7a5..1af4ae0a1 100644 --- a/v8/payloads/guild.ts +++ b/v8/payloads/guild.ts @@ -17,6 +17,9 @@ export interface APIUnavailableGuild { unavailable: boolean; } +/** + * https://discord.com/developers/docs/resources/guild#guild-object-guild-structure + */ export interface APIPartialGuild extends Omit, Pick { name: string; icon: string | null; @@ -29,7 +32,11 @@ export interface APIPartialGuild extends Omit { + description: string | null; + preferred_locale: string; + icon_hash: string | null; +} diff --git a/v8/rest/guild.ts b/v8/rest/guild.ts index ecaf20241..1410ad193 100644 --- a/v8/rest/guild.ts +++ b/v8/rest/guild.ts @@ -13,6 +13,7 @@ import type { GuildDefaultMessageNotifications, GuildExplicitContentFilter, GuildFeature, + GuildSystemChannelFlags, GuildVerificationLevel, GuildWidgetStyle, IntegrationExpireBehavior, @@ -51,6 +52,7 @@ export interface RESTPostAPIGuildsJSONBody { afk_channel_id?: number | string; afk_timeout?: number; system_channel_id?: number | string; + system_channel_flags: GuildSystemChannelFlags; } export type RESTPostAPIGuildsResult = APIGuild; @@ -86,6 +88,7 @@ export interface RESTPatchAPIGuildJSONBody { discovery_splash?: string | null; banner?: string | null; system_channel_id?: string | null; + system_channel_flags: GuildSystemChannelFlags; rules_channel_id?: string | null; public_updates_channel_id?: string | null; preferred_locale?: string; diff --git a/v8/rest/index.ts b/v8/rest/index.ts index 5e2ffd50f..a6ab0bb8d 100644 --- a/v8/rest/index.ts +++ b/v8/rest/index.ts @@ -5,6 +5,7 @@ export * from './gateway'; export * from './guild'; export * from './invite'; export * from './oauth2'; +export * from './template'; export * from './user'; export * from './voice'; export * from './webhook'; @@ -393,6 +394,34 @@ export const Routes = { return `/invites/${code}`; }, + /** + * Route for: + * - GET `/guilds/templates/{template.code}` + * - POST `/guilds/templates/{template.code}` + */ + template(code: string) { + return `/guilds/templates/${code}`; + }, + + /** + * Route for: + * - GET `/guilds/{guild.id}/templates` + * - POST `/guilds/{guild.id}/templates` + */ + guildTemplates(guildID: string) { + return `/guilds/${guildID}/templates`; + }, + + /** + * Route for: + * - PUT `/guilds/{guild.id}/templates/{template.code}` + * - PATCH `/guilds/{guild.id}/templates/{template.code}` + * - DELETE `/guilds/{guild.id}/templates/{template.code}` + */ + guildTemplate(guildID: string, code: string) { + return `/guilds/${guildID}/templates/${code}`; + }, + /** * Route for: * - GET `/users/@me` diff --git a/v8/rest/template.ts b/v8/rest/template.ts new file mode 100644 index 000000000..0aa4f5b67 --- /dev/null +++ b/v8/rest/template.ts @@ -0,0 +1,33 @@ +import type { APIGuild, APITemplate } from '../payloads'; + +/** + * https://discord.com/developers/docs/resources/template#get-template + */ +export type RESTGetAPITemplateResult = APITemplate; + +/** + * https://discord.com/developers/docs/resources/template#create-guild-from-template + */ +export interface RESTPostAPITemplateCreateGuildJSONBody { + name: string; + icon?: string; +} +/** + * https://discord.com/developers/docs/resources/template#create-guild-from-template + */ +export type RESTPostAPITemplateCreateGuildResult = APIGuild; + +export type RESTGetAPIGuildTemplatesResult = APITemplate[]; + +export interface RESTPostAPIGuildTemplatesJSONBody { + name: string; + description?: string | null; +} +export type RESTPostAPIGuildTemplatesResult = APITemplate; + +export type RESTPutAPIGuildTemplateSyncResult = APITemplate; + +export type RESTPatchAPIGuildTemplateJSONBody = Partial; +export type RESTPatchAPIGuildTemplateResult = APITemplate; + +export type RESTDeleteAPIGuildTemplateResult = APITemplate;