diff --git a/src/structures/Presence.js b/src/structures/Presence.js index 054e92195..cedf3b6cd 100644 --- a/src/structures/Presence.js +++ b/src/structures/Presence.js @@ -1,4 +1,4 @@ -const { ActivityTypes } = require('../util/Constants'); +const { ActivityTypes, ActivityFlags } = require('../util/Constants'); /** * Represents a user's presence. @@ -118,6 +118,17 @@ class Activity { * @type {?RichPresenceAssets} */ this.assets = data.assets ? new RichPresenceAssets(this, data.assets) : null; + + this.syncID = data.sync_id; + this._flags = data.flags; + } + + get flags() { + const flags = []; + for (const [name, flag] of Object.entries(ActivityFlags)) { + if ((this._flags & flag) === flag) flags.push(name); + } + return flags; } /** @@ -201,6 +212,9 @@ class RichPresenceAssets { */ largeImageURL({ format, size } = {}) { if (!this.largeImage) return null; + if (/^spotify:/.test(this.largeImage)) { + return `https://i.scdn.co/image/${this.largeImage.slice(8)}`; + } return this.activity.presence.client.rest.cdn .AppAsset(this.activity.applicationID, this.largeImage, { format, size }); } diff --git a/src/util/Constants.js b/src/util/Constants.js index bf6106cc1..e66e04041 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -362,6 +362,15 @@ exports.ActivityTypes = [ 'WATCHING', ]; +exports.ActivityFlags = { + INSTANCE: 1 << 0, + JOIN: 1 << 1, + SPECTATE: 1 << 2, + JOIN_REQUEST: 1 << 3, + SYNC: 1 << 4, + PLAY: 1 << 5, +}; + exports.ExplicitContentFilterTypes = [ 'DISABLED', 'NON_FRIENDS',