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

@@ -7,6 +7,8 @@ This page contains documentation on the `Discord.Client` class. This should be u
It might be beneficial to use CTRL+F to search for what you're looking for, or use the navigation provided by readthedocs on the left. It might be beneficial to use CTRL+F to search for what you're looking for, or use the navigation provided by readthedocs on the left.
As of 3.10.1, Discord.Client extends EventEmitter_. In previous versions, the only available methods were `on` and `off`.
Attributes Attributes
---------- ----------
@@ -240,13 +242,17 @@ Gets previous messages from the specified channel.
.. warning:: If the logs contain messages from a user who is no longer in the server, the user object *MAY* be malformed. .. warning:: If the logs contain messages from a user who is no longer in the server, the user object *MAY* be malformed.
sendMessage(channel, message, `callback`) sendMessage(channel, message, `options`, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sends a message to the specified channel. Sends a message to the specified channel.
- **channel** - A `Channel Resolvable`_ to send the message to. - **channel** - A `Channel Resolvable`_ to send the message to.
- **message** - A `String` or an Array of strings. If an Array, the array will be joined with a new line as a delimiter and this will be the message to be sent. - **message** - A `String` or an Array of strings. If an Array, the array will be joined with a new line as a delimiter and this will be the message to be sent.
- **options** - An `Object` that can contain the following parameters:
- **tts** - Whether the message should be text-to-speech (defaults to false)
- **callback** - A `function` that can take the following parameters: - **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null. - **error** - An error if one occurred, otherwise it is null.
@@ -278,7 +284,7 @@ Updates/edits a message with new content.
- **error** - An error if one occurred, otherwise it is null. - **error** - An error if one occurred, otherwise it is null.
- **message** - A Message_ representing the updated message. - **message** - A Message_ representing the updated message.
reply(message, yourMessage, `callback`) reply(message, yourMessage, `options`, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Alias for sendMessage, but prepends a mention to whoever sent the specified mention. Useful shortcut for directing a message at a user. Alias for sendMessage, but prepends a mention to whoever sent the specified mention. Useful shortcut for directing a message at a user.
@@ -294,6 +300,10 @@ Alias for sendMessage, but prepends a mention to whoever sent the specified ment
- **message** - A Message_ that should be replied to. - **message** - A Message_ that should be replied to.
- **yourMessage** - A `String` or an Array of strings. If an Array, the array will be joined with a new line as a delimiter and this will be the message to be sent. - **yourMessage** - A `String` or an Array of strings. If an Array, the array will be joined with a new line as a delimiter and this will be the message to be sent.
- **options** - An `Object` that can contain the following parameters:
- **tts** - Whether the message should be text-to-speech (defaults to false)
- **callback** - A `function` that can take the following parameters: - **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null. - **error** - An error if one occurred, otherwise it is null.
@@ -608,3 +618,5 @@ Called when a WebSocket message is received and it gives you the message.
.. _official API here : https://discordapp.com/api/voice/regions .. _official API here : https://discordapp.com/api/voice/regions
.. _Discord Game ID : https://raw.githubusercontent.com/hydrabolt/discord.js/master/ref/gameMap.json .. _Discord Game ID : https://raw.githubusercontent.com/hydrabolt/discord.js/master/ref/gameMap.json
.. _EventEmitter : https://nodejs.org/api/events.html#events_class_events_eventemitter

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

19
lib/VoiceChannel.js Normal file
View File

@@ -0,0 +1,19 @@
"use strict";
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 Channel = require("./channel.js");
var VoiceChannel = (function (_Channel) {
_inherits(VoiceChannel, _Channel);
function VoiceChannel(data, server) {
_classCallCheck(this, VoiceChannel);
_Channel.call(this, data, server);
}
return VoiceChannel;
})(Channel);

View File

@@ -1,6 +1,6 @@
{ {
"name": "discord.js", "name": "discord.js",
"version": "3.9.1", "version": "3.10.1",
"description": "A way to interface with the Discord API", "description": "A way to interface with the Discord API",
"main": "./lib/index.js", "main": "./lib/index.js",
"scripts": { "scripts": {

View File

@@ -10,6 +10,8 @@ var ServerPermissions = require("./ServerPermissions.js");
var gameMap = require("../ref/gameMap.json"); var gameMap = require("../ref/gameMap.json");
var zlib; var zlib;
var EventEmitter = require('events');
//node modules //node modules
var request = require("superagent"); var request = require("superagent");
var WebSocket = require("ws"); var WebSocket = require("ws");
@@ -19,14 +21,17 @@ var defaultOptions = {
queue: false queue: false
} }
class Client { class Client extends EventEmitter{
constructor(options = defaultOptions, token = undefined){
constructor(options = defaultOptions, token = undefined) {
/* /*
When created, if a token is specified the Client will When created, if a token is specified the Client will
try connecting with it. If the token is incorrect, no try connecting with it. If the token is incorrect, no
further efforts will be made to connect. further efforts will be made to connect.
*/ */
super();
this.options = options; this.options = options;
this.options.compress = options.compress; this.options.compress = options.compress;
@@ -38,7 +43,6 @@ class Client {
this.token = token; this.token = token;
this.state = 0; this.state = 0;
this.websocket = null; this.websocket = null;
this.events = {};
this.user = null; this.user = null;
this.alreadySentData = false; this.alreadySentData = false;
this.serverCreateListener = {}; this.serverCreateListener = {};
@@ -112,37 +116,17 @@ class Client {
//def debug //def debug
debug(message) { debug(message) {
this.trigger("debug", message); this.emit("debug", message);
}
on(event, fn) {
this.events[event] = fn;
}
off(event) {
this.events[event] = null;
} }
keepAlive() { keepAlive() {
this.debug("keep alive triggered"); this.debug("keep alive emitted");
this.sendPacket({ this.sendPacket({
op: 1, op: 1,
d: Date.now() d: Date.now()
}); });
} }
//def trigger
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 //def login
login(email = "foo@bar.com", password = "pass1234", callback = function (err, token) { }) { login(email = "foo@bar.com", password = "pass1234", callback = function (err, token) { }) {
@@ -165,7 +149,7 @@ class Client {
if (err) { if (err) {
self.state = 4; //set state to disconnected self.state = 4; //set state to disconnected
self.trigger("disconnected"); self.emit("disconnected");
if (self.websocket) { if (self.websocket) {
self.websocket.close(); self.websocket.close();
} }
@@ -399,20 +383,20 @@ class Client {
} }
reply(destination, message, tts, callback = function (err, msg) { }) { reply(destination, message, options, callback = function (err, msg) { }) {
var self = this; var self = this;
return new Promise(function (response, reject) { return new Promise(function (response, reject) {
if (typeof tts === "function") { if (typeof options === "function") {
// tts is a function, which means the developer wants this to be the callback // options is a function, which means the developer wants this to be the callback
callback = tts; callback = options;
tts = false; options = false;
} }
var user = destination.sender; 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);
}); });
@@ -720,16 +704,20 @@ class Client {
} }
sendMessage(destination, message, tts, callback = function (err, msg) { }, premessage = "") { sendMessage(destination, message, options, callback = function (err, msg) { }, premessage = "") {
var self = this; var self = this;
var prom = new Promise(function (resolve, reject) { var prom = new Promise(function (resolve, reject) {
if (typeof tts === "function") { if (typeof options === "function") {
// tts is a function, which means the developer wants this to be the callback // options is a function, which means the developer wants this to be the callback
callback = tts; callback = options;
tts = false; options = {tts : false};
}
if(!options){
options = {tts:false};
} }
message = premessage + resolveMessage(message); message = premessage + resolveMessage(message);
@@ -752,14 +740,14 @@ class Client {
action: "sendMessage", action: "sendMessage",
content: message, content: message,
mentions: mentions, mentions: mentions,
tts: !!tts, //incase it's not a boolean tts: options.tts, //incase it's not a boolean
then: mgood, then: mgood,
error: mbad error: mbad
}); });
self.checkQueue(destination); self.checkQueue(destination);
} else { } else {
self._sendMessage(destination, message, tts, mentions).then(mgood).catch(mbad); self._sendMessage(destination, message, options, mentions).then(mgood).catch(mbad);
} }
} }
@@ -1142,7 +1130,7 @@ class Client {
//close //close
this.websocket.onclose = function () { this.websocket.onclose = function () {
self.trigger("disconnected"); self.emit("disconnected");
} }
//message //message
@@ -1161,11 +1149,11 @@ class Client {
dat = JSON.parse(e.data); dat = JSON.parse(e.data);
data = dat.d; data = dat.d;
} catch (err) { } catch (err) {
self.trigger("error", err, e); self.emit("error", err, e);
return; return;
} }
self.trigger("raw", dat); self.emit("raw", dat);
//valid message //valid message
switch (dat.t) { switch (dat.t) {
@@ -1185,7 +1173,7 @@ class Client {
var pmc = self.addPMChannel(_pmc); var pmc = self.addPMChannel(_pmc);
} }
self.trigger("ready"); self.emit("ready");
self.readyTime = Date.now(); 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.debug(`cached ${self.serverCache.length} servers, ${self.channelCache.length} channels, ${self.pmChannelCache.length} PMs and ${self.userCache.length} users.`);
self.state = 3; self.state = 3;
@@ -1211,7 +1199,7 @@ class Client {
if (channel) { if (channel) {
var msg = channel.addMessage(new Message(data, channel, mentions, data.author)); var msg = channel.addMessage(new Message(data, channel, mentions, data.author));
self.trigger("message", msg); self.emit("message", msg);
} }
break; break;
@@ -1221,11 +1209,11 @@ class Client {
var channel = self.getChannel("id", data.channel_id); var channel = self.getChannel("id", data.channel_id);
var message = channel.getMessage("id", data.id); var message = channel.getMessage("id", data.id);
if (message) { if (message) {
self.trigger("messageDelete", channel, message); self.emit("messageDelete", channel, message);
channel.messages.splice(channel.messages.indexOf(message), 1); channel.messages.splice(channel.messages.indexOf(message), 1);
} else { } else {
//don't have the cache of that message ;( //don't have the cache of that message ;(
self.trigger("messageDelete", channel); self.emit("messageDelete", channel);
} }
break; break;
case "MESSAGE_UPDATE": case "MESSAGE_UPDATE":
@@ -1260,7 +1248,7 @@ class Client {
var newMessage = new Message(info, channel, mentions, formerMessage.author); 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; channel.messages[channel.messages.indexOf(formerMessage)] = newMessage;
@@ -1277,7 +1265,7 @@ class Client {
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.emit("serverDelete", server);
} }
break; break;
@@ -1287,7 +1275,7 @@ class Client {
var bannedUser = self.addUser(data.user); var bannedUser = self.addUser(data.user);
var server = self.getServer("id", data.guild_id); var server = self.getServer("id", data.guild_id);
self.trigger("userBanned", bannedUser, server); self.emit("userBanned", bannedUser, server);
case "CHANNEL_DELETE": case "CHANNEL_DELETE":
@@ -1303,7 +1291,7 @@ class Client {
} }
self.trigger("channelDelete", channel); self.emit("channelDelete", channel);
self.serverCache.splice(self.serverCache.indexOf(channel), 1); self.serverCache.splice(self.serverCache.indexOf(channel), 1);
@@ -1335,7 +1323,7 @@ class Client {
self.serverCreateListener[data.id] = null; self.serverCreateListener[data.id] = null;
} }
self.trigger("serverCreate", server); self.emit("serverCreate", server);
break; break;
@@ -1355,7 +1343,7 @@ class Client {
if (srv) { if (srv) {
srv.addChannel(chann); srv.addChannel(chann);
} }
self.trigger("channelCreate", chann); self.emit("channelCreate", chann);
} }
@@ -1369,7 +1357,7 @@ class Client {
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..
self.trigger("serverNewMember", server.addMember(user, data.roles), server); self.emit("serverNewMember", server.addMember(user, data.roles), server);
} }
break; break;
@@ -1384,7 +1372,7 @@ class Client {
server.removeMember("id", user.id); server.removeMember("id", user.id);
self.trigger("serverRemoveMember", user, server); self.emit("serverRemoveMember", user, server);
} }
break; break;
@@ -1394,7 +1382,7 @@ class Client {
var user = self.addUser(data.user); var user = self.addUser(data.user);
var server = self.getServer("id", data.guild_id); var server = self.getServer("id", data.guild_id);
var member = server.getMember("id", user.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; server.getMember("id", user.id).rawRoles = data.roles;
break; break;
@@ -1405,7 +1393,7 @@ class Client {
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.emit("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;
@@ -1432,7 +1420,7 @@ class Client {
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.emit("presence", {
user: userInCache, user: userInCache,
oldStatus: userInCache.status, oldStatus: userInCache.status,
status: data.status, status: data.status,
@@ -1444,7 +1432,7 @@ class Client {
} else { } else {
//one of their details changed. //one of their details changed.
self.userCache[self.userCache.indexOf(userInCache)] = presenceUser; self.userCache[self.userCache.indexOf(userInCache)] = presenceUser;
self.trigger("userUpdate", userInCache, presenceUser); self.emit("userUpdate", userInCache, presenceUser);
} }
} }
@@ -1460,7 +1448,7 @@ class Client {
var newChann = new Channel(data, serverInCache); var newChann = new Channel(data, serverInCache);
newChann.messages = channelInCache.messages; newChann.messages = channelInCache.messages;
self.trigger("channelUpdate", channelInCache, newChann); self.emit("channelUpdate", channelInCache, newChann);
self.channelCache[self.channelCache.indexOf(channelInCache)] = newChann; self.channelCache[self.channelCache.indexOf(channelInCache)] = newChann;
} }
@@ -1473,7 +1461,7 @@ class Client {
var channelInCache = self.getChannel("id", data.channel_id); var channelInCache = self.getChannel("id", data.channel_id);
if (!self.userTypingListener[data.user_id] || self.userTypingListener[data.user_id] === -1) { 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(); self.userTypingListener[data.user_id] = Date.now();
@@ -1484,7 +1472,7 @@ class Client {
} }
if (Date.now() - self.userTypingListener[data.user_id] > 6000) { if (Date.now() - self.userTypingListener[data.user_id] > 6000) {
// stopped typing // stopped typing
self.trigger("stopTyping", userInCache, channelInCache); self.emit("stopTyping", userInCache, channelInCache);
self.userTypingListener[data.user_id] = -1; self.userTypingListener[data.user_id] = -1;
} }
}, 6000); }, 6000);
@@ -1503,7 +1491,7 @@ class Client {
break; break;
} }
self.trigger("serverRoleCreate", server, server.addRole(role)); self.emit("serverRoleCreate", server, server.addRole(role));
break; break;
@@ -1512,7 +1500,7 @@ class Client {
var server = self.getServer("id", data.guild_id); var server = self.getServer("id", data.guild_id);
var role = server.getRole(data.role_id); var role = server.getRole(data.role_id);
self.trigger("serverRoleDelete", server, role); self.emit("serverRoleDelete", server, role);
server.removeRole(role.id); server.removeRole(role.id);
@@ -1524,13 +1512,13 @@ class Client {
var role = server.getRole(data.role.id); var role = server.getRole(data.role.id);
var newRole = server.updateRole(data.role); var newRole = server.updateRole(data.role);
self.trigger("serverRoleUpdate", server, role, newRole); self.emit("serverRoleUpdate", server, role, newRole);
break; break;
default: default:
self.debug("received unknown packet"); self.debug("received unknown packet");
self.trigger("unknown", dat); self.emit("unknown", dat);
break; break;
} }
@@ -1609,7 +1597,7 @@ class Client {
var server = this.getServer("id", data.id); var server = this.getServer("id", data.id);
if (data.unavailable) { 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."); self.debug("Server ID " + data.id + " has been marked unavailable by Discord. It was not cached.");
return; return;
} }
@@ -1754,7 +1742,7 @@ class Client {
}); });
} }
_sendMessage(destination, content, tts, mentions) { _sendMessage(destination, content, options, mentions) {
var self = this; var self = this;
@@ -1765,7 +1753,7 @@ class Client {
.send({ .send({
content: content, content: content,
mentions: mentions, mentions: mentions,
tts: tts tts: options.tts
}) })
.end(function (err, res) { .end(function (err, res) {

View File

@@ -28,27 +28,11 @@ mybot.on("message", function (message) {
user = message.sender; user = message.sender;
} }
this.createRole(message.channel.server, { mybot.reply(message, "this is tts", {tts:true}).catch(error);
hoist: true,
color: true,
name: "discord users"
}).then(
(perm) => {
mybot.addMemberToRole(user, perm).then(
() => {
mybot.overwritePermissions(message.channel, perm, {
sendMessages : false
});
}
)
}
)
}); });
mybot.on("ready", function () { mybot.once("ready", function () {
console.log("im ready"); console.log("im ready");
for (var server of mybot.servers) { for (var server of mybot.servers) {

View File

@@ -11,7 +11,7 @@ function init(){
console.log("preparing..."); console.log("preparing...");
} }
mybot.on("ready", function(){ mybot.once("ready", function(){
console.log("ready! beginning tests"); console.log("ready! beginning tests");
success1(); success1();
}); });