Skip to content

Commit

Permalink
feat: server templates (#25)
Browse files Browse the repository at this point in the history
Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
  • Loading branch information
advaith1 and vladfrangu committed Nov 23, 2020
1 parent 60c38fd commit 7d873f7
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 0 deletions.
2 changes: 2 additions & 0 deletions common/index.ts
Expand Up @@ -52,6 +52,8 @@ export enum RESTJSONErrorCodes {
MaximumNumberOfAttachmentsInAMessageReached = 30015,
MaximumNumberOfInvitesReached,

GuildAlreadyHasTemplate = 30031,

Unauthorized = 40001,
VerifyYourAccount,

Expand Down
7 changes: 7 additions & 0 deletions v8/payloads/guild.ts
Expand Up @@ -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<APIUnavailableGuild, 'unavailable'>, Pick<APIGuild, 'welcome_screen'> {
name: string;
icon: string | null;
Expand All @@ -29,7 +32,11 @@ export interface APIPartialGuild extends Omit<APIUnavailableGuild, 'unavailable'
unavailable?: boolean;
}

/**
* https://discord.com/developers/docs/resources/guild#guild-object-guild-structure
*/
export interface APIGuild extends APIPartialGuild {
icon_hash?: string | null;
discovery_splash: string | null;
owner?: boolean;
owner_id: string;
Expand Down
1 change: 1 addition & 0 deletions v8/payloads/index.ts
Expand Up @@ -7,6 +7,7 @@ export * from './invite';
export * from './oauth2';
export * from './permissions';
export * from './teams';
export * from './template';
export * from './user';
export * from './voice';
export * from './webhook';
29 changes: 29 additions & 0 deletions v8/payloads/template.ts
@@ -0,0 +1,29 @@
/**
* Types extracted from https://discord.com/developers/docs/resources/template
*/

import type { APIUser } from './user';
import type { RESTPostAPIGuildsJSONBody } from '../rest';

/**
* https://discord.com/developers/docs/resources/template#template-object
*/
export interface APITemplate {
code: string;
name: string;
description: string | null;
usage_count: number;
creator_id: string;
creator: APIUser;
created_at: string;
updated_at: string;
source_guild_id: string;
serialized_source_guild: APITemplateSerializedSourceGuild;
is_dirty: boolean | null;
}

export interface APITemplateSerializedSourceGuild extends Omit<RESTPostAPIGuildsJSONBody, 'icon'> {
description: string | null;
preferred_locale: string;
icon_hash: string | null;
}
3 changes: 3 additions & 0 deletions v8/rest/guild.ts
Expand Up @@ -13,6 +13,7 @@ import type {
GuildDefaultMessageNotifications,
GuildExplicitContentFilter,
GuildFeature,
GuildSystemChannelFlags,
GuildVerificationLevel,
GuildWidgetStyle,
IntegrationExpireBehavior,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
29 changes: 29 additions & 0 deletions v8/rest/index.ts
Expand Up @@ -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';
Expand Down Expand Up @@ -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`
Expand Down
33 changes: 33 additions & 0 deletions 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<RESTPostAPIGuildTemplatesJSONBody>;
export type RESTPatchAPIGuildTemplateResult = APITemplate;

export type RESTDeleteAPIGuildTemplateResult = APITemplate;

0 comments on commit 7d873f7

Please sign in to comment.