diff --git a/lib/Client/Client.js b/lib/Client/Client.js index eb9e09c42..3decf989a 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -509,6 +509,49 @@ var Client = (function (_EventEmitter) { }); }; + //def setStatus + + Client.prototype.setStatus = function setStatus(idleStatus, gameID) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err) {} : arguments[2]; + + var self = this; + return new Promise(function (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(function () { + callback(); + resolve(); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + + //def sendTyping + + Client.prototype.sendTyping = function sendTyping(channel) { + var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err) {} : arguments[1]; + + var self = this; + return new Promise(function (resolve, reject) { + + self.internal.sendTyping(channel).then(function () { + callback(); + resolve(); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + // def setTopic Client.prototype.setTopic = function setTopic(channel, topic) { @@ -624,9 +667,19 @@ var Client = (function (_EventEmitter) { get: function get() { return this.internal.voiceConnection; } + }, { + key: "readyTime", + get: function get() { + return this.internal.readyTime; + } + }, { + key: "uptime", + get: function get() { + return this.internal.uptime; + } }]); return Client; })(EventEmitter); -module.exports = Client; \ No newline at end of file +module.exports = Client; diff --git a/lib/Client/ConnectionState.js b/lib/Client/ConnectionState.js index 86fb95261..e0585d77e 100644 --- a/lib/Client/ConnectionState.js +++ b/lib/Client/ConnectionState.js @@ -4,4 +4,4 @@ exports.IDLE = 0; exports.LOGGING_IN = 1; exports.LOGGED_IN = 2; exports.READY = 3; -exports.DISCONNECTED = 4; \ No newline at end of file +exports.DISCONNECTED = 4; diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index e33f14203..d002b2758 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -1,5 +1,7 @@ "use strict"; +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var EventEmitter = require("events"); @@ -46,6 +48,7 @@ var InternalClient = (function () { this.private_channels = new Cache(); this.voiceConnection = null; this.resolver = new Resolver(this); + this.readyTime = null; } //def leaveVoiceChannel @@ -856,6 +859,54 @@ var InternalClient = (function () { }); }; + //def setStatus + + InternalClient.prototype.setStatus = function setStatus(idleStatus, gameID) { + var self = this; + return new Promise(function (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 + + InternalClient.prototype.sendTyping = function sendTyping(channel) { + var self = this; + return new Promise(function (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(function (err, res) { + if (err) { + reject(err); + } else { + resolve(); + } + }); + } + }); + }; + //def setTopic InternalClient.prototype.setTopic = function setTopic(chann) { @@ -870,7 +921,7 @@ var InternalClient = (function () { request.patch(Endpoints.CHANNEL(channel.id)).set("authorization", self.token).send({ name: channel.name, - position: 0, + position: channel.position, topic: topic }).end(function (err, res) { if (err) { @@ -898,7 +949,7 @@ var InternalClient = (function () { request.patch(Endpoints.CHANNEL(channel.id)).set("authorization", self.token).send({ name: name, - position: 0, + position: channel.position, topic: channel.topic }).end(function (err, res) { if (err) { @@ -927,7 +978,7 @@ var InternalClient = (function () { request.patch(Endpoints.CHANNEL(channel.id)).set("authorization", self.token).send({ name: name, - position: 0, + position: channel.position, topic: topic }).end(function (err, res) { if (err) { @@ -985,6 +1036,10 @@ var InternalClient = (function () { client.emit("disconnected"); }; + this.websocket.onerror = function (e) { + console.log(e); + }; + this.websocket.onmessage = function (e) { if (e.type === "Binary") { @@ -1023,6 +1078,8 @@ var InternalClient = (function () { 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: @@ -1368,7 +1425,14 @@ var InternalClient = (function () { }; }; + _createClass(InternalClient, [{ + key: "uptime", + get: function get() { + return this.readyTime ? Date.now() - this.readyTime : null; + } + }]); + return InternalClient; })(); -module.exports = InternalClient; \ No newline at end of file +module.exports = InternalClient; diff --git a/lib/Client/Resolver/Resolver.js b/lib/Client/Resolver/Resolver.js index a0a6e55ca..5463bb5ad 100644 --- a/lib/Client/Resolver/Resolver.js +++ b/lib/Client/Resolver/Resolver.js @@ -182,4 +182,4 @@ var Resolver = (function () { return Resolver; })(); -module.exports = Resolver; \ No newline at end of file +module.exports = Resolver; diff --git a/lib/Constants.js b/lib/Constants.js index 9b1c9b37a..1b341a0b6 100644 --- a/lib/Constants.js +++ b/lib/Constants.js @@ -124,4 +124,4 @@ var PacketType = { exports.API_ENDPOINT = API; exports.Endpoints = Endpoints; exports.PacketType = PacketType; -exports.Permissions = Permissions; \ No newline at end of file +exports.Permissions = Permissions; diff --git a/lib/Structures/Channel.js b/lib/Structures/Channel.js index f8a141584..c348738bb 100644 --- a/lib/Structures/Channel.js +++ b/lib/Structures/Channel.js @@ -22,4 +22,4 @@ var Channel = (function (_Equality) { return Channel; })(Equality); -module.exports = Channel; \ No newline at end of file +module.exports = Channel; diff --git a/lib/Structures/ChannelPermissions.js b/lib/Structures/ChannelPermissions.js index fe7a039fd..0c1b29e93 100644 --- a/lib/Structures/ChannelPermissions.js +++ b/lib/Structures/ChannelPermissions.js @@ -72,4 +72,4 @@ var ChannelPermissions = (function () { return ChannelPermissions; })(); -module.exports = ChannelPermissions; \ No newline at end of file +module.exports = ChannelPermissions; diff --git a/lib/Structures/Message.js b/lib/Structures/Message.js index 86d5a59bd..37d04b4de 100644 --- a/lib/Structures/Message.js +++ b/lib/Structures/Message.js @@ -43,4 +43,4 @@ var Message = (function () { return Message; })(); -module.exports = Message; \ No newline at end of file +module.exports = Message; diff --git a/lib/Structures/PMChannel.js b/lib/Structures/PMChannel.js index dc28d1c66..bd92d7541 100644 --- a/lib/Structures/PMChannel.js +++ b/lib/Structures/PMChannel.js @@ -43,4 +43,4 @@ var PMChannel = (function (_Equality) { return PMChannel; })(Equality); -module.exports = PMChannel; \ No newline at end of file +module.exports = PMChannel; diff --git a/lib/Structures/PermissionOverwrite.js b/lib/Structures/PermissionOverwrite.js index f20d61b7a..99f82bc0b 100644 --- a/lib/Structures/PermissionOverwrite.js +++ b/lib/Structures/PermissionOverwrite.js @@ -83,4 +83,4 @@ var PermissionOverwrite = (function () { return PermissionOverwrite; })(); -module.exports = PermissionOverwrite; \ No newline at end of file +module.exports = PermissionOverwrite; diff --git a/lib/Structures/Role.js b/lib/Structures/Role.js index 048c183cb..21e0f2b88 100644 --- a/lib/Structures/Role.js +++ b/lib/Structures/Role.js @@ -136,4 +136,4 @@ var Role = (function () { return Role; })(); -module.exports = Role; \ No newline at end of file +module.exports = Role; diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index 7d7320e70..1ef9f1cac 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -166,4 +166,4 @@ var Server = (function (_Equality) { return Server; })(Equality); -module.exports = Server; \ No newline at end of file +module.exports = Server; diff --git a/lib/Structures/ServerChannel.js b/lib/Structures/ServerChannel.js index 215c31232..aa6b87751 100644 --- a/lib/Structures/ServerChannel.js +++ b/lib/Structures/ServerChannel.js @@ -20,6 +20,7 @@ var ServerChannel = (function (_Channel) { _Channel.call(this, 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(function (permission) { @@ -104,4 +105,4 @@ var ServerChannel = (function (_Channel) { return ServerChannel; })(Channel); -module.exports = ServerChannel; \ No newline at end of file +module.exports = ServerChannel; diff --git a/lib/Structures/TextChannel.js b/lib/Structures/TextChannel.js index 897a1b04c..a4e617a7d 100644 --- a/lib/Structures/TextChannel.js +++ b/lib/Structures/TextChannel.js @@ -36,4 +36,4 @@ var TextChannel = (function (_ServerChannel) { return TextChannel; })(ServerChannel); -module.exports = TextChannel; \ No newline at end of file +module.exports = TextChannel; diff --git a/lib/Structures/User.js b/lib/Structures/User.js index 3815089ee..12260a051 100644 --- a/lib/Structures/User.js +++ b/lib/Structures/User.js @@ -55,4 +55,4 @@ var User = (function (_Equality) { return User; })(Equality); -module.exports = User; \ No newline at end of file +module.exports = User; diff --git a/lib/Structures/VoiceChannel.js b/lib/Structures/VoiceChannel.js index 333786b58..b61a9082e 100644 --- a/lib/Structures/VoiceChannel.js +++ b/lib/Structures/VoiceChannel.js @@ -18,4 +18,4 @@ var VoiceChannel = (function (_ServerChannel) { return VoiceChannel; })(ServerChannel); -module.exports = VoiceChannel; \ No newline at end of file +module.exports = VoiceChannel; diff --git a/lib/Util/Cache.js b/lib/Util/Cache.js index fbe4c5853..b08c517f4 100644 --- a/lib/Util/Cache.js +++ b/lib/Util/Cache.js @@ -95,4 +95,4 @@ var Cache = (function (_Array) { return Cache; })(Array); -module.exports = Cache; \ No newline at end of file +module.exports = Cache; diff --git a/lib/Util/Equality.js b/lib/Util/Equality.js index 3288d530a..dd5763f74 100644 --- a/lib/Util/Equality.js +++ b/lib/Util/Equality.js @@ -42,4 +42,4 @@ var Equality = (function () { return Equality; })(); -module.exports = Equality; \ No newline at end of file +module.exports = Equality; diff --git a/lib/Voice/AudioEncoder.js b/lib/Voice/AudioEncoder.js index 517a7cf68..f178f9e2b 100644 --- a/lib/Voice/AudioEncoder.js +++ b/lib/Voice/AudioEncoder.js @@ -126,4 +126,4 @@ var AudioEncoder = (function () { return AudioEncoder; })(); -module.exports = AudioEncoder; \ No newline at end of file +module.exports = AudioEncoder; diff --git a/lib/Voice/StreamIntent.js b/lib/Voice/StreamIntent.js index 97953194c..aa6bb38c4 100644 --- a/lib/Voice/StreamIntent.js +++ b/lib/Voice/StreamIntent.js @@ -19,4 +19,4 @@ var StreamIntent = (function (_EventEmitter) { return StreamIntent; })(EventEmitter); -module.exports = StreamIntent; \ No newline at end of file +module.exports = StreamIntent; diff --git a/lib/Voice/VoiceConnection.js b/lib/Voice/VoiceConnection.js index 4dee53b15..f61b002f6 100644 --- a/lib/Voice/VoiceConnection.js +++ b/lib/Voice/VoiceConnection.js @@ -329,4 +329,4 @@ var VoiceConnection = (function (_EventEmitter) { return VoiceConnection; })(EventEmitter); -module.exports = VoiceConnection; \ No newline at end of file +module.exports = VoiceConnection; diff --git a/lib/Voice/VoicePacket.js b/lib/Voice/VoicePacket.js index 8fa32d5f6..46797646a 100644 --- a/lib/Voice/VoicePacket.js +++ b/lib/Voice/VoicePacket.js @@ -3,24 +3,24 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var VoicePacket = function VoicePacket(data, sequence, time, ssrc) { - _classCallCheck(this, VoicePacket); + _classCallCheck(this, VoicePacket); - var audioBuffer = data, - returnBuffer = new Buffer(audioBuffer.length + 12); + var audioBuffer = data, + returnBuffer = new Buffer(audioBuffer.length + 12); - returnBuffer.fill(0); - returnBuffer[0] = 0x80; - returnBuffer[1] = 0x78; + returnBuffer.fill(0); + returnBuffer[0] = 0x80; + returnBuffer[1] = 0x78; - returnBuffer.writeUIntBE(sequence, 2, 2); - returnBuffer.writeUIntBE(time, 4, 4); - returnBuffer.writeUIntBE(ssrc, 8, 4); + returnBuffer.writeUIntBE(sequence, 2, 2); + returnBuffer.writeUIntBE(time, 4, 4); + returnBuffer.writeUIntBE(ssrc, 8, 4); - for (var i = 0; i < audioBuffer.length; i++) { - returnBuffer[i + 12] = audioBuffer[i]; - } + for (var i = 0; i < audioBuffer.length; i++) { + returnBuffer[i + 12] = audioBuffer[i]; + } - return returnBuffer; + return returnBuffer; }; -module.exports = VoicePacket; \ No newline at end of file +module.exports = VoicePacket; diff --git a/lib/index.js b/lib/index.js index 31c91c19c..b122e469d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -14,4 +14,4 @@ module.exports = { TextChannel: require("./Structures/TextChannel"), User: require("./Structures/User"), VoiceChannel: require("./Structures/VoiceChannel") -}; \ No newline at end of file +};