Change how presences are handled

This commit is contained in:
Amish Shah
2016-09-25 14:15:58 +01:00
parent 0e8f1bef97
commit 03651fd6e3
11 changed files with 169 additions and 90 deletions

View File

@@ -19,9 +19,9 @@ class PresenceUpdateHandler extends AbstractHandler {
}
if (guild) {
const memberInGuild = guild.members.get(user.id);
if (!memberInGuild && data.status !== 'offline') {
const member = guild._addMember({
let member = guild.members.get(user.id);
if (!member && data.status !== 'offline') {
member = guild._addMember({
user,
roles: data.roles,
deaf: false,
@@ -29,26 +29,12 @@ class PresenceUpdateHandler extends AbstractHandler {
}, false);
client.emit(Constants.Events.GUILD_MEMBER_AVAILABLE, guild, member);
}
guild._setPresence(user.id, data);
}
data.user.username = data.user.username || user.username;
data.user.id = data.user.id || user.id;
data.user.discriminator = data.user.discriminator || user.discriminator;
data.user.status = data.status || user.status;
data.user.game = data.game;
const same = data.user.username === user.username &&
data.user.id === user.id &&
data.user.discriminator === user.discriminator &&
data.user.avatar === user.avatar &&
data.user.status === user.status &&
JSON.stringify(data.user.game) === JSON.stringify(user.game);
if (!same) {
const oldUser = cloneObject(user);
user.patch(data.user);
client.emit(Constants.Events.PRESENCE_UPDATE, oldUser, user);
}
const oldUser = cloneObject(user);
user.patch(data.user);
client.emit(Constants.Events.PRESENCE_UPDATE, oldUser, user);
}
}

View File

@@ -16,6 +16,12 @@ class ReadyHandler extends AbstractHandler {
for (const guild of data.guilds) client.dataManager.newGuild(guild);
for (const privateDM of data.private_channels) client.dataManager.newChannel(privateDM);
data.presences = data.presences || [];
for (const presence of data.presences) {
client.dataManager.newUser(presence.user);
client._setPresence(presence.user.id, presence);
}
if (!client.user.bot) client.setInterval(client.syncGuilds.bind(client), 30000);
client.once('ready', client.syncGuilds.bind(client));