From 30f5e2943a9d496dbe739e125cd4b99cda6ede6c Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 16 Apr 2016 23:24:52 +0100 Subject: [PATCH] Create Member class, stop storing member data separately and merge into one class with a User --- .../packets/handlers/GuildMemberRemove.js | 8 ++-- .../packets/handlers/GuildMemberUpdate.js | 6 ++- src/structures/Guild.js | 26 +++++------- src/structures/Member.js | 42 +++++++++++++++++++ src/structures/datastore/GuildDataStore.js | 2 - 5 files changed, 62 insertions(+), 22 deletions(-) create mode 100644 src/structures/Member.js diff --git a/src/client/websocket/packets/handlers/GuildMemberRemove.js b/src/client/websocket/packets/handlers/GuildMemberRemove.js index 53a20fa2a..a46556c38 100644 --- a/src/client/websocket/packets/handlers/GuildMemberRemove.js +++ b/src/client/websocket/packets/handlers/GuildMemberRemove.js @@ -21,10 +21,12 @@ class GuildMemberRemoveHandler extends AbstractHandler { let client = this.packetManager.client; let guild = client.store.get('guilds', data.guild_id); - let user = client.store.get('users', data.user.id); - if (guild && user) { - guild._removeMember(user); + if (guild) { + let member = guild.store.get('members', data.user.id); + if (member) { + guild._removeMember(member); + } } } diff --git a/src/client/websocket/packets/handlers/GuildMemberUpdate.js b/src/client/websocket/packets/handlers/GuildMemberUpdate.js index e54daaa8f..20455a216 100644 --- a/src/client/websocket/packets/handlers/GuildMemberUpdate.js +++ b/src/client/websocket/packets/handlers/GuildMemberUpdate.js @@ -21,10 +21,12 @@ class GuildMemberUpdateHandler extends AbstractHandler { let client = this.packetManager.client; let guild = client.store.get('guilds', data.guild_id); - let user = client.store.get('users', data.user.id); if (guild) { - guild._updateMember(user, data); + let member = guild.store.get('members', data.user.id); + if (member) { + guild._updateMember(member, data); + } } } diff --git a/src/structures/Guild.js b/src/structures/Guild.js index f230ad86b..f61b3c259 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -1,6 +1,7 @@ 'use strict'; const User = require('./User'); +const Member = require('./Member'); const GuildDataStore = require('./datastore/GuildDataStore'); const TextChannel = require('./TextChannel'); const VoiceChannel = require('./VoiceChannel'); @@ -25,30 +26,25 @@ class Guild { } _addMember(guildUser) { - let user = this.client.store.NewUser(guildUser.user); - this.store.memberData[user.id] = { - deaf: guildUser.deaf, - mute: guildUser.mute, - joinDate: new Date(guildUser.joined_at), - roles: guildUser.roles, - }; + guildUser.user = this.client.store.NewUser(guildUser.user); + let member = this.store.add('members', new Member(this, guildUser)); if (this.client.ws.emittedReady) { - this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, user); + this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, member); } } - _updateMember(currentUser, newData) { - let oldRoles = this.store.memberData[currentUser.id].roles; - this.store.currentUser[currentUser.id].roles = newData.roles; + _updateMember(member, data) { + let oldRoles = member.roles; + member.roles = data.roles; if (this.client.ws.emittedReady) { - this.client.emit(Constants.Events.GUILD_MEMBER_ROLES_UPDATE, this, oldRoles, this.store.memberData[currentUser.id].roles); + this.client.emit(Constants.Events.GUILD_MEMBER_ROLES_UPDATE, this, oldRoles, member.roles); } } - _removeMember(guildUser) { - this.store.remove('members', guildUser); + _removeMember(guildMember) { + this.store.remove('members', guildMember); if (this.client.ws.emittedReady) { - this.client.emit(Constants.Events.GUILD_MEMBER_REMOVE, this, guildUser); + this.client.emit(Constants.Events.GUILD_MEMBER_REMOVE, this, guildMember); } } diff --git a/src/structures/Member.js b/src/structures/Member.js new file mode 100644 index 000000000..2a39e5481 --- /dev/null +++ b/src/structures/Member.js @@ -0,0 +1,42 @@ +'use strict'; + +class Member { + constructor(guild, data) { + this.client = guild.client; + this.guild = guild; + this._user = {}; + if (data) { + this.setup(data); + } + } + + setup(data) { + this._user = data.user; + this.deaf = data.deaf; + this.mute = data.mute; + this.joinDate = new Date(data.joined_at); + this.roles = data.roles; + } + + get username() { + return this._user.username; + } + + get id() { + return this._user.id; + } + + get discriminator() { + return this._user.discriminator; + } + + get avatar() { + return this._user.avatar; + } + + get bot() { + return this._user.bot; + } +} + +module.exports = Member; diff --git a/src/structures/datastore/GuildDataStore.js b/src/structures/datastore/GuildDataStore.js index fc541b33a..68f8fa5d7 100644 --- a/src/structures/datastore/GuildDataStore.js +++ b/src/structures/datastore/GuildDataStore.js @@ -6,8 +6,6 @@ class GuildDataStore extends AbstractDataStore{ constructor() { super(); - this.memberData = {}; - this.register('members'); this.register('channels'); }