From c342ca4116963cf9c85ed763ea94a0defcf465e6 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Wed, 18 Nov 2015 17:13:06 +0000 Subject: [PATCH] Added joinServer --- lib/Client/Client.js | 24 +++++++++++++++++ lib/Client/InternalClient.js | 7 +++-- lib/Client/Resolver/Resolver.js | 4 +-- lib/Structures/Server.js | 2 +- src/Client/Client.js | 21 +++++++++++++++ src/Client/InternalClient.js | 47 ++++++++++++++++----------------- src/Client/Resolver/Resolver.js | 4 +-- src/Structures/Server.js | 2 +- test/bot.1.js | 4 +++ 9 files changed, 81 insertions(+), 34 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index c01a4b58b..211692c9a 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -254,6 +254,25 @@ var Client = (function (_EventEmitter) { }); }; + // def joinServer + + Client.prototype.joinServer = function joinServer(invite) { + var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, srv) {} : arguments[1]; + + var self = this; + return new Promise(function (resolve, reject) { + self.internal.joinServer(invite).then(function (srv) { + callback(null, srv); + resolve(srv); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + + // def createServer + Client.prototype.createServer = function createServer(name) { var region = arguments.length <= 1 || arguments[1] === undefined ? "london" : arguments[1]; var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, srv) {} : arguments[2]; @@ -677,6 +696,11 @@ var Client = (function (_EventEmitter) { get: function get() { return this.internal.uptime; } + }, { + key: "user", + get: function get() { + return this.internal.user; + } }]); return Client; diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 12be1c6b5..eaa4a8fba 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -148,10 +148,9 @@ var InternalClient = (function () { var self = this; return new Promise(function (resolve, reject) { - invite = self.resolver.resolveInvite(invite); + invite = self.resolver.resolveInviteID(invite); if (invite) { - - request.post(Endpoints.INVITE(invite.id)).set("authorization", self.token).end(function (err, res) { + request.post(Endpoints.INVITE(invite)).set("authorization", self.token).end(function (err, res) { if (err) { reject(err); } else { @@ -1088,7 +1087,7 @@ var InternalClient = (function () { }; this.websocket.onerror = function (e) { - console.log(e); + client.emit("error", e); }; this.websocket.onmessage = function (e) { diff --git a/lib/Client/Resolver/Resolver.js b/lib/Client/Resolver/Resolver.js index 01f367490..562033b47 100644 --- a/lib/Client/Resolver/Resolver.js +++ b/lib/Client/Resolver/Resolver.js @@ -21,9 +21,9 @@ var Resolver = (function () { this.internal = internal; } - Resolver.prototype.resolveInvite = function resolveInvite(resource) { + Resolver.prototype.resolveInviteID = function resolveInviteID(resource) { if (resource instanceof Invite) { - return resource; + return resource.id; } else if (typeof resource == "string" || resource instanceof String) { if (resource.indexOf("http") === 0) { diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index 7d7320e70..99ee3971a 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -88,7 +88,7 @@ var Server = (function (_Equality) { var user = client.internal.users.get("id", presence.user.id); if (user) { user.status = presence.status; - user.gameId = presence.game_id; + user.gameID = presence.game_id; } } } diff --git a/src/Client/Client.js b/src/Client/Client.js index dad38a484..73a52ac48 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -41,6 +41,10 @@ class Client extends EventEmitter { get uptime(){ return this.internal.uptime; } + + get user() { + return this.internal.user; + } // def login login(email, password, cb = function (err, token) { }) { @@ -259,6 +263,23 @@ class Client extends EventEmitter { }); } + // def joinServer + joinServer(invite, callback = function (err, srv) { }) { + var self = this; + return new Promise((resolve, reject) => { + self.internal.joinServer(invite) + .then(srv => { + callback(null, srv); + resolve(srv); + }) + .catch(e => { + callback(e); + reject(e); + }); + }); + } + + // def createServer createServer(name, region="london", callback=function(err, srv){}){ var self = this; return new Promise((resolve, reject) => { diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 573224d53..2b030d6f8 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -143,17 +143,16 @@ class InternalClient { joinServer(invite) { var self = this; return new Promise((resolve, reject) => { - - invite = self.resolver.resolveInvite(invite); - if(invite){ - + + invite = self.resolver.resolveInviteID(invite); + if (invite) { request - .post(Endpoints.INVITE(invite.id)) + .post(Endpoints.INVITE(invite)) .set("authorization", self.token) .end((err, res) => { - if(err){ + if (err) { reject(err); - }else{ + } else { // valid server, wait until it is received via ws and cached var inter = setInterval(() => { if (self.servers.get("id", res.body.guild.id)) { @@ -163,11 +162,11 @@ class InternalClient { }, 20); } }); - - }else{ + + } else { reject(new Error("Not a valid invite")); } - + }); } @@ -1099,29 +1098,29 @@ class InternalClient { } //def ack - ack(msg){ + ack(msg) { var self = this; return new Promise((resolve, reject) => { - + msg = self.resolver.resolveMessage(msg); - - if(msg){ - - request - .post(Endpoints.CHANNEL_MESSAGE(msg.channel.id, msg.id)+"/ack") + + if (msg) { + + request + .post(Endpoints.CHANNEL_MESSAGE(msg.channel.id, msg.id) + "/ack") .set("authorization", self.token) .end((err) => { - if(err){ + if (err) { reject(err); - }else{ + } else { resolve(); } }); - - }else{ + + } else { reject(new Error("Message does not exist")); } - + }); } @@ -1165,7 +1164,7 @@ class InternalClient { } this.websocket.onerror = (e) => { - console.log(e); + client.emit("error", e); } this.websocket.onmessage = (e) => { @@ -1235,7 +1234,7 @@ class InternalClient { break; case PacketType.MESSAGE_UPDATE: // format https://discordapi.readthedocs.org/en/latest/reference/channels/messages.html#message-format - var channel = self.channels.get("id", data.channel_id)|| self.private_channels.get("id", data.channel_id); + var channel = self.channels.get("id", data.channel_id) || self.private_channels.get("id", data.channel_id); if (channel) { // potentially blank var msg = channel.messages.get("id", data.id); diff --git a/src/Client/Resolver/Resolver.js b/src/Client/Resolver/Resolver.js index 433b40b90..ea4adea75 100644 --- a/src/Client/Resolver/Resolver.js +++ b/src/Client/Resolver/Resolver.js @@ -17,9 +17,9 @@ class Resolver { this.internal = internal; } - resolveInvite(resource){ + resolveInviteID(resource){ if(resource instanceof Invite){ - return resource; + return resource.id; }else if (typeof resource == "string" || resource instanceof String) { if (resource.indexOf("http") === 0) { diff --git a/src/Structures/Server.js b/src/Structures/Server.js index f0b2e9ba1..86627da2d 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -64,7 +64,7 @@ class Server extends Equality { var user = client.internal.users.get("id", presence.user.id); if (user) { user.status = presence.status; - user.gameId = presence.game_id; + user.gameID = presence.game_id; } } } diff --git a/test/bot.1.js b/test/bot.1.js index 0453a29ac..4a2a43151 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -9,6 +9,10 @@ client.on("message", m => { if(m.content === "death"){ m.channel.delete(); } + if (m.content.startsWith("join: ")) { + var invite = m.content.split(" ")[1]; + client.joinServer(invite).then(console.log).catch(console.log); + } if (m.content === "&init") { for (var channel of m.channel.server.channels) { if (channel instanceof Discord.VoiceChannel) {