mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
Updated sendMessage and reply, client is eventemitter
This commit is contained in:
@@ -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.
|
||||
|
||||
As of 3.10.1, Discord.Client extends EventEmitter_. In previous versions, the only available methods were `on` and `off`.
|
||||
|
||||
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.
|
||||
|
||||
sendMessage(channel, message, `callback`)
|
||||
sendMessage(channel, message, `options`, `callback`)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sends a message to the specified channel.
|
||||
|
||||
- **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.
|
||||
- **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:
|
||||
|
||||
- **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.
|
||||
- **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.
|
||||
@@ -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.
|
||||
- **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:
|
||||
|
||||
- **error** - An error if one occurred, otherwise it is null.
|
||||
@@ -607,4 +617,6 @@ Called when a WebSocket message is received and it gives you the message.
|
||||
|
||||
.. _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
|
||||
128
lib/Client.js
128
lib/Client.js
@@ -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;
|
||||
19
lib/VoiceChannel.js
Normal file
19
lib/VoiceChannel.js
Normal 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);
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "discord.js",
|
||||
"version": "3.9.1",
|
||||
"version": "3.10.1",
|
||||
"description": "A way to interface with the Discord API",
|
||||
"main": "./lib/index.js",
|
||||
"scripts": {
|
||||
|
||||
124
src/Client.js
124
src/Client.js
@@ -10,6 +10,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");
|
||||
@@ -19,14 +21,17 @@ var defaultOptions = {
|
||||
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
|
||||
try connecting with it. If the token is incorrect, no
|
||||
further efforts will be made to connect.
|
||||
*/
|
||||
super();
|
||||
|
||||
this.options = options;
|
||||
this.options.compress = options.compress;
|
||||
|
||||
@@ -38,7 +43,6 @@ class Client {
|
||||
this.token = token;
|
||||
this.state = 0;
|
||||
this.websocket = null;
|
||||
this.events = {};
|
||||
this.user = null;
|
||||
this.alreadySentData = false;
|
||||
this.serverCreateListener = {};
|
||||
@@ -112,37 +116,17 @@ class Client {
|
||||
|
||||
//def debug
|
||||
debug(message) {
|
||||
this.trigger("debug", message);
|
||||
}
|
||||
|
||||
on(event, fn) {
|
||||
this.events[event] = fn;
|
||||
}
|
||||
|
||||
off(event) {
|
||||
this.events[event] = null;
|
||||
this.emit("debug", message);
|
||||
}
|
||||
|
||||
keepAlive() {
|
||||
this.debug("keep alive triggered");
|
||||
this.debug("keep alive emitted");
|
||||
this.sendPacket({
|
||||
op: 1,
|
||||
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
|
||||
login(email = "foo@bar.com", password = "pass1234", callback = function (err, token) { }) {
|
||||
|
||||
@@ -165,7 +149,7 @@ class Client {
|
||||
|
||||
if (err) {
|
||||
self.state = 4; //set state to disconnected
|
||||
self.trigger("disconnected");
|
||||
self.emit("disconnected");
|
||||
if (self.websocket) {
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
});
|
||||
|
||||
@@ -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 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);
|
||||
@@ -752,14 +740,14 @@ class Client {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1142,7 +1130,7 @@ class Client {
|
||||
|
||||
//close
|
||||
this.websocket.onclose = function () {
|
||||
self.trigger("disconnected");
|
||||
self.emit("disconnected");
|
||||
}
|
||||
|
||||
//message
|
||||
@@ -1161,11 +1149,11 @@ class Client {
|
||||
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) {
|
||||
@@ -1185,7 +1173,7 @@ class Client {
|
||||
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;
|
||||
@@ -1211,7 +1199,7 @@ class Client {
|
||||
|
||||
if (channel) {
|
||||
var msg = channel.addMessage(new Message(data, channel, mentions, data.author));
|
||||
self.trigger("message", msg);
|
||||
self.emit("message", msg);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1221,11 +1209,11 @@ class Client {
|
||||
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":
|
||||
@@ -1260,7 +1248,7 @@ class Client {
|
||||
|
||||
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;
|
||||
|
||||
@@ -1277,7 +1265,7 @@ class Client {
|
||||
|
||||
if (server) {
|
||||
self.serverCache.splice(self.serverCache.indexOf(server), 1);
|
||||
self.trigger("serverDelete", server);
|
||||
self.emit("serverDelete", server);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1287,7 +1275,7 @@ class Client {
|
||||
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":
|
||||
|
||||
@@ -1303,7 +1291,7 @@ class Client {
|
||||
|
||||
}
|
||||
|
||||
self.trigger("channelDelete", channel);
|
||||
self.emit("channelDelete", channel);
|
||||
|
||||
self.serverCache.splice(self.serverCache.indexOf(channel), 1);
|
||||
|
||||
@@ -1335,7 +1323,7 @@ class Client {
|
||||
self.serverCreateListener[data.id] = null;
|
||||
}
|
||||
|
||||
self.trigger("serverCreate", server);
|
||||
self.emit("serverCreate", server);
|
||||
|
||||
break;
|
||||
|
||||
@@ -1355,7 +1343,7 @@ class Client {
|
||||
if (srv) {
|
||||
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..
|
||||
|
||||
self.trigger("serverNewMember", server.addMember(user, data.roles), server);
|
||||
self.emit("serverNewMember", server.addMember(user, data.roles), server);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1384,7 +1372,7 @@ class Client {
|
||||
|
||||
server.removeMember("id", user.id);
|
||||
|
||||
self.trigger("serverRemoveMember", user, server);
|
||||
self.emit("serverRemoveMember", user, server);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1394,7 +1382,7 @@ class Client {
|
||||
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;
|
||||
@@ -1405,7 +1393,7 @@ class Client {
|
||||
|
||||
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;
|
||||
@@ -1432,7 +1420,7 @@ class Client {
|
||||
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,
|
||||
@@ -1444,7 +1432,7 @@ class Client {
|
||||
} else {
|
||||
//one of their details changed.
|
||||
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);
|
||||
newChann.messages = channelInCache.messages;
|
||||
|
||||
self.trigger("channelUpdate", channelInCache, newChann);
|
||||
self.emit("channelUpdate", channelInCache, newChann);
|
||||
|
||||
self.channelCache[self.channelCache.indexOf(channelInCache)] = newChann;
|
||||
}
|
||||
@@ -1473,7 +1461,7 @@ class Client {
|
||||
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();
|
||||
@@ -1484,7 +1472,7 @@ class Client {
|
||||
}
|
||||
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);
|
||||
@@ -1503,7 +1491,7 @@ class Client {
|
||||
break;
|
||||
}
|
||||
|
||||
self.trigger("serverRoleCreate", server, server.addRole(role));
|
||||
self.emit("serverRoleCreate", server, server.addRole(role));
|
||||
|
||||
break;
|
||||
|
||||
@@ -1512,7 +1500,7 @@ class Client {
|
||||
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);
|
||||
|
||||
@@ -1524,13 +1512,13 @@ class Client {
|
||||
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;
|
||||
|
||||
}
|
||||
@@ -1609,7 +1597,7 @@ class Client {
|
||||
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;
|
||||
}
|
||||
@@ -1754,7 +1742,7 @@ class Client {
|
||||
});
|
||||
}
|
||||
|
||||
_sendMessage(destination, content, tts, mentions) {
|
||||
_sendMessage(destination, content, options, mentions) {
|
||||
|
||||
var self = this;
|
||||
|
||||
@@ -1765,7 +1753,7 @@ class Client {
|
||||
.send({
|
||||
content: content,
|
||||
mentions: mentions,
|
||||
tts: tts
|
||||
tts: options.tts
|
||||
})
|
||||
.end(function (err, res) {
|
||||
|
||||
|
||||
@@ -28,27 +28,11 @@ mybot.on("message", function (message) {
|
||||
user = message.sender;
|
||||
}
|
||||
|
||||
this.createRole(message.channel.server, {
|
||||
hoist: true,
|
||||
color: true,
|
||||
name: "discord users"
|
||||
}).then(
|
||||
(perm) => {
|
||||
|
||||
mybot.addMemberToRole(user, perm).then(
|
||||
() => {
|
||||
mybot.overwritePermissions(message.channel, perm, {
|
||||
sendMessages : false
|
||||
});
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
)
|
||||
mybot.reply(message, "this is tts", {tts:true}).catch(error);
|
||||
|
||||
});
|
||||
|
||||
mybot.on("ready", function () {
|
||||
mybot.once("ready", function () {
|
||||
console.log("im ready");
|
||||
|
||||
for (var server of mybot.servers) {
|
||||
|
||||
@@ -11,7 +11,7 @@ function init(){
|
||||
console.log("preparing...");
|
||||
}
|
||||
|
||||
mybot.on("ready", function(){
|
||||
mybot.once("ready", function(){
|
||||
console.log("ready! beginning tests");
|
||||
success1();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user