add ClientPresence, remove ClientPresenceStore

This commit is contained in:
Amish Shah
2018-08-11 10:46:51 +01:00
parent 3c2eaff226
commit ea764afad2
8 changed files with 21 additions and 33 deletions

View File

@@ -0,0 +1,69 @@
const { Presence } = require('./Presence');
const Collection = require('../util/Collection');
const { ActivityTypes, OPCodes } = require('../util/Constants');
const { TypeError } = require('../errors');
class ClientPresence extends Presence {
constructor(client, data = {}) {
super(client, Object.assign(data, { status: 'online', user: { id: null } }));
}
async setClientPresence(presence) {
const packet = await this._parse(presence);
this.patch(packet);
this.client.ws.send({ op: OPCodes.STATUS_UPDATE, d: packet });
return this;
}
async _parse({ status, since, afk, activity }) { // eslint-disable-line complexity
const applicationID = activity && (activity.application ? activity.application.id || activity.application : null);
let assets = new Collection();
if (activity) {
if (typeof activity.name !== 'string') throw new TypeError('INVALID_TYPE', 'name', 'string');
if (!activity.type) activity.type = 0;
if (activity.assets && applicationID) {
try {
const a = await this.client.api.oauth2.applications(applicationID).assets.get();
for (const asset of a) assets.set(asset.name, asset.id);
} catch (err) { } // eslint-disable-line no-empty
}
}
const packet = {
afk: afk != null ? afk : false, // eslint-disable-line eqeqeq
since: since != null ? since : null, // eslint-disable-line eqeqeq
status: status || this.status,
game: activity ? {
type: activity.type,
name: activity.name,
url: activity.url,
details: activity.details || undefined,
state: activity.state || undefined,
assets: activity.assets ? {
large_text: activity.assets.largeText || undefined,
small_text: activity.assets.smallText || undefined,
large_image: assets.get(activity.assets.largeImage) || activity.assets.largeImage,
small_image: assets.get(activity.assets.smallImage) || activity.assets.smallImage,
} : undefined,
timestamps: activity.timestamps || undefined,
party: activity.party || undefined,
application_id: applicationID || undefined,
secrets: activity.secrets || undefined,
instance: activity.instance || undefined,
} : null,
};
if ((status || afk || since) && !activity) {
packet.game = this.activity;
}
if (packet.game) {
packet.game.type = typeof packet.game.type === 'number' ?
packet.game.type : ActivityTypes.indexOf(packet.game.type);
}
return packet;
}
}
module.exports = ClientPresence;

View File

@@ -32,7 +32,7 @@ class ClientUser extends Structures.get('User') {
* @type {Presence}
*/
get presence() {
return this.client.presences.clientPresence;
return this.client.presence;
}
edit(data) {
@@ -97,7 +97,7 @@ class ClientUser extends Structures.get('User') {
* .catch(console.error);
*/
setPresence(data) {
return this.client.presences.setClientPresence(data);
return this.client.presence.setClientPresence(data);
}
/**

View File

@@ -105,7 +105,6 @@ class User extends Base {
* @readonly
*/
get presence() {
if (this.client.presences.has(this.id)) return this.client.presences.get(this.id);
for (const guild of this.client.guilds.values()) {
if (guild.presences.has(this.id)) return guild.presences.get(this.id);
}