import { User } from '../structures/user.ts' import { Client } from '../models/client.ts' import { Guild } from '../structures/guild.ts' import { Member } from '../structures/member.ts' import { GUILD_MEMBER } from '../types/endpoint.ts' import { MemberPayload } from '../types/guild.ts' import { BaseManager } from './base.ts' export class MembersManager extends BaseManager { guild: Guild constructor(client: Client, guild: Guild) { super(client, `members:${guild.id}`, Member) this.guild = guild } async get (key: string): Promise { const raw = await this._get(key) if (raw === undefined) return const user = new User(this.client, raw.user) const res = new this.DataType(this.client, raw, user, this.guild) return res } async fetch(id: string): Promise { return await new Promise((resolve, reject) => { this.client.rest.get(GUILD_MEMBER(this.guild.id, id)).then(async data => { await this.set(id, data as MemberPayload) const user: User = new User(this.client, data.user) const res = new Member(this.client, data as MemberPayload, user, this.guild) resolve(res) }).catch(e => reject(e)) }) } async fromPayload(members: MemberPayload[]): Promise { for (const member of members) { await this.set(member.user.id, member) } } }