Updated sendMessage and reply, client is eventemitter

This commit is contained in:
hydrabolt
2015-10-27 20:35:23 +00:00
parent 30b96ef5fc
commit a18823c47f
7 changed files with 153 additions and 160 deletions

View File

@@ -5,6 +5,8 @@ var _createClass = (function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Endpoints = require("./Endpoints.js");
var User = require("./user.js");
var Server = require("./server.js");
@@ -16,6 +18,8 @@ var ServerPermissions = require("./ServerPermissions.js");
var gameMap = require("../ref/gameMap.json");
var zlib;
var EventEmitter = require('events');
//node modules
var request = require("superagent");
var WebSocket = require("ws");
@@ -25,7 +29,9 @@ var defaultOptions = {
queue: false
};
var Client = (function () {
var Client = (function (_EventEmitter) {
_inherits(Client, _EventEmitter);
function Client() {
var options = arguments.length <= 0 || arguments[0] === undefined ? defaultOptions : arguments[0];
var token = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];
@@ -37,6 +43,8 @@ var Client = (function () {
try connecting with it. If the token is incorrect, no
further efforts will be made to connect.
*/
_EventEmitter.call(this);
this.options = options;
this.options.compress = options.compress;
@@ -48,7 +56,6 @@ var Client = (function () {
this.token = token;
this.state = 0;
this.websocket = null;
this.events = {};
this.user = null;
this.alreadySentData = false;
this.serverCreateListener = {};
@@ -87,38 +94,17 @@ var Client = (function () {
//def debug
Client.prototype.debug = function debug(message) {
this.trigger("debug", message);
};
Client.prototype.on = function on(event, fn) {
this.events[event] = fn;
};
Client.prototype.off = function off(event) {
this.events[event] = null;
this.emit("debug", message);
};
Client.prototype.keepAlive = function keepAlive() {
this.debug("keep alive triggered");
this.debug("keep alive emitted");
this.sendPacket({
op: 1,
d: Date.now()
});
};
//def trigger
Client.prototype.trigger = function trigger(event) {
var args = [];
for (var arg in arguments) {
args.push(arguments[arg]);
}
var evt = this.events[event];
if (evt) {
evt.apply(this, args.slice(1));
}
};
//def login
Client.prototype.login = function login() {
@@ -143,7 +129,7 @@ var Client = (function () {
if (err) {
self.state = 4; //set state to disconnected
self.trigger("disconnected");
self.emit("disconnected");
if (self.websocket) {
self.websocket.close();
}
@@ -343,21 +329,21 @@ var Client = (function () {
});
};
Client.prototype.reply = function reply(destination, message, tts) {
Client.prototype.reply = function reply(destination, message, options) {
var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err, msg) {} : arguments[3];
var self = this;
return new Promise(function (response, reject) {
if (typeof tts === "function") {
// tts is a function, which means the developer wants this to be the callback
callback = tts;
tts = false;
if (typeof options === "function") {
// options is a function, which means the developer wants this to be the callback
callback = options;
options = false;
}
var user = destination.sender;
self.sendMessage(destination, message, tts, callback, user + ", ").then(response)["catch"](reject);
self.sendMessage(destination, message, options, callback, user + ", ").then(response)["catch"](reject);
});
};
@@ -654,7 +640,7 @@ var Client = (function () {
return prom;
};
Client.prototype.sendMessage = function sendMessage(destination, message, tts) {
Client.prototype.sendMessage = function sendMessage(destination, message, options) {
var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err, msg) {} : arguments[3];
var premessage = arguments.length <= 4 || arguments[4] === undefined ? "" : arguments[4];
@@ -662,10 +648,14 @@ var Client = (function () {
var prom = new Promise(function (resolve, reject) {
if (typeof tts === "function") {
// tts is a function, which means the developer wants this to be the callback
callback = tts;
tts = false;
if (typeof options === "function") {
// options is a function, which means the developer wants this to be the callback
callback = options;
options = { tts: false };
}
if (!options) {
options = { tts: false };
}
message = premessage + resolveMessage(message);
@@ -688,14 +678,14 @@ var Client = (function () {
action: "sendMessage",
content: message,
mentions: mentions,
tts: !!tts, //incase it's not a boolean
tts: options.tts, //incase it's not a boolean
then: mgood,
error: mbad
});
self.checkQueue(destination);
} else {
self._sendMessage(destination, message, tts, mentions).then(mgood)["catch"](mbad);
self._sendMessage(destination, message, options, mentions).then(mgood)["catch"](mbad);
}
}
@@ -1070,7 +1060,7 @@ var Client = (function () {
//close
this.websocket.onclose = function () {
self.trigger("disconnected");
self.emit("disconnected");
};
//message
@@ -1089,11 +1079,11 @@ var Client = (function () {
dat = JSON.parse(e.data);
data = dat.d;
} catch (err) {
self.trigger("error", err, e);
self.emit("error", err, e);
return;
}
self.trigger("raw", dat);
self.emit("raw", dat);
//valid message
switch (dat.t) {
@@ -1137,7 +1127,7 @@ var Client = (function () {
var pmc = self.addPMChannel(_pmc);
}
self.trigger("ready");
self.emit("ready");
self.readyTime = Date.now();
self.debug("cached " + self.serverCache.length + " servers, " + self.channelCache.length + " channels, " + self.pmChannelCache.length + " PMs and " + self.userCache.length + " users.");
self.state = 3;
@@ -1173,7 +1163,7 @@ var Client = (function () {
if (channel) {
var msg = channel.addMessage(new Message(data, channel, mentions, data.author));
self.trigger("message", msg);
self.emit("message", msg);
}
break;
@@ -1183,11 +1173,11 @@ var Client = (function () {
var channel = self.getChannel("id", data.channel_id);
var message = channel.getMessage("id", data.id);
if (message) {
self.trigger("messageDelete", channel, message);
self.emit("messageDelete", channel, message);
channel.messages.splice(channel.messages.indexOf(message), 1);
} else {
//don't have the cache of that message ;(
self.trigger("messageDelete", channel);
self.emit("messageDelete", channel);
}
break;
case "MESSAGE_UPDATE":
@@ -1232,7 +1222,7 @@ var Client = (function () {
var newMessage = new Message(info, channel, mentions, formerMessage.author);
self.trigger("messageUpdate", newMessage, formerMessage);
self.emit("messageUpdate", newMessage, formerMessage);
channel.messages[channel.messages.indexOf(formerMessage)] = newMessage;
}
@@ -1248,7 +1238,7 @@ var Client = (function () {
if (server) {
self.serverCache.splice(self.serverCache.indexOf(server), 1);
self.trigger("serverDelete", server);
self.emit("serverDelete", server);
}
break;
@@ -1258,7 +1248,7 @@ var Client = (function () {
var bannedUser = self.addUser(data.user);
var server = self.getServer("id", data.guild_id);
self.trigger("userBanned", bannedUser, server);
self.emit("userBanned", bannedUser, server);
case "CHANNEL_DELETE":
@@ -1273,7 +1263,7 @@ var Client = (function () {
server.channels.splice(server.channels.indexOf(channel), 1);
}
self.trigger("channelDelete", channel);
self.emit("channelDelete", channel);
self.serverCache.splice(self.serverCache.indexOf(channel), 1);
}
@@ -1304,7 +1294,7 @@ var Client = (function () {
self.serverCreateListener[data.id] = null;
}
self.trigger("serverCreate", server);
self.emit("serverCreate", server);
break;
@@ -1324,7 +1314,7 @@ var Client = (function () {
if (srv) {
srv.addChannel(chann);
}
self.trigger("channelCreate", chann);
self.emit("channelCreate", chann);
}
break;
@@ -1337,7 +1327,7 @@ var Client = (function () {
var user = self.addUser(data.user); //if for whatever reason it doesn't exist..
self.trigger("serverNewMember", server.addMember(user, data.roles), server);
self.emit("serverNewMember", server.addMember(user, data.roles), server);
}
break;
@@ -1352,7 +1342,7 @@ var Client = (function () {
server.removeMember("id", user.id);
self.trigger("serverRemoveMember", user, server);
self.emit("serverRemoveMember", user, server);
}
break;
@@ -1362,7 +1352,7 @@ var Client = (function () {
var user = self.addUser(data.user);
var server = self.getServer("id", data.guild_id);
var member = server.getMember("id", user.id);
self.trigger("serverMemberUpdate", member, data.roles);
self.emit("serverMemberUpdate", member, data.roles);
server.getMember("id", user.id).rawRoles = data.roles;
break;
@@ -1373,7 +1363,7 @@ var Client = (function () {
var newUser = new User(data); //not actually adding to the cache
self.trigger("userUpdate", newUser, self.user);
self.emit("userUpdate", newUser, self.user);
if (~self.userCache.indexOf(self.user)) {
self.userCache[self.userCache.indexOf(self.user)] = newUser;
@@ -1399,7 +1389,7 @@ var Client = (function () {
var presenceUser = new User(data.user);
if (presenceUser.equalsStrict(userInCache)) {
//they're exactly the same, an actual presence update
self.trigger("presence", {
self.emit("presence", {
user: userInCache,
oldStatus: userInCache.status,
status: data.status,
@@ -1411,7 +1401,7 @@ var Client = (function () {
} else {
//one of their details changed.
self.userCache[self.userCache.indexOf(userInCache)] = presenceUser;
self.trigger("userUpdate", userInCache, presenceUser);
self.emit("userUpdate", userInCache, presenceUser);
}
}
@@ -1427,7 +1417,7 @@ var Client = (function () {
var newChann = new Channel(data, serverInCache);
newChann.messages = channelInCache.messages;
self.trigger("channelUpdate", channelInCache, newChann);
self.emit("channelUpdate", channelInCache, newChann);
self.channelCache[self.channelCache.indexOf(channelInCache)] = newChann;
}
@@ -1440,7 +1430,7 @@ var Client = (function () {
var channelInCache = self.getChannel("id", data.channel_id);
if (!self.userTypingListener[data.user_id] || self.userTypingListener[data.user_id] === -1) {
self.trigger("startTyping", userInCache, channelInCache);
self.emit("startTyping", userInCache, channelInCache);
}
self.userTypingListener[data.user_id] = Date.now();
@@ -1451,7 +1441,7 @@ var Client = (function () {
}
if (Date.now() - self.userTypingListener[data.user_id] > 6000) {
// stopped typing
self.trigger("stopTyping", userInCache, channelInCache);
self.emit("stopTyping", userInCache, channelInCache);
self.userTypingListener[data.user_id] = -1;
}
}, 6000);
@@ -1470,7 +1460,7 @@ var Client = (function () {
break;
}
self.trigger("serverRoleCreate", server, server.addRole(role));
self.emit("serverRoleCreate", server, server.addRole(role));
break;
@@ -1479,7 +1469,7 @@ var Client = (function () {
var server = self.getServer("id", data.guild_id);
var role = server.getRole(data.role_id);
self.trigger("serverRoleDelete", server, role);
self.emit("serverRoleDelete", server, role);
server.removeRole(role.id);
@@ -1491,13 +1481,13 @@ var Client = (function () {
var role = server.getRole(data.role.id);
var newRole = server.updateRole(data.role);
self.trigger("serverRoleUpdate", server, role, newRole);
self.emit("serverRoleUpdate", server, role, newRole);
break;
default:
self.debug("received unknown packet");
self.trigger("unknown", dat);
self.emit("unknown", dat);
break;
}
@@ -1572,7 +1562,7 @@ var Client = (function () {
var server = this.getServer("id", data.id);
if (data.unavailable) {
self.trigger("unavailable", data);
self.emit("unavailable", data);
self.debug("Server ID " + data.id + " has been marked unavailable by Discord. It was not cached.");
return;
}
@@ -1808,7 +1798,7 @@ var Client = (function () {
});
};
Client.prototype._sendMessage = function _sendMessage(destination, content, tts, mentions) {
Client.prototype._sendMessage = function _sendMessage(destination, content, options, mentions) {
var self = this;
@@ -1816,7 +1806,7 @@ var Client = (function () {
request.post(Endpoints.CHANNELS + "/" + destination + "/messages").set("authorization", self.token).send({
content: content,
mentions: mentions,
tts: tts
tts: options.tts
}).end(function (err, res) {
if (err) {
@@ -2097,6 +2087,6 @@ var Client = (function () {
}]);
return Client;
})();
})(EventEmitter);
module.exports = Client;