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