fix(Presence): account for multiple activities everywhere (#3703)

* fix(Presence): account for multiple activities everywhere

* refactor(Presence): make initialization of 'activities' more readable
This commit is contained in:
SpaceEEC
2020-01-19 13:05:45 +01:00
committed by GitHub
parent cbb8db3058
commit f501d06c0d
3 changed files with 19 additions and 12 deletions

View File

@@ -68,7 +68,7 @@ class ClientPresence extends Presence {
};
if ((status || afk || since) && !activity) {
packet.game = this.activity;
packet.game = this.activities[0] || null;
}
if (packet.game) {

View File

@@ -149,7 +149,7 @@ class ClientUser extends Structures.get('User') {
* @example
* // Set the client user's activity
* client.user.setActivity('discord.js', { type: 'WATCHING' })
* .then(presence => console.log(`Activity set to ${presence.activity.name}`))
* .then(presence => console.log(`Activity set to ${presence.activities[0].name}`))
* .catch(console.error);
*/
setActivity(name, options = {}) {

View File

@@ -85,11 +85,17 @@ class Presence {
*/
this.status = data.status || this.status || 'offline';
/**
* The activities of this presence
* @type {Activity[]}
*/
this.activities = data.activities ? data.activities.map(activity => new Activity(this, activity)) : [];
if (data.activities) {
/**
* The activities of this presence
* @type {Activity[]}
*/
this.activities = data.activities.map(activity => new Activity(this, activity));
} else if (data.activity || data.game) {
this.activities = [new Activity(this, data.game || data.activity)];
} else {
this.activities = [];
}
/**
* The devices this presence is on
@@ -105,7 +111,7 @@ class Presence {
_clone() {
const clone = Object.assign(Object.create(this), this);
if (this.activity) clone.activity = this.activity._clone();
if (this.activities) clone.activities = this.activities.map(activity => activity._clone());
return clone;
}
@@ -118,10 +124,11 @@ class Presence {
return this === presence || (
presence &&
this.status === presence.status &&
this.activity ? this.activity.equals(presence.activity) : !presence.activity &&
this.clientStatus.web === presence.clientStatus.web &&
this.clientStatus.mobile === presence.clientStatus.mobile &&
this.clientStatus.desktop === presence.clientStatus.desktop
this.activities.length === presence.activities.length &&
this.activities.every((activity, index) => activity.equals(presence.activities[index])) &&
this.clientStatus.web === presence.clientStatus.web &&
this.clientStatus.mobile === presence.clientStatus.mobile &&
this.clientStatus.desktop === presence.clientStatus.desktop
);
}