mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 12:03:31 +01:00
added message sending and PM channel resolving
This commit is contained in:
425
lib/Client.js
425
lib/Client.js
@@ -11,6 +11,7 @@ var Server = require("./Server.js");
|
|||||||
var Channel = require("./Channel.js");
|
var Channel = require("./Channel.js");
|
||||||
var Message = require("./Message.js");
|
var Message = require("./Message.js");
|
||||||
var Invite = require("./Invite.js");
|
var Invite = require("./Invite.js");
|
||||||
|
var PMChannel = require("./PMChannel.js");
|
||||||
|
|
||||||
//node modules
|
//node modules
|
||||||
var request = require("superagent");
|
var request = require("superagent");
|
||||||
@@ -52,6 +53,7 @@ var Client = (function () {
|
|||||||
this.userCache = [];
|
this.userCache = [];
|
||||||
this.channelCache = [];
|
this.channelCache = [];
|
||||||
this.serverCache = [];
|
this.serverCache = [];
|
||||||
|
this.pmChannelCache = [];
|
||||||
this.readyTime = null;
|
this.readyTime = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,6 +280,186 @@ var Client = (function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: "startPM",
|
||||||
|
value: function startPM(user) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
var userId = user;
|
||||||
|
if (user instanceof User) {
|
||||||
|
userId = user.id;
|
||||||
|
}
|
||||||
|
request.post(Endpoints.USERS + "/" + self.user.id + "/channels").set("authorization", self.token).send({
|
||||||
|
recipient_id: userId
|
||||||
|
}).end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(self.addPMChannel(res.body));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "sendMessage",
|
||||||
|
value: function sendMessage(destination, message) {
|
||||||
|
var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, msg) {} : arguments[2];
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
message = resolveMessage(message);
|
||||||
|
var mentions = resolveMentions();
|
||||||
|
destination = resolveDestination(destination);
|
||||||
|
|
||||||
|
if (destination) send();
|
||||||
|
|
||||||
|
function send() {
|
||||||
|
|
||||||
|
request.post(Endpoints.CHANNELS + "/" + destination + "/messages").set("authorization", self.token).send({
|
||||||
|
content: message,
|
||||||
|
mentions: mentions
|
||||||
|
}).end(function (err, res) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
callback(err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
var data = res.body;
|
||||||
|
|
||||||
|
var mentions = [];
|
||||||
|
|
||||||
|
data.mentions = data.mentions || []; //for some reason this was not defined at some point?
|
||||||
|
|
||||||
|
var _iteratorNormalCompletion = true;
|
||||||
|
var _didIteratorError = false;
|
||||||
|
var _iteratorError = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator = data.mentions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
||||||
|
var mention = _step.value;
|
||||||
|
|
||||||
|
mentions.push(self.addUser(mention));
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError = true;
|
||||||
|
_iteratorError = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion && _iterator["return"]) {
|
||||||
|
_iterator["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError) {
|
||||||
|
throw _iteratorError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var channel = self.getChannel("id", data.channel_id);
|
||||||
|
if (channel) {
|
||||||
|
var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author)));
|
||||||
|
callback(null, msg);
|
||||||
|
resolve(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveDestination() {
|
||||||
|
var channId = false;
|
||||||
|
|
||||||
|
if (destination instanceof Server) {
|
||||||
|
channId = destination.id; //general is the same as server id
|
||||||
|
} else if (destination instanceof Channel) {
|
||||||
|
channId = destination.id;
|
||||||
|
} else if (destination instanceof Message) {
|
||||||
|
channId = destination.channel.id;
|
||||||
|
} else if (destination instanceof User) {
|
||||||
|
|
||||||
|
//check if we have a PM
|
||||||
|
var _iteratorNormalCompletion2 = true;
|
||||||
|
var _didIteratorError2 = false;
|
||||||
|
var _iteratorError2 = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator2 = self.pmChannelCache[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
||||||
|
var pmc = _step2.value;
|
||||||
|
|
||||||
|
if (pmc.user.equals(destination)) {
|
||||||
|
return pmc.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//we don't, at this point we're late
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError2 = true;
|
||||||
|
_iteratorError2 = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion2 && _iterator2["return"]) {
|
||||||
|
_iterator2["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError2) {
|
||||||
|
throw _iteratorError2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.startPM(destination).then(function (pmc) {
|
||||||
|
destination = pmc.id;
|
||||||
|
send();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
channId = destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
return channId;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveMessage() {
|
||||||
|
var msg = message;
|
||||||
|
if (message instanceof Array) {
|
||||||
|
msg = message.join("\n");
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveMentions() {
|
||||||
|
var _mentions = [];
|
||||||
|
var _iteratorNormalCompletion3 = true;
|
||||||
|
var _didIteratorError3 = false;
|
||||||
|
var _iteratorError3 = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator3 = (message.match(/<@[^>]*>/g) || [])[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
||||||
|
var mention = _step3.value;
|
||||||
|
|
||||||
|
_mentions.push(mention.substring(2, mention.length - 1));
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError3 = true;
|
||||||
|
_iteratorError3 = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion3 && _iterator3["return"]) {
|
||||||
|
_iterator3["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError3) {
|
||||||
|
throw _iteratorError3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return _mentions;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//def createws
|
//def createws
|
||||||
}, {
|
}, {
|
||||||
@@ -322,34 +504,59 @@ var Client = (function () {
|
|||||||
|
|
||||||
self.user = self.addUser(data.user);
|
self.user = self.addUser(data.user);
|
||||||
|
|
||||||
var _iteratorNormalCompletion = true;
|
var _iteratorNormalCompletion4 = true;
|
||||||
var _didIteratorError = false;
|
var _didIteratorError4 = false;
|
||||||
var _iteratorError = undefined;
|
var _iteratorError4 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator = data.guilds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
for (var _iterator4 = data.guilds[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
||||||
var _server = _step.value;
|
var _server = _step4.value;
|
||||||
|
|
||||||
var server = self.addServer(_server);
|
var server = self.addServer(_server);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError = true;
|
_didIteratorError4 = true;
|
||||||
_iteratorError = err;
|
_iteratorError4 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion && _iterator["return"]) {
|
if (!_iteratorNormalCompletion4 && _iterator4["return"]) {
|
||||||
_iterator["return"]();
|
_iterator4["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError) {
|
if (_didIteratorError4) {
|
||||||
throw _iteratorError;
|
throw _iteratorError4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _iteratorNormalCompletion5 = true;
|
||||||
|
var _didIteratorError5 = false;
|
||||||
|
var _iteratorError5 = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator5 = data.private_channels[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
||||||
|
var _pmc = _step5.value;
|
||||||
|
|
||||||
|
var pmc = self.addPMChannel(_pmc);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError5 = true;
|
||||||
|
_iteratorError5 = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion5 && _iterator5["return"]) {
|
||||||
|
_iterator5["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError5) {
|
||||||
|
throw _iteratorError5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.trigger("ready");
|
self.trigger("ready");
|
||||||
self.readyTime = Date.now();
|
self.readyTime = Date.now();
|
||||||
self.debug("cached " + self.serverCache.length + " servers, " + self.channelCache.length + " channels 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.");
|
||||||
|
|
||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
self.keepAlive.apply(self);
|
self.keepAlive.apply(self);
|
||||||
@@ -361,27 +568,27 @@ var Client = (function () {
|
|||||||
|
|
||||||
var mentions = [];
|
var mentions = [];
|
||||||
data.mentions = data.mentions || []; //for some reason this was not defined at some point?
|
data.mentions = data.mentions || []; //for some reason this was not defined at some point?
|
||||||
var _iteratorNormalCompletion2 = true;
|
var _iteratorNormalCompletion6 = true;
|
||||||
var _didIteratorError2 = false;
|
var _didIteratorError6 = false;
|
||||||
var _iteratorError2 = undefined;
|
var _iteratorError6 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator2 = data.mentions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
for (var _iterator6 = data.mentions[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
||||||
var mention = _step2.value;
|
var mention = _step6.value;
|
||||||
|
|
||||||
mentions.push(self.addUser(mention));
|
mentions.push(self.addUser(mention));
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError2 = true;
|
_didIteratorError6 = true;
|
||||||
_iteratorError2 = err;
|
_iteratorError6 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion2 && _iterator2["return"]) {
|
if (!_iteratorNormalCompletion6 && _iterator6["return"]) {
|
||||||
_iterator2["return"]();
|
_iterator6["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError2) {
|
if (_didIteratorError6) {
|
||||||
throw _iteratorError2;
|
throw _iteratorError6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -426,27 +633,27 @@ var Client = (function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var mentions = [];
|
var mentions = [];
|
||||||
var _iteratorNormalCompletion3 = true;
|
var _iteratorNormalCompletion7 = true;
|
||||||
var _didIteratorError3 = false;
|
var _didIteratorError7 = false;
|
||||||
var _iteratorError3 = undefined;
|
var _iteratorError7 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator3 = info.mentions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
for (var _iterator7 = info.mentions[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
|
||||||
var mention = _step3.value;
|
var mention = _step7.value;
|
||||||
|
|
||||||
mentions.push(self.addUser(mention));
|
mentions.push(self.addUser(mention));
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError3 = true;
|
_didIteratorError7 = true;
|
||||||
_iteratorError3 = err;
|
_iteratorError7 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion3 && _iterator3["return"]) {
|
if (!_iteratorNormalCompletion7 && _iterator7["return"]) {
|
||||||
_iterator3["return"]();
|
_iterator7["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError3) {
|
if (_didIteratorError7) {
|
||||||
throw _iteratorError3;
|
throw _iteratorError7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -640,6 +847,14 @@ var Client = (function () {
|
|||||||
}
|
}
|
||||||
return this.getChannel("id", data.id);
|
return this.getChannel("id", data.id);
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: "addPMChannel",
|
||||||
|
value: function addPMChannel(data) {
|
||||||
|
if (!this.getPMChannel("id", data.id)) {
|
||||||
|
this.pmChannelCache.push(new PMChannel(data, this));
|
||||||
|
}
|
||||||
|
return this.getPMChannel("id", data.id);
|
||||||
|
}
|
||||||
|
|
||||||
//def addServer
|
//def addServer
|
||||||
}, {
|
}, {
|
||||||
@@ -651,27 +866,27 @@ var Client = (function () {
|
|||||||
if (!server) {
|
if (!server) {
|
||||||
server = new Server(data, this);
|
server = new Server(data, this);
|
||||||
if (data.channels) {
|
if (data.channels) {
|
||||||
var _iteratorNormalCompletion4 = true;
|
var _iteratorNormalCompletion8 = true;
|
||||||
var _didIteratorError4 = false;
|
var _didIteratorError8 = false;
|
||||||
var _iteratorError4 = undefined;
|
var _iteratorError8 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator4 = data.channels[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
for (var _iterator8 = data.channels[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
|
||||||
var channel = _step4.value;
|
var channel = _step8.value;
|
||||||
|
|
||||||
server.channels.push(this.addChannel(channel, server.id));
|
server.channels.push(this.addChannel(channel, server.id));
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError4 = true;
|
_didIteratorError8 = true;
|
||||||
_iteratorError4 = err;
|
_iteratorError8 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion4 && _iterator4["return"]) {
|
if (!_iteratorNormalCompletion8 && _iterator8["return"]) {
|
||||||
_iterator4["return"]();
|
_iterator8["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError4) {
|
if (_didIteratorError8) {
|
||||||
throw _iteratorError4;
|
throw _iteratorError8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -686,29 +901,29 @@ var Client = (function () {
|
|||||||
}, {
|
}, {
|
||||||
key: "getUser",
|
key: "getUser",
|
||||||
value: function getUser(key, value) {
|
value: function getUser(key, value) {
|
||||||
var _iteratorNormalCompletion5 = true;
|
var _iteratorNormalCompletion9 = true;
|
||||||
var _didIteratorError5 = false;
|
var _didIteratorError9 = false;
|
||||||
var _iteratorError5 = undefined;
|
var _iteratorError9 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator5 = this.userCache[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
for (var _iterator9 = this.userCache[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {
|
||||||
var user = _step5.value;
|
var user = _step9.value;
|
||||||
|
|
||||||
if (user[key] === value) {
|
if (user[key] === value) {
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError5 = true;
|
_didIteratorError9 = true;
|
||||||
_iteratorError5 = err;
|
_iteratorError9 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion5 && _iterator5["return"]) {
|
if (!_iteratorNormalCompletion9 && _iterator9["return"]) {
|
||||||
_iterator5["return"]();
|
_iterator9["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError5) {
|
if (_didIteratorError9) {
|
||||||
throw _iteratorError5;
|
throw _iteratorError9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -720,29 +935,61 @@ var Client = (function () {
|
|||||||
}, {
|
}, {
|
||||||
key: "getChannel",
|
key: "getChannel",
|
||||||
value: function getChannel(key, value) {
|
value: function getChannel(key, value) {
|
||||||
var _iteratorNormalCompletion6 = true;
|
var _iteratorNormalCompletion10 = true;
|
||||||
var _didIteratorError6 = false;
|
var _didIteratorError10 = false;
|
||||||
var _iteratorError6 = undefined;
|
var _iteratorError10 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator6 = this.channelCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
for (var _iterator10 = this.channelCache[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {
|
||||||
var channel = _step6.value;
|
var channel = _step10.value;
|
||||||
|
|
||||||
if (channel[key] === value) {
|
if (channel[key] === value) {
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError6 = true;
|
_didIteratorError10 = true;
|
||||||
_iteratorError6 = err;
|
_iteratorError10 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion6 && _iterator6["return"]) {
|
if (!_iteratorNormalCompletion10 && _iterator10["return"]) {
|
||||||
_iterator6["return"]();
|
_iterator10["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError6) {
|
if (_didIteratorError10) {
|
||||||
throw _iteratorError6;
|
throw _iteratorError10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.getPMChannel(key, value); //might be a PM
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "getPMChannel",
|
||||||
|
value: function getPMChannel(key, value) {
|
||||||
|
var _iteratorNormalCompletion11 = true;
|
||||||
|
var _didIteratorError11 = false;
|
||||||
|
var _iteratorError11 = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator11 = this.pmChannelCache[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {
|
||||||
|
var channel = _step11.value;
|
||||||
|
|
||||||
|
if (channel[key] === value) {
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError11 = true;
|
||||||
|
_iteratorError11 = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion11 && _iterator11["return"]) {
|
||||||
|
_iterator11["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError11) {
|
||||||
|
throw _iteratorError11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -754,29 +1001,29 @@ var Client = (function () {
|
|||||||
}, {
|
}, {
|
||||||
key: "getServer",
|
key: "getServer",
|
||||||
value: function getServer(key, value) {
|
value: function getServer(key, value) {
|
||||||
var _iteratorNormalCompletion7 = true;
|
var _iteratorNormalCompletion12 = true;
|
||||||
var _didIteratorError7 = false;
|
var _didIteratorError12 = false;
|
||||||
var _iteratorError7 = undefined;
|
var _iteratorError12 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator7 = this.serverCache[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
|
for (var _iterator12 = this.serverCache[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
|
||||||
var server = _step7.value;
|
var server = _step12.value;
|
||||||
|
|
||||||
if (server[key] === value) {
|
if (server[key] === value) {
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError7 = true;
|
_didIteratorError12 = true;
|
||||||
_iteratorError7 = err;
|
_iteratorError12 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion7 && _iterator7["return"]) {
|
if (!_iteratorNormalCompletion12 && _iterator12["return"]) {
|
||||||
_iterator7["return"]();
|
_iterator12["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError7) {
|
if (_didIteratorError12) {
|
||||||
throw _iteratorError7;
|
throw _iteratorError12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -851,27 +1098,27 @@ var Client = (function () {
|
|||||||
get: function get() {
|
get: function get() {
|
||||||
|
|
||||||
var msgs = [];
|
var msgs = [];
|
||||||
var _iteratorNormalCompletion8 = true;
|
var _iteratorNormalCompletion13 = true;
|
||||||
var _didIteratorError8 = false;
|
var _didIteratorError13 = false;
|
||||||
var _iteratorError8 = undefined;
|
var _iteratorError13 = undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (var _iterator8 = this.channelCache[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
|
for (var _iterator13 = this.channelCache[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {
|
||||||
var channel = _step8.value;
|
var channel = _step13.value;
|
||||||
|
|
||||||
msgs = msgs.concat(channel.messages);
|
msgs = msgs.concat(channel.messages);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
_didIteratorError8 = true;
|
_didIteratorError13 = true;
|
||||||
_iteratorError8 = err;
|
_iteratorError13 = err;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (!_iteratorNormalCompletion8 && _iterator8["return"]) {
|
if (!_iteratorNormalCompletion13 && _iterator13["return"]) {
|
||||||
_iterator8["return"]();
|
_iterator13["return"]();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
if (_didIteratorError8) {
|
if (_didIteratorError13) {
|
||||||
throw _iteratorError8;
|
throw _iteratorError13;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,61 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var User = require("./user.js").User;
|
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; }; })();
|
||||||
|
|
||||||
exports.PMChannel = function (user, id) {
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||||
this.user = new User(user);
|
|
||||||
this.id = id;
|
var PMChannel = (function () {
|
||||||
};
|
function PMChannel(data, client) {
|
||||||
|
_classCallCheck(this, PMChannel);
|
||||||
|
|
||||||
|
this.user = client.getUser("id", data.recipient.id);
|
||||||
|
this.id = data.id;
|
||||||
|
this.messages = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
_createClass(PMChannel, [{
|
||||||
|
key: "addMessage",
|
||||||
|
value: function addMessage(data) {
|
||||||
|
if (!this.getMessage("id", data.id)) {
|
||||||
|
this.messages.push(data);
|
||||||
|
}
|
||||||
|
return this.getMessage("id", data.id);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: "getMessage",
|
||||||
|
value: function getMessage(key, value) {
|
||||||
|
var _iteratorNormalCompletion = true;
|
||||||
|
var _didIteratorError = false;
|
||||||
|
var _iteratorError = undefined;
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (var _iterator = this.messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
||||||
|
var message = _step.value;
|
||||||
|
|
||||||
|
if (message[key] === value) {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
_didIteratorError = true;
|
||||||
|
_iteratorError = err;
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
if (!_iteratorNormalCompletion && _iterator["return"]) {
|
||||||
|
_iterator["return"]();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (_didIteratorError) {
|
||||||
|
throw _iteratorError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return PMChannel;
|
||||||
|
})();
|
||||||
|
|
||||||
|
module.exports = PMChannel;
|
||||||
161
src/Client.js
161
src/Client.js
@@ -5,6 +5,7 @@ var Server = require("./Server.js");
|
|||||||
var Channel = require("./Channel.js");
|
var Channel = require("./Channel.js");
|
||||||
var Message = require("./Message.js");
|
var Message = require("./Message.js");
|
||||||
var Invite = require("./Invite.js");
|
var Invite = require("./Invite.js");
|
||||||
|
var PMChannel = require("./PMChannel.js");
|
||||||
|
|
||||||
//node modules
|
//node modules
|
||||||
var request = require("superagent");
|
var request = require("superagent");
|
||||||
@@ -42,6 +43,7 @@ class Client {
|
|||||||
this.userCache = [];
|
this.userCache = [];
|
||||||
this.channelCache = [];
|
this.channelCache = [];
|
||||||
this.serverCache = [];
|
this.serverCache = [];
|
||||||
|
this.pmChannelCache = [];
|
||||||
this.readyTime = null;
|
this.readyTime = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,9 +276,9 @@ class Client {
|
|||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
var destination;
|
var destination;
|
||||||
|
|
||||||
if (serverOrChannel instanceof Server) {
|
if (serverOrChannel instanceof Server) {
|
||||||
destination = serverOrChannel.id;
|
destination = serverOrChannel.id;
|
||||||
} else if (serverOrChannel instanceof Channel) {
|
} else if (serverOrChannel instanceof Channel) {
|
||||||
@@ -296,10 +298,10 @@ class Client {
|
|||||||
.set("authorization", self.token)
|
.set("authorization", self.token)
|
||||||
.send(options)
|
.send(options)
|
||||||
.end(function (err, res) {
|
.end(function (err, res) {
|
||||||
if(err){
|
if (err) {
|
||||||
callback(err);
|
callback(err);
|
||||||
reject(err);
|
reject(err);
|
||||||
}else{
|
} else {
|
||||||
var inv = new Invite(res.body, self);
|
var inv = new Invite(res.body, self);
|
||||||
callback(null, inv);
|
callback(null, inv);
|
||||||
resolve(inv);
|
resolve(inv);
|
||||||
@@ -308,6 +310,132 @@ class Client {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startPM(user) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
var userId = user;
|
||||||
|
if (user instanceof User) {
|
||||||
|
userId = user.id;
|
||||||
|
}
|
||||||
|
request
|
||||||
|
.post(`${Endpoints.USERS}/${self.user.id}/channels`)
|
||||||
|
.set("authorization", self.token)
|
||||||
|
.send({
|
||||||
|
recipient_id: userId
|
||||||
|
})
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(self.addPMChannel(res.body));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessage(destination, message, callback = function (err, msg) { }) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
message = resolveMessage(message);
|
||||||
|
var mentions = resolveMentions();
|
||||||
|
destination = resolveDestination(destination);
|
||||||
|
|
||||||
|
if (destination)
|
||||||
|
send();
|
||||||
|
|
||||||
|
function send() {
|
||||||
|
|
||||||
|
request
|
||||||
|
.post(`${Endpoints.CHANNELS}/${destination}/messages`)
|
||||||
|
.set("authorization", self.token)
|
||||||
|
.send({
|
||||||
|
content: message,
|
||||||
|
mentions: mentions
|
||||||
|
})
|
||||||
|
.end(function (err, res) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
callback(err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
var data = res.body;
|
||||||
|
|
||||||
|
var mentions = [];
|
||||||
|
|
||||||
|
data.mentions = data.mentions || []; //for some reason this was not defined at some point?
|
||||||
|
|
||||||
|
for (var mention of data.mentions) {
|
||||||
|
mentions.push(self.addUser(mention));
|
||||||
|
}
|
||||||
|
|
||||||
|
var channel = self.getChannel("id", data.channel_id);
|
||||||
|
if (channel) {
|
||||||
|
var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author)));
|
||||||
|
callback(null, msg);
|
||||||
|
resolve(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveDestination() {
|
||||||
|
var channId = false;
|
||||||
|
|
||||||
|
if (destination instanceof Server) {
|
||||||
|
channId = destination.id; //general is the same as server id
|
||||||
|
} else if (destination instanceof Channel) {
|
||||||
|
channId = destination.id;
|
||||||
|
} else if (destination instanceof Message) {
|
||||||
|
channId = destination.channel.id;
|
||||||
|
} else if (destination instanceof User) {
|
||||||
|
|
||||||
|
//check if we have a PM
|
||||||
|
for (var pmc of self.pmChannelCache) {
|
||||||
|
if (pmc.user.equals(destination)) {
|
||||||
|
return pmc.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//we don't, at this point we're late
|
||||||
|
self.startPM(destination).then(function (pmc) {
|
||||||
|
destination = pmc.id;
|
||||||
|
send();
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
channId = destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
return channId;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveMessage() {
|
||||||
|
var msg = message;
|
||||||
|
if (message instanceof Array) {
|
||||||
|
msg = message.join("\n");
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveMentions() {
|
||||||
|
var _mentions = [];
|
||||||
|
for (var mention of (message.match(/<@[^>]*>/g) || [])) {
|
||||||
|
_mentions.push(mention.substring(2, mention.length - 1));
|
||||||
|
}
|
||||||
|
return _mentions;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//def createws
|
//def createws
|
||||||
createws() {
|
createws() {
|
||||||
@@ -355,9 +483,14 @@ class Client {
|
|||||||
var server = self.addServer(_server);
|
var server = self.addServer(_server);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var _pmc of data.private_channels) {
|
||||||
|
var pmc = self.addPMChannel(_pmc);
|
||||||
|
}
|
||||||
|
|
||||||
self.trigger("ready");
|
self.trigger("ready");
|
||||||
self.readyTime = Date.now();
|
self.readyTime = Date.now();
|
||||||
self.debug(`cached ${self.serverCache.length} servers, ${self.channelCache.length} channels 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.`);
|
||||||
|
|
||||||
setInterval(function () {
|
setInterval(function () {
|
||||||
self.keepAlive.apply(self);
|
self.keepAlive.apply(self);
|
||||||
@@ -480,7 +613,7 @@ class Client {
|
|||||||
|
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if(self.serverCreateListener.get(data.id)){
|
if (self.serverCreateListener.get(data.id)) {
|
||||||
var cbs = self.serverCreateListener.get(data.id);
|
var cbs = self.serverCreateListener.get(data.id);
|
||||||
cbs[0](server); //promise then callback
|
cbs[0](server); //promise then callback
|
||||||
cbs[1](null, server); //legacy callback
|
cbs[1](null, server); //legacy callback
|
||||||
@@ -609,6 +742,13 @@ class Client {
|
|||||||
}
|
}
|
||||||
return this.getChannel("id", data.id);
|
return this.getChannel("id", data.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addPMChannel(data) {
|
||||||
|
if (!this.getPMChannel("id", data.id)) {
|
||||||
|
this.pmChannelCache.push(new PMChannel(data, this));
|
||||||
|
}
|
||||||
|
return this.getPMChannel("id", data.id);
|
||||||
|
}
|
||||||
|
|
||||||
//def addServer
|
//def addServer
|
||||||
addServer(data) {
|
addServer(data) {
|
||||||
@@ -645,6 +785,15 @@ class Client {
|
|||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return this.getPMChannel(key, value); //might be a PM
|
||||||
|
}
|
||||||
|
|
||||||
|
getPMChannel(key, value) {
|
||||||
|
for (var channel of this.pmChannelCache) {
|
||||||
|
if (channel[key] === value) {
|
||||||
|
return channel;
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,25 @@
|
|||||||
var User = require("./user.js").User;
|
class PMChannel {
|
||||||
|
constructor(data, client) {
|
||||||
exports.PMChannel = function(user, id){
|
this.user = client.getUser("id", data.recipient.id);
|
||||||
this.user = new User(user);
|
this.id = data.id;
|
||||||
this.id = id;
|
this.messages = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
addMessage(data){
|
||||||
|
if(!this.getMessage("id", data.id)){
|
||||||
|
this.messages.push(data);
|
||||||
|
}
|
||||||
|
return this.getMessage("id", data.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
getMessage(key, value){
|
||||||
|
for(var message of this.messages){
|
||||||
|
if(message[key] === value){
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports = PMChannel;
|
||||||
@@ -15,8 +15,12 @@ mybot.on("ready", function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
mybot.on("message", function (msg) {
|
mybot.on("message", function (msg) {
|
||||||
console.log("Another message by " + msg.author.username + "... now I have " + mybot.messages.length + " I have been online for " + mybot.uptime);
|
|
||||||
})
|
if(msg.content === "pmme"){
|
||||||
|
mybot.sendMessage(msg.channel, "You know what "+msg.sender+"? NO");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
mybot.on("messageDelete", function (channel, message) {
|
mybot.on("messageDelete", function (channel, message) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user