mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 16:43:31 +01:00
Rewrite presence a little bit (#1853)
* such presence many good * Update PresenceStore.js * Update index.js * Update ClientPresenceStore.js * Update Presence.js * Update ClientPresenceStore.js * Update ClientUser.js * Update Presence.js * add timestamps and party * Update Presence.js * Update PresenceStore.js * Update ClientPresenceStore.js * Update ClientPresenceStore.js
This commit is contained in:
@@ -9,7 +9,6 @@ const ClientVoiceManager = require('./voice/ClientVoiceManager');
|
||||
const WebSocketManager = require('./websocket/WebSocketManager');
|
||||
const ActionsManager = require('./actions/ActionsManager');
|
||||
const Collection = require('../util/Collection');
|
||||
const { Presence } = require('../structures/Presence');
|
||||
const VoiceRegion = require('../structures/VoiceRegion');
|
||||
const Webhook = require('../structures/Webhook');
|
||||
const Invite = require('../structures/Invite');
|
||||
@@ -19,6 +18,7 @@ const VoiceBroadcast = require('./voice/VoiceBroadcast');
|
||||
const UserStore = require('../stores/UserStore');
|
||||
const ChannelStore = require('../stores/ChannelStore');
|
||||
const GuildStore = require('../stores/GuildStore');
|
||||
const ClientPresenceStore = require('../stores/ClientPresenceStore');
|
||||
const { Error, TypeError, RangeError } = require('../errors');
|
||||
|
||||
/**
|
||||
@@ -115,9 +115,9 @@ class Client extends EventEmitter {
|
||||
/**
|
||||
* Presences that have been received for the client user's friends, mapped by user IDs
|
||||
* <warn>This is only filled when using a user account.</warn>
|
||||
* @type {Collection<Snowflake, Presence>}
|
||||
* @type {ClientPresenceStore<Snowflake, Presence>}
|
||||
*/
|
||||
this.presences = new Collection();
|
||||
this.presences = new ClientPresenceStore(this);
|
||||
|
||||
Object.defineProperty(this, 'token', { writable: true });
|
||||
if (!this.token && 'CLIENT_TOKEN' in process.env) {
|
||||
@@ -199,7 +199,7 @@ class Client extends EventEmitter {
|
||||
* @readonly
|
||||
*/
|
||||
get status() {
|
||||
return this.ws.connection.status;
|
||||
return this.ws.connection ? this.ws.connection.status : null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -481,20 +481,6 @@ class Client extends EventEmitter {
|
||||
this.ws.lastHeartbeatAck = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds/updates a friend's presence in {@link Client#presences}.
|
||||
* @param {Snowflake} id ID of the user
|
||||
* @param {Object} presence Raw presence object from Discord
|
||||
* @private
|
||||
*/
|
||||
_setPresence(id, presence) {
|
||||
if (this.presences.has(id)) {
|
||||
this.presences.get(id).update(presence);
|
||||
return;
|
||||
}
|
||||
this.presences.set(id, new Presence(presence));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script
|
||||
* with the client as `this`.
|
||||
|
||||
@@ -7,7 +7,7 @@ class GuildSync extends Action {
|
||||
const guild = client.guilds.get(data.id);
|
||||
if (guild) {
|
||||
if (data.presences) {
|
||||
for (const presence of data.presences) guild._setPresence(presence.user.id, presence);
|
||||
for (const presence of data.presences) guild.presences.create(presence);
|
||||
}
|
||||
|
||||
if (data.members) {
|
||||
|
||||
@@ -2,6 +2,7 @@ const UserAgentManager = require('./UserAgentManager');
|
||||
const handlers = require('./handlers');
|
||||
const APIRequest = require('./APIRequest');
|
||||
const routeBuilder = require('./APIRouter');
|
||||
const Constants = require('../../util/Constants');
|
||||
const { Error } = require('../../errors');
|
||||
|
||||
class RESTManager {
|
||||
@@ -17,6 +18,10 @@ class RESTManager {
|
||||
return routeBuilder(this);
|
||||
}
|
||||
|
||||
get cdn() {
|
||||
return Constants.Endpoints.CDN(this.client.options.http.cdn);
|
||||
}
|
||||
|
||||
destroy() {
|
||||
for (const handler of Object.values(this.handlers)) {
|
||||
if (handler.destroy) handler.destroy();
|
||||
|
||||
@@ -35,17 +35,17 @@ class PresenceUpdateHandler extends AbstractHandler {
|
||||
}
|
||||
if (member) {
|
||||
if (client.listenerCount(Constants.Events.PRESENCE_UPDATE) === 0) {
|
||||
guild._setPresence(user.id, data);
|
||||
guild.presences.create(data);
|
||||
return;
|
||||
}
|
||||
const oldMember = member._clone();
|
||||
if (member.presence) {
|
||||
oldMember.frozenPresence = member.presence._clone();
|
||||
}
|
||||
guild._setPresence(user.id, data);
|
||||
guild.presences.create(data);
|
||||
client.emit(Constants.Events.PRESENCE_UPDATE, oldMember, member);
|
||||
} else {
|
||||
guild._setPresence(user.id, data);
|
||||
guild.presences.create(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,7 @@ class ReadyHandler extends AbstractHandler {
|
||||
}
|
||||
}
|
||||
|
||||
data.presences = data.presences || [];
|
||||
for (const presence of data.presences) {
|
||||
client.users.create(presence.user);
|
||||
client._setPresence(presence.user.id, presence);
|
||||
}
|
||||
for (const presence of data.presences || []) client.presences.create(presence);
|
||||
|
||||
if (data.notes) {
|
||||
for (const user in data.notes) {
|
||||
@@ -52,7 +48,7 @@ class ReadyHandler extends AbstractHandler {
|
||||
avatar: 'https://discordapp.com/assets/f78426a064bc9dd24847519259bc42af.png',
|
||||
bot: true,
|
||||
status: 'online',
|
||||
game: null,
|
||||
activity: null,
|
||||
verified: true,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user