UNPKG

detritus-client

Version:

A Typescript NodeJS library to interact with Discord's API, both Rest and Gateway.

173 lines (172 loc) 5.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TeamMember = exports.Team = void 0; const basecollection_1 = require("../collections/basecollection"); const baseset_1 = require("../collections/baseset"); const utils_1 = require("../utils"); const constants_1 = require("../constants"); const basestructure_1 = require("./basestructure"); const user_1 = require("./user"); const keysTeam = new baseset_1.BaseSet([ constants_1.DiscordKeys.ICON, constants_1.DiscordKeys.ID, constants_1.DiscordKeys.MEMBERS, constants_1.DiscordKeys.NAME, constants_1.DiscordKeys.OWNER_USER_ID, constants_1.DiscordKeys.PAYOUT_ACCOUNT_STATUS, ]); /** * Team Structure * an application's team * @category Structure */ class Team extends basestructure_1.BaseStructure { constructor(client, data, isClone) { super(client, undefined, isClone); this._keys = keysTeam; this.icon = null; this.id = ''; this.members = new basecollection_1.BaseCollection(); this.name = ''; this.ownerUserId = ''; this.merge(data); } get createdAt() { return new Date(this.createdAtUnix); } get createdAtUnix() { return utils_1.Snowflake.timestamp(this.id); } get owner() { for (let [userId, member] of this.members) { if (member.user.id === this.ownerUserId) { return member; } } return null; } async addMember(options) { return this.client.rest.addTeamMember(this.id, options); } async edit(options) { return this.client.rest.editTeam(this.id, options); } async fetch() { return this.client.rest.fetchTeam(this.id); } async fetchApplications() { return this.client.rest.fetchTeamApplications(this.id); } async fetchMembers() { const members = await this.client.rest.fetchTeamMembers(this.id); this.members.clear(); for (let [userId, member] of members) { this.members.set(userId, member); } return this.members; } async fetchMember(userId) { const member = await this.client.rest.fetchTeamMember(this.id, userId); this.members.set(member.user.id, member); return member; } async fetchPayouts(options) { return this.client.rest.fetchTeamPayouts(this.id, options); } async delete(options) { return this.client.rest.deleteTeam(this.id, options); } async removeTeamMember(userId) { return this.client.rest.removeTeamMember(this.id, userId); } mergeValue(key, value) { if (value !== undefined) { switch (key) { case constants_1.DiscordKeys.MEMBERS: { this.members.clear(); for (let raw of value) { this.members.set(raw.user.id, new TeamMember(this.client, raw, this._clone)); } } ; return; } return super.mergeValue(key, value); } } } exports.Team = Team; const keysTeamMember = new baseset_1.BaseSet([ constants_1.DiscordKeys.MEMBERSHIP_STATE, constants_1.DiscordKeys.PERMISSIONS, constants_1.DiscordKeys.TEAM_ID, constants_1.DiscordKeys.USER, ]); /** * Team Member Structure * an application's team member * @category Structure */ class TeamMember extends user_1.UserMixin { constructor(client, data, isClone) { super(client, undefined, isClone); this._keys = keysTeamMember; this.membershipState = constants_1.TeamMembershipStates.BASE; this.teamId = ''; this.merge(data); } get accepted() { return this.membershipState === constants_1.TeamMembershipStates.ACCEPTED; } get invited() { return this.membershipState === constants_1.TeamMembershipStates.INVITED; } async fetch() { const member = await this.client.rest.fetchTeamMember(this.teamId, this.user.id); this.merge(member.toJSON()); return this; } async fetchTeam() { return this.client.rest.fetchTeam(this.teamId); } async remove() { return this.client.rest.removeTeamMember(this.teamId, this.user.id); } async transferOwnership(options = {}) { const body = { code: options.code, ownerUserId: this.user.id, }; return this.client.rest.editTeam(this.teamId, body); } mergeValue(key, value) { if (value !== undefined) { switch (key) { case constants_1.DiscordKeys.PERMISSIONS: { value = new baseset_1.BaseSet(value); } ; break; case constants_1.DiscordKeys.USER: { let user; if (this.client.users.has(value.id)) { user = this.client.users.get(value.id); user.merge(value); } else { user = new user_1.User(this.client, value); // dont insert into cache } value = user; } ; break; } super.mergeValue(key, value); } } } exports.TeamMember = TeamMember;