Added promises and logout

This commit is contained in:
hydrabolt
2015-08-25 11:49:59 +01:00
parent f2e3be0bad
commit 15f995c07c
3 changed files with 181 additions and 136 deletions

View File

@@ -107,34 +107,50 @@ var Client = (function () {
value: function login() { value: function login() {
var email = arguments.length <= 0 || arguments[0] === undefined ? "foo@bar.com" : arguments[0]; var email = arguments.length <= 0 || arguments[0] === undefined ? "foo@bar.com" : arguments[0];
var password = arguments.length <= 1 || arguments[1] === undefined ? "pass1234" : arguments[1]; var password = arguments.length <= 1 || arguments[1] === undefined ? "pass1234" : arguments[1];
var callback = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2];
var self = this; var self = this;
this.createws(); this.createws();
return new Promise(function (resolve, reject) {
if (self.state === 0 || self.state === 4) {
if (this.state === 0 || this.state === 4) { self.state = 1; //set the state to logging in
this.state = 1; //set the state to logging in request.post(Endpoints.LOGIN).send({
email: email,
password: password
}).end(function (err, res) {
request.post(Endpoints.LOGIN).send({ if (err) {
email: email, self.state = 4; //set state to disconnected
password: password self.trigger("disconnected");
}).end(function (err, res) { self.websocket.close();
reject(err);
} else {
self.state = 2; //set state to logged in (not yet ready)
self.token = res.body.token; //set our token
self.trySendConnData();
resolve(self.token);
}
});
} else {
reject(new Error("Client already logging in or ready"));
}
});
}
}, {
key: "logout",
value: function logout() {
if (err) { var self = this;
self.state = 4; //set state to disconnected
self.trigger("disconnected"); return new Promise(function (resolve, reject) {
self.websocket.close();
callback(err); request.post(Endpoints.LOGOUT).set("authorization", self.token).end(function (err, res) {
} else {
self.state = 2; //set state to logged in (not yet ready) if (err) reject(err);else resolve();
self.token = res.body.token; //set our token
self.trySendConnData();
callback(null, self.token);
}
}); });
} });
} }
//def createws //def createws

View File

@@ -42,11 +42,11 @@ class Client {
this.serverCache = []; this.serverCache = [];
this.readyTime = null; this.readyTime = null;
} }
get uptime(){ get uptime() {
return (this.readyTime ? Date.now() - this.readyTime : null); return (this.readyTime ? Date.now() - this.readyTime : null);
} }
get ready() { get ready() {
@@ -115,39 +115,64 @@ class Client {
} }
//def login //def login
login(email = "foo@bar.com", password = "pass1234", callback = function () { }) { login(email = "foo@bar.com", password = "pass1234") {
var self = this; var self = this;
this.createws(); this.createws();
return new Promise(function (resolve, reject) {
if (self.state === 0 || self.state === 4) {
self.state = 1; //set the state to logging in
request
.post(Endpoints.LOGIN)
.send({
email: email,
password: password
}).end(function (err, res) {
if (this.state === 0 || this.state === 4) { if (err) {
self.state = 4; //set state to disconnected
self.trigger("disconnected");
self.websocket.close();
reject(err);
} else {
self.state = 2; //set state to logged in (not yet ready)
self.token = res.body.token; //set our token
self.trySendConnData();
resolve(self.token);
}
this.state = 1; //set the state to logging in });
}else{
reject(new Error("Client already logging in or ready"));
}
});
}
logout(){
var self = this;
return new Promise(function(resolve, reject){
request request
.post(Endpoints.LOGIN) .post(Endpoints.LOGOUT)
.send({ .set( "authorization", self.token )
email: email, .end(function(err, res){
password: password
}).end(function (err, res) { if(err)
reject(err);
if (err) { else
self.state = 4; //set state to disconnected resolve();
self.trigger("disconnected");
self.websocket.close();
callback(err);
} else {
self.state = 2; //set state to logged in (not yet ready)
self.token = res.body.token; //set our token
self.trySendConnData();
callback(null, self.token);
}
}); });
} });
} }
//def createws //def createws
@@ -274,148 +299,148 @@ class Client {
break; break;
case "GUILD_DELETE": case "GUILD_DELETE":
var server = self.getServer("id", data.id); var server = self.getServer("id", data.id);
if(server){ if (server) {
self.serverCache.splice(self.serverCache.indexOf(server), 1); self.serverCache.splice(self.serverCache.indexOf(server), 1);
self.trigger("serverDelete", server); self.trigger("serverDelete", server);
} }
break; break;
case "CHANNEL_DELETE": case "CHANNEL_DELETE":
var channel = self.getChannel("id", data.id); var channel = self.getChannel("id", data.id);
if(channel){ if (channel) {
var server = channel.server; var server = channel.server;
if(server){ if (server) {
server.channels.splice( server.channels.indexOf(channel), 1 ); server.channels.splice(server.channels.indexOf(channel), 1);
} }
self.trigger("channelDelete", channel); self.trigger("channelDelete", channel);
self.serverCache.splice( self.serverCache.indexOf(channel), 1 ); self.serverCache.splice(self.serverCache.indexOf(channel), 1);
} }
break; break;
case "GUILD_CREATE": case "GUILD_CREATE":
var server = self.getServer("id", data.id); var server = self.getServer("id", data.id);
if(!server){ if (!server) {
//if server doesn't already exist because duh //if server doesn't already exist because duh
var serv = self.addServer(data); var serv = self.addServer(data);
for (var channel of data.channels) { for (var channel of data.channels) {
serv.channels.push(self.addChannel(channel, serv.id)); serv.channels.push(self.addChannel(channel, serv.id));
} }
} }
self.trigger("serverCreate", server); self.trigger("serverCreate", server);
break; break;
case "CHANNEL_CREATE": case "CHANNEL_CREATE":
var channel = self.getChannel("id", data.id); var channel = self.getChannel("id", data.id);
if(!channel){ if (!channel) {
var chann = self.addChannel( data, data.guild_id ); var chann = self.addChannel(data, data.guild_id);
var srv = self.getServer( "id", data.guild_id ); var srv = self.getServer("id", data.guild_id);
if(srv){ if (srv) {
srv.channels.push( chann ); srv.channels.push(chann);
} }
self.trigger("channelCreate", chann); self.trigger("channelCreate", chann);
} }
break; break;
case "GUILD_MEMBER_ADD": case "GUILD_MEMBER_ADD":
var server = self.getServer("id", data.guild_id); var server = self.getServer("id", data.guild_id);
if(server){ if (server) {
var user = self.addUser(data.user); //if for whatever reason it doesn't exist.. var user = self.addUser(data.user); //if for whatever reason it doesn't exist..
if( !~server.members.indexOf(user) ){ if (!~server.members.indexOf(user)) {
server.members.push(user); server.members.push(user);
} }
self.trigger("serverNewMember", user); self.trigger("serverNewMember", user);
} }
break; break;
case "GUILD_MEMBER_REMOVE": case "GUILD_MEMBER_REMOVE":
var server = self.getServer("id", data.guild_id); var server = self.getServer("id", data.guild_id);
if(server){ if (server) {
var user = self.addUser(data.user); //if for whatever reason it doesn't exist.. var user = self.addUser(data.user); //if for whatever reason it doesn't exist..
if( ~server.members.indexOf(user) ){ if (~server.members.indexOf(user)) {
server.members.splice( server.members.indexOf(user), 1 ); server.members.splice(server.members.indexOf(user), 1);
} }
self.trigger("serverRemoveMember", user); self.trigger("serverRemoveMember", user);
} }
break; break;
case "USER_UPDATE": case "USER_UPDATE":
if(self.user && data.id === self.user.id){ if (self.user && data.id === self.user.id) {
var newUser = new User(data); //not actually adding to the cache var newUser = new User(data); //not actually adding to the cache
self.trigger("userUpdate", newUser, self.user); self.trigger("userUpdate", newUser, self.user);
if( ~self.userCache.indexOf(self.user) ){ if (~self.userCache.indexOf(self.user)) {
self.userCache[self.userCache.indexOf(self.user)] = newUser; self.userCache[self.userCache.indexOf(self.user)] = newUser;
} }
self.user = newUser; self.user = newUser;
} }
break; break;
case "PRESENCE_UPDATE": case "PRESENCE_UPDATE":
var userInCache = self.getUser("id", data.user.id); var userInCache = self.getUser("id", data.user.id);
if(userInCache){ if (userInCache) {
//user exists //user exists
var presenceUser = new User(data.user); var presenceUser = new User(data.user);
if(presenceUser.equalsStrict(userInCache)){ if (presenceUser.equalsStrict(userInCache)) {
//they're exactly the same, an actual presence update //they're exactly the same, an actual presence update
self.trigger("presence", { self.trigger("presence", {
user : userInCache, user: userInCache,
status : data.status, status: data.status,
server : self.getServer("id", data.guild_id), server: self.getServer("id", data.guild_id),
gameId : data.game_id gameId: data.game_id
}); });
}else{ } else {
//one of their details changed. //one of their details changed.
self.trigger("userUpdate", userInCache, presenceUser); self.trigger("userUpdate", userInCache, presenceUser);
self.userCache[self.userCache.indexOf(userInCache)] = presenceUser; self.userCache[self.userCache.indexOf(userInCache)] = presenceUser;
} }
} }
break; break;
default: default:

View File

@@ -2,36 +2,40 @@ var Discord = require("../lib/index.js");
var Auth = require("./auth.json"); var Auth = require("./auth.json");
var mybot = new Discord.Client(); var mybot = new Discord.Client();
mybot.login(Auth.email, Auth.password, function(err, res){ mybot.login(Auth.email+"a", Auth.password)
});
mybot.on("ready", function(){ .then(function (token) {
console.log("wooo!");
}).catch(function (error) {
console.log(error);
});
mybot.on("ready", function () {
console.log("Ready!"); console.log("Ready!");
}) })
mybot.on("message", function(msg){ mybot.on("message", function (msg) {
console.log("Another message by "+msg.author.username+"... now I have "+mybot.messages.length + " I have been online for " + mybot.uptime); console.log("Another message by " + msg.author.username + "... now I have " + mybot.messages.length + " I have been online for " + mybot.uptime);
}) })
mybot.on("messageDelete", function(channel, message){ mybot.on("messageDelete", function (channel, message) {
console.log("MESSAGE WAS DELETED BY " + ( message ? message.author.username : channel.name )); console.log("MESSAGE WAS DELETED BY " + (message ? message.author.username : channel.name));
}); });
mybot.on("messageUpdate", function(message, formerMessage){ mybot.on("messageUpdate", function (message, formerMessage) {
console.log(message.author.username, "changed", formerMessage.content, "to", message.content); console.log(message.author.username, "changed", formerMessage.content, "to", message.content);
}); });
mybot.on("serverNewMember", function(user){ mybot.on("serverNewMember", function (user) {
console.log("new user", user.username); console.log("new user", user.username);
}); });
mybot.on("serverRemoveMember", function(user){ mybot.on("serverRemoveMember", function (user) {
console.log("left user", user.username); console.log("left user", user.username);
}); });
mybot.on("userUpdate", function(oldUser, newUser){ mybot.on("userUpdate", function (oldUser, newUser) {
console.log(oldUser, "vs", newUser); console.log(oldUser, "vs", newUser);
}); });