detritus-client
Version:
A Typescript NodeJS library to interact with Discord's API, both Rest and Gateway.
173 lines (172 loc) • 5.61 kB
JavaScript
"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;