Fixed server update listener

This commit is contained in:
hydrabolt
2015-11-01 14:09:00 +00:00
parent 5adcb5b8eb
commit 7175218ecf
14 changed files with 129 additions and 12 deletions

View File

@@ -561,7 +561,31 @@ class InternalClient {
client.emit("warn", "server was deleted but it was not in the cache");
}
break;
case PacketType.SERVER_UPDATE:
var server = self.servers.get("id", data.id);
if(server && !server.inasync){
// server exists
server.inasync = true;
data.members = data.members || [];
data.channels = data.channels || [];
var newserver = new Server(data, self);
newserver.members = server.members;
newserver.memberMap = server.memberMap;
newserver.channels = server.channels;
if(newserver.equalsStrict(server)){
// already the same don't do anything
client.emit("debug", "received server update but server already updated");
}else{
self.servers.update(server, newserver);
client.emit("serverUpdated", server, newserver);
}
server.inasync = false;
}else if(!server){
client.emit("warn", "server was updated but it was not in the cache");
self.servers.add( new Server(data, self) );
client.emit("serverCreated", server);
}
break;
}
}
}

View File

@@ -65,7 +65,9 @@ var PacketType = {
MESSAGE_CREATE : "MESSAGE_CREATE",
MESSAGE_UPDATE : "MESSAGE_UPDATE",
MESSAGE_DELETE : "MESSAGE_DELETE",
SERVER_CREATE : "GUILD_CREATE"
SERVER_CREATE : "GUILD_CREATE",
SERVER_DELETE : "GUILD_DELETE",
SERVER_UPDATE : "GUILD_UPDATE",
}
exports.API_ENDPOINT = API;

View File

@@ -7,7 +7,6 @@ class Message{
constructor(data, channel, client){
this.channel = channel;
this.client = client;
console.log("update", data);
this.nonce = data.nonce;
this.attachments = data.attachments;
this.tts = data.tts;

View File

@@ -8,6 +8,10 @@ var TextChannel = require("./TextChannel.js");
var VoiceChannel = require("./VoiceChannel.js");
var Role = require("./Role.js");
var strictKeys = [
"region", "ownerID", "name", "id", "icon", "afkTimeout", "afkChannelID"
];
class Server extends Equality {
constructor(data, client) {
@@ -78,6 +82,19 @@ class Server extends Equality {
return this.name;
}
equalsStrict(obj){
if(obj instanceof Server){
for(var key of strictKeys){
if(obj[key] !== this[key]){
return false;
}
}
}else{
return false;
}
return true;
}
}
module.exports = Server;

View File

@@ -48,8 +48,9 @@ class Cache extends Array {
}
update(old, data) {
var index = this.get(this.discrim, old);
if (~index) {
var item = this.get(this.discrim, old[this.discrim]);
if (item) {
var index = this.indexOf(item);
this[index] = data;
return this[index];
} else {
@@ -62,7 +63,7 @@ class Cache extends Array {
if (~index) {
this.splice(index, 1);
} else {
var item = this.get(this.discrim, data.id);
var item = this.get(this.discrim, data[this.discrim]);
if (item) {
this.splice(this.indexOf(item), 1);
}

View File

@@ -24,6 +24,11 @@ class Equality{
}
return false;
}
equalsStrict(object){
// override per class type
return;
}
}
module.exports = Equality;

View File

@@ -4,6 +4,7 @@ module.exports = {
var a = new module.exports.Client();
a.on("debug", (m) => console.log("[debug]",m));
a.on("warn", (m) => console.log("[warn]", m));
a.on("message", m => {
if(m.content === "$$$")
@@ -12,5 +13,8 @@ a.on("message", m => {
a.reply(m, srv);
});
});
a.on("serverUpdated", (oldsrv, newsrv) => {
console.log(oldsrv.name, "v", newsrv.name);
});
a.login(process.env["discordEmail"], process.env["discordPass"]).catch((e)=>console.log(e));