Member role *should* be used properly across the API

The Client now SHOULD add roles properly to members, as they leave it up
to the Server class.
This commit is contained in:
hydrabolt
2015-10-03 20:18:49 +01:00
parent a10f19a7a7
commit 4e117b85d9
9 changed files with 360 additions and 28 deletions

View File

@@ -938,12 +938,8 @@ class Client {
if (server) {
var user = self.addUser(data.user); //if for whatever reason it doesn't exist..
if (!~server.members.indexOf(user)) {
server.members.push(user);
}
self.trigger("serverNewMember", user, server);
self.trigger("serverNewMember", server.addMember(user, data.roles), server);
}
break;
@@ -956,10 +952,8 @@ class Client {
var user = self.addUser(data.user); //if for whatever reason it doesn't exist..
if (~server.members.indexOf(user)) {
server.members.splice(server.members.indexOf(user), 1);
}
server.removeMember("id", user.id);
self.trigger("serverRemoveMember", user, server);
}

View File

@@ -2,13 +2,22 @@ var User = require("./user.js");
class Member extends User{
constructor(user, server){
constructor(user, server, roles){
super(user); // should work, we are basically creating a Member that has the same properties as user and a few more
this.server = server;
this.rawRoles = roles;
}
get roles(){
return [];
var ufRoles = [];
for(var rawRole of this.rawRoles){
ufRoles.push( this.server.getRole(rawRole) );
}
return ufRoles;
}
}

View File

@@ -12,7 +12,7 @@ class Message{
this.editedTimestamp = data.edited_timestamp;
this.content = data.content.trim();
this.channel = channel;
this.author = author;
this.author = this.channel.server.getMember("id", author.id);
this.attachments = data.attachments;
}

View File

@@ -33,7 +33,7 @@ class Server {
// it will be identical (unless an async change occurred)
// to the client's cache.
if(member.user)
this.members.push(client.addUser(member.user));
this.addMember(client.addUser(member.user), member.roles);
}
}
@@ -68,6 +68,17 @@ class Server {
}
// get/set
getRole(id){
for (var role of this.roles) {
if (role.id === id) {
return role;
}
}
return null;
}
getChannel(key, value) {
for (var channel of this.channels) {
if (channel[key] === value) {
@@ -88,6 +99,17 @@ class Server {
return null;
}
removeMember(key, value){
for (var member of this.members) {
if (member[key] === value) {
this.members.splice(key, 1);
return member;
}
}
return false;
}
addChannel(chann) {
if (!this.getChannel("id", chann.id)) {
this.channels.push(chann);
@@ -95,9 +117,9 @@ class Server {
return chann;
}
addMember(user){
addMember(user, roles){
if (!this.getMember("id", user.id)){
var mem = new Member(user, this);
var mem = new Member(user, this, roles);
this.members.push(mem);
}
return mem;