Create Member class, stop storing member data separately and merge into one class with a User

This commit is contained in:
hydrabolt
2016-04-16 23:24:52 +01:00
parent ccffe09bca
commit 30f5e2943a
5 changed files with 62 additions and 22 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}

42
src/structures/Member.js Normal file
View File

@@ -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;

View File

@@ -6,8 +6,6 @@ class GuildDataStore extends AbstractDataStore{
constructor() {
super();
this.memberData = {};
this.register('members');
this.register('channels');
}