harmony/src/managers/guilds.ts

51 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-01-21 12:39:51 +00:00
import { fetchAuto } from '../../deps.ts'
2020-11-08 07:58:24 +00:00
import { Client } from '../models/client.ts'
import { Guild } from '../structures/guild.ts'
2021-01-21 12:39:51 +00:00
import { Template } from '../structures/template.ts'
2020-11-08 07:58:24 +00:00
import { GUILD } from '../types/endpoint.ts'
import { GuildPayload, MemberPayload } from '../types/guild.ts'
import { BaseManager } from './base.ts'
import { MembersManager } from './members.ts'
export class GuildManager extends BaseManager<GuildPayload, Guild> {
2020-12-02 12:29:52 +00:00
constructor(client: Client) {
super(client, 'guilds', Guild)
}
2020-12-02 12:29:52 +00:00
async fetch(id: string): Promise<Guild> {
2020-11-03 09:21:29 +00:00
return await new Promise((resolve, reject) => {
2020-11-08 07:58:24 +00:00
this.client.rest
.get(GUILD(id))
.then(async (data: any) => {
this.set(id, data)
const guild = new Guild(this.client, data)
if ((data as GuildPayload).members !== undefined) {
const members = new MembersManager(this.client, guild)
await members.fromPayload(
(data as GuildPayload).members as MemberPayload[]
)
guild.members = members
}
resolve(guild)
})
2020-12-02 12:29:52 +00:00
.catch((e) => reject(e))
})
}
2021-01-21 12:39:51 +00:00
/** Create a new guild based on a template. */
async createFromTemplate(
template: Template | string,
name: string,
icon?: string
): Promise<Guild> {
if (icon?.startsWith('http') === true) icon = await fetchAuto(icon)
const guild = await this.client.rest.api.guilds.templates[
typeof template === 'object' ? template.code : template
].post({ name, icon })
return new Guild(this.client, guild)
}
}