Added leave server and other stuff

This commit is contained in:
hydrabolt
2015-11-01 13:34:59 +00:00
parent 0fe42c61da
commit 1efc2eb505
14 changed files with 145 additions and 14 deletions

View File

@@ -226,6 +226,21 @@ class Client extends EventEmitter {
})
});
}
leaveServer(server, callback=function(err){}){
var self = this;
return new Promise((resolve, reject) => {
self.internal.leaveServer(server)
.then(() => {
callback(); resolve();
})
.catch(e => {
callback(e); reject(e);
})
});
}
}
module.exports = Client;

View File

@@ -65,6 +65,36 @@ class InternalClient {
});
}
//def leaveServer
leaveServer(srv) {
var self = this;
return new Promise((resolve, reject) => {
var server = self.resolver.resolveServer(srv);
if(server){
request
.del(Endpoints.SERVER(server.id))
.set("authorization", self.token)
.end((err, res) => {
if(err){
reject(new Error(err.response.text));
}else{
// remove channels of server then the server
for(var chan of server.channels){
server.channels.remove(chan);
}
// remove server
self.servers.remove(server);
resolve();
}
});
}else{
reject(new Error("server did not resolve"));
}
});
}
// def login
login(email, password) {
var self = this;

View File

@@ -15,6 +15,21 @@ class Resolver {
constructor(internal) {
this.internal = internal;
}
resolveServer(resource){
if(resource instanceof Server){
return resource;
}else if(resource instanceof ServerChannel){
return resource.server;
}else if(resource instanceof String || typeof resource === "string"){
return this.internal.servers.get("id", resource);
}else if(resource instanceof Message){
if(resource.channel instanceof TextChannel){
return resource.server;
}
}
return null;
}
resolveFile(resource) {
if (typeof resource === "string" || resource instanceof String) {

View File

@@ -41,10 +41,10 @@ class Server extends Equality {
data.channels.forEach( (dataChannel) => {
if(dataChannel.type === "text"){
var channel = client.internal.channels.add(new TextChannel(dataChannel, client));
var channel = client.internal.channels.add(new TextChannel(dataChannel, client, this));
this.channels.add(channel);
}else{
var channel = client.internal.channels.add(new VoiceChannel(dataChannel, client));
var channel = client.internal.channels.add(new VoiceChannel(dataChannel, client, this));
this.channels.add(channel);
}
} );

View File

@@ -5,11 +5,12 @@ var Cache = require("../Util/Cache.js");
var PermissionOverwrite = require("./PermissionOverwrite.js");
class ServerChannel extends Channel{
constructor(data, client){
constructor(data, client, server){
super(data, client);
this.name = data.name;
this.type = data.type;
this.permissionOverwrites = new Cache();
this.server = server;
data.permission_overwrites.forEach((permission) => {
this.permissionOverwrites.add( new PermissionOverwrite(permission) );
});

View File

@@ -4,8 +4,8 @@ var ServerChannel = require("./ServerChannel.js");
var Cache = require("../Util/Cache.js");
class TextChannel extends ServerChannel{
constructor(data, client){
super(data, client);
constructor(data, client, server){
super(data, client, server);
this.name = data.name;
this.topic = data.topic;

View File

@@ -3,8 +3,8 @@
var ServerChannel = require("./ServerChannel.js");
class VoiceChannel extends ServerChannel{
constructor(data, client){
super(data, client);
constructor(data, client, server){
super(data, client, server);
}
}