diff --git a/src/Client/Client.js b/src/Client/Client.js index 577bf1aa2..dad38a484 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -29,11 +29,19 @@ class Client extends EventEmitter { get privateChannels(){ return this.internal.private_channels; } - + get voiceConnection(){ return this.internal.voiceConnection; } + get readyTime(){ + return this.internal.readyTime; + } + + get uptime(){ + return this.internal.uptime; + } + // def login login(email, password, cb = function (err, token) { }) { var self = this; @@ -497,6 +505,50 @@ class Client extends EventEmitter { }); } + //def setStatus + setStatus(idleStatus, gameID, callback=function(err){}){ + var self = this; + return new Promise((resolve, reject) => { + if (typeof gameID === "function") { + // gameID is the callback + callback = gameID; + } + else if (typeof idleStatus === "function") { + // idleStatus is the callback + callback = idleStatus; + } + + self.internal.setStatus(idleStatus, gameID) + .then(() => { + callback(); + resolve(); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }) + } + + //def sendTyping + sendTyping(channel, callback=function(err){}){ + var self = this; + return new Promise((resolve, reject) => { + + self.internal.sendTyping(channel) + .then(() => { + callback(); + resolve(); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }) + } + // def setTopic setTopic(channel, topic, callback=function(err){}){ var self = this; diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 0a3c57b2b..6b4996f50 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -42,6 +42,11 @@ class InternalClient { this.private_channels = new Cache(); this.voiceConnection = null; this.resolver = new Resolver(this); + this.readyTime = null; + } + + get uptime() { + return (this.readyTime ? Date.now() - this.readyTime : null); } //def leaveVoiceChannel @@ -699,6 +704,7 @@ class InternalClient { }); } + // def deleteRole deleteRole(role) { var self = this; @@ -910,6 +916,57 @@ class InternalClient { }); } + //def setStatus + setStatus(idleStatus, gameID) { + var self = this; + return new Promise((resolve, reject) => { + + var packet = { + op: 3, + d: { + idle_since: null, + game_id: null + } + }; + + if (idleStatus) { + packet.d.idle_since = Date.now(); + } + if (typeof gameID === "number") { + packet.d.game_id = gameID; + } + + self.sendWS(packet); + + resolve(); + }); + } + + //def sendTyping + sendTyping(channel) { + var self = this; + return new Promise((resolve, reject) => { + + self.resolver.resolveChannel(channel).then(next).catch(reject); + + function next(channel) { + + request + .post(Endpoints.CHANNEL(channel.id) + "/typing") + .set("authorization", self.token) + .end((err, res) => { + if (err) { + reject(err); + } else { + resolve(); + } + }) + + } + + }); + } + //def setTopic setTopic(chann, topic = "") { var self = this; @@ -924,7 +981,7 @@ class InternalClient { .set("authorization", self.token) .send({ name: channel.name, - position: 0, + position: channel.position, topic: topic }) .end((err, res) => { @@ -940,6 +997,7 @@ class InternalClient { }); } + //def setChannelName setChannelName(chann, name = "discordjs_is_the_best") { var self = this; @@ -954,7 +1012,7 @@ class InternalClient { .set("authorization", self.token) .send({ name: name, - position: 0, + position: channel.position, topic: channel.topic }) .end((err, res) => { @@ -970,6 +1028,7 @@ class InternalClient { }); } + //def setChannelNameAndTopic setChannelNameAndTopic(chann, name = "discordjs_is_the_best", topic = "") { var self = this; @@ -984,7 +1043,7 @@ class InternalClient { .set("authorization", self.token) .send({ name: name, - position: 0, + position: channel.position, topic: topic }) .end((err, res) => { @@ -1046,6 +1105,10 @@ class InternalClient { client.emit("disconnected"); } + this.websocket.onerror = (e) => { + console.log(e); + } + this.websocket.onmessage = (e) => { if (e.type === "Binary") { @@ -1082,6 +1145,8 @@ class InternalClient { client.emit("ready"); client.emit("debug", `ready packet took ${Date.now() - startTime}ms to process`); client.emit("debug", `ready with ${self.servers.length} servers, ${self.channels.length} channels and ${self.users.length} users cached.`); + + self.readyTime = Date.now(); break; case PacketType.MESSAGE_CREATE: diff --git a/src/Structures/ServerChannel.js b/src/Structures/ServerChannel.js index d82bfed87..1ee1c73b9 100644 --- a/src/Structures/ServerChannel.js +++ b/src/Structures/ServerChannel.js @@ -10,6 +10,7 @@ class ServerChannel extends Channel{ super(data, client); this.name = data.name; this.type = data.type; + this.position = data.position; this.permissionOverwrites = new Cache(); this.server = server; data.permission_overwrites.forEach((permission) => {