Make presences track users and guilds, emit them in presenceUpdate

This commit is contained in:
Amish Shah
2018-08-10 16:46:14 +01:00
parent fe8ece0192
commit 08eff66939
7 changed files with 32 additions and 13 deletions

View File

@@ -23,6 +23,8 @@ class PresenceUpdateHandler extends AbstractHandler {
}
if (guild) {
let oldPresence = guild.presences.get(user.id);
if (oldPresence) oldPresence = oldPresence._clone();
let member = guild.members.get(user.id);
if (!member && data.status !== 'offline') {
member = guild.members.add({
@@ -35,17 +37,13 @@ class PresenceUpdateHandler extends AbstractHandler {
}
if (member) {
if (client.listenerCount(Events.PRESENCE_UPDATE) === 0) {
guild.presences.add(data);
guild.presences.add(Object.assign(data, { guild: this }));
return;
}
const oldMember = member._clone();
if (member.presence) {
oldMember.frozenPresence = member.presence._clone();
}
guild.presences.add(data);
client.emit(Events.PRESENCE_UPDATE, oldMember, member);
guild.presences.add(Object.assign(data, { guild: this }));
client.emit(Events.PRESENCE_UPDATE, oldPresence, member.presence);
} else {
guild.presences.add(data);
guild.presences.add(Object.assign(data, { guild: this }));
}
}
}

View File

@@ -9,6 +9,7 @@ class ReadyHandler extends AbstractHandler {
client.ws.heartbeat();
client.presences.clientPresence.userID = data.user.id;
if (!ClientUser) ClientUser = require('../../../../structures/ClientUser');
const clientUser = new ClientUser(client, data.user);
client.user = clientUser;
@@ -17,7 +18,6 @@ class ReadyHandler extends AbstractHandler {
for (const guild of data.guilds) client.guilds.add(guild);
for (const privateDM of data.private_channels) client.channels.add(privateDM);
for (const presence of data.presences || []) client.presences.add(presence);
if (!client.users.has('1')) {
client.users.add({