feat: add template structure and methods
This commit is contained in:
parent
3695b81de6
commit
d1fcce7b83
2 changed files with 72 additions and 2 deletions
70
src/structures/template.ts
Normal file
70
src/structures/template.ts
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
import { Client } from '../models/client.ts'
|
||||||
|
import { TEMPLATE } from '../types/endpoint.ts'
|
||||||
|
import { TemplatePayload } from '../types/template.ts'
|
||||||
|
import { Base } from './base.ts'
|
||||||
|
import { Guild } from './guild.ts'
|
||||||
|
import { User } from './user.ts'
|
||||||
|
|
||||||
|
export class Template extends Base {
|
||||||
|
/** the template code (unique ID) */
|
||||||
|
code: string
|
||||||
|
/** template name */
|
||||||
|
name: string
|
||||||
|
/** the description for the template */
|
||||||
|
description: string | null
|
||||||
|
/** number of times this template has been used */
|
||||||
|
usageCount: number
|
||||||
|
/** the ID of the user who created the template */
|
||||||
|
creatorID: string
|
||||||
|
/** the user who created the template */
|
||||||
|
creator: User
|
||||||
|
/** when this template was created (in ms) */
|
||||||
|
createdAt: number
|
||||||
|
/** when this template was last synced to the source guild (in ms) */
|
||||||
|
updatedAt: number
|
||||||
|
/** the ID of the guild this template is based on */
|
||||||
|
sourceGuildID: string
|
||||||
|
/** the guild snapshot this template contains */
|
||||||
|
serializedSourceGuild: Guild
|
||||||
|
/** whether the template has unsynced changes */
|
||||||
|
isDirty: boolean | null
|
||||||
|
|
||||||
|
constructor(client: Client, data: TemplatePayload) {
|
||||||
|
super(client, data)
|
||||||
|
this.code = data.code
|
||||||
|
this.name = data.name
|
||||||
|
this.description = data.description
|
||||||
|
this.usageCount = data.usage_count
|
||||||
|
this.creatorID = data.creator_id
|
||||||
|
this.creator = new User(client, data.creator)
|
||||||
|
this.createdAt = Date.parse(data.created_at)
|
||||||
|
this.updatedAt = Date.parse(data.updated_at)
|
||||||
|
this.sourceGuildID = data.source_guild_id
|
||||||
|
this.serializedSourceGuild = new Guild(client, data.serialized_source_guild)
|
||||||
|
this.isDirty = Boolean(data.is_dirty)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Modifies the template's metadata. Requires the MANAGE_GUILD permission. Returns the template object on success. */
|
||||||
|
async edit(data: ModifyGuildTemplateParams) {
|
||||||
|
const res = await this.client.rest.patch(TEMPLATE(this.code), data)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Deletes the template. Requires the MANAGE_GUILD permission. Returns the deleted template object on success. */
|
||||||
|
async delete() {
|
||||||
|
const res = await this.client.rest.delete(TEMPLATE(this.code))
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Syncs the template to the guild's current state. Requires the MANAGE_GUILD permission. Returns the template object on success. */
|
||||||
|
async sync() {
|
||||||
|
const res = await this.client.rest.put(TEMPLATE(this.code))
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://discord.com/developers/docs/resources/template#modify-guild-template-json-params */
|
||||||
|
export interface ModifyGuildTemplateParams {
|
||||||
|
name?: string
|
||||||
|
description?: string | null
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ import { UserPayload } from './user.ts'
|
||||||
export interface TemplatePayload {
|
export interface TemplatePayload {
|
||||||
code: string
|
code: string
|
||||||
name: string
|
name: string
|
||||||
description: string | undefined
|
description: string | null
|
||||||
usage_count: number
|
usage_count: number
|
||||||
creator_id: string
|
creator_id: string
|
||||||
creator: UserPayload
|
creator: UserPayload
|
||||||
|
@ -12,5 +12,5 @@ export interface TemplatePayload {
|
||||||
updated_at: string
|
updated_at: string
|
||||||
source_guild_id: string
|
source_guild_id: string
|
||||||
serialized_source_guild: GuildPayload
|
serialized_source_guild: GuildPayload
|
||||||
is_dirty: boolean | undefined
|
is_dirty: boolean | null
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue