UNPKG

detritus-client

Version:

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

170 lines (169 loc) 6.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SessionClientInfo = exports.Session = void 0; const basecollection_1 = require("../collections/basecollection"); const baseset_1 = require("../collections/baseset"); const constants_1 = require("../constants"); const basestructure_1 = require("./basestructure"); const presence_1 = require("./presence"); const keysSession = new baseset_1.BaseSet([ constants_1.DiscordKeys.ACTIVE, constants_1.DiscordKeys.ACTIVITIES, constants_1.DiscordKeys.CLIENT_INFO, constants_1.DiscordKeys.GAME, constants_1.DiscordKeys.POSITION, constants_1.DiscordKeys.SESSION_ID, constants_1.DiscordKeys.STATUS, ]); const keysMergeSession = new baseset_1.BaseSet([ constants_1.DiscordKeys.ACTIVITIES, ]); /** * Discord Session Structure (Users Only) * @category Structure */ class Session extends basestructure_1.BaseStructure { constructor(client, data, isClone) { super(client, undefined, isClone); this._keys = keysSession; this._keysMerge = keysMergeSession; this.active = false; this.sessionId = 'all'; this.status = constants_1.PresenceStatuses.OFFLINE; this.merge(data); } get activity() { return this.game; } get activities() { if (this._activities) { return this._activities; } return basecollection_1.emptyBaseCollection; } get game() { if (this._activities) { for (let [activityId, activity] of this._activities) { if (activity.position === 0) { return activity; } } return this._activities.first() || null; } return null; } get isDnd() { return this.status === constants_1.PresenceStatuses.DND; } get isIdle() { return this.status === constants_1.PresenceStatuses.IDLE; } get isOffline() { return this.status === constants_1.PresenceStatuses.OFFLINE || this.status === constants_1.PresenceStatuses.INVISIBLE; } get isOnline() { return this.status === constants_1.PresenceStatuses.ONLINE; } mergeValue(key, value) { if (value !== undefined) { switch (key) { case constants_1.DiscordKeys.ACTIVITIES: { if (value.length) { if (!this._activities) { this._activities = new basecollection_1.BaseCollection(); } this._activities.clear(); for (let position = 0; position < value.length; position++) { const raw = value[position]; raw.position = position; if (this.isClone) { const activity = new presence_1.PresenceActivity(this.client.user.clone(), raw); this._activities.set(activity.id, activity); } else { if (this._activities.has(raw.id)) { const activity = this._activities.get(raw.id); activity.merge(raw); } else { const activity = new presence_1.PresenceActivity(this.client.user, raw); this._activities.set(activity.id, activity); } } } } else { if (this._activities) { this._activities.clear(); this._activities = undefined; } } } ; return; case constants_1.DiscordKeys.CLIENT_INFO: { let clientInfo; if (this.clientInfo) { clientInfo = this.clientInfo; clientInfo.merge(value); } else { clientInfo = new SessionClientInfo(this, value); } value = clientInfo; } ; break; case constants_1.DiscordKeys.GAME: { } ; return; } return super.mergeValue(key, value); } } } exports.Session = Session; const keysSessionClientInfo = new baseset_1.BaseSet([ constants_1.DiscordKeys.CLIENT, constants_1.DiscordKeys.OS, constants_1.DiscordKeys.VERSION, ]); const keysMergeSessionClientInfo = keysSessionClientInfo; /** * Session Client Info Structure, used in [Session] * @category Structure */ class SessionClientInfo extends basestructure_1.BaseStructure { constructor(session, data) { super(session.client, undefined, session._clone); this._uncloneable = true; this._keys = keysSessionClientInfo; this._keysMerge = keysMergeSessionClientInfo; this.clientString = 'unknown'; this.os = 'unknown'; this.version = 0; this.session = session; this.merge(data); } mergeValue(key, value) { switch (key) { case constants_1.DiscordKeys.CLIENT: { this.clientString = value; } ; return; } return this._setFromSnake(key, value); } toJSON() { const data = super.toJSON(); data[constants_1.DiscordKeys.CLIENT] = this.clientString; return data; } } exports.SessionClientInfo = SessionClientInfo;