diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 7a4a879da..8f9821dab 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -161,7 +161,7 @@ var Client = (function (_EventEmitter) { callback = options; } - self.internal.deleteMessage(msg).then(function () { + self.internal.deleteMessage(msg, options).then(function () { callback(); resolve(); })["catch"](function (e) { @@ -217,6 +217,24 @@ var Client = (function (_EventEmitter) { }); }; + // def sendFile + + Client.prototype.sendFile = function sendFile(where, attachment) { + var name = arguments.length <= 2 || arguments[2] === undefined ? "image.png" : arguments[2]; + var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err, m) {} : arguments[3]; + + var self = this; + return new Promise(function (resolve, reject) { + self.internal.sendFile(where, attachment, name).then(function (m) { + callback(null, m); + resolve(m); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + return Client; })(EventEmitter); diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 8c4d88777..1f5eefcc3 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -251,6 +251,33 @@ var InternalClient = (function () { }); }; + InternalClient.prototype.sendFile = function sendFile(where, _file) { + var name = arguments.length <= 2 || arguments[2] === undefined ? "image.png" : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + self.resolver.resolveChannel(where).then(next)["catch"](function (e) { + return reject(new Error("couldn't resolve to channel - " + e)); + }); + + function next(channel) { + + var file = self.resolver.resolveFile(_file); + + request.post(Endpoints.CHANNEL_MESSAGES(channel.id)).set("authorization", self.token).attach("file", file, name).end(function (err, res) { + + if (err) { + reject(new Error(err.response.text)); + } else { + resolve(channel.messages.add(new Message(res.body, channel, self.client))); + } + }); + } + }); + }; + + // def getChannelLogs + InternalClient.prototype.getChannelLogs = function getChannelLogs(_channel) { var limit = arguments.length <= 1 || arguments[1] === undefined ? 500 : arguments[1]; var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; diff --git a/lib/Client/Resolver/Resolver.js b/lib/Client/Resolver/Resolver.js index 0f2af0ce8..8c250e6f1 100644 --- a/lib/Client/Resolver/Resolver.js +++ b/lib/Client/Resolver/Resolver.js @@ -2,6 +2,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var fs = require("fs"); + var User = require("../../Structures/User.js"), Channel = require("../../Structures/Channel.js"), TextChannel = require("../../Structures/TextChannel.js"), @@ -18,6 +20,14 @@ var Resolver = (function () { this.internal = internal; } + Resolver.prototype.resolveFile = function resolveFile(resource) { + if (typeof resource === "string" || resource instanceof String) { + return fs.createReadStream(resource); + } else { + return resource; + } + }; + Resolver.prototype.resolveMentions = function resolveMentions(resource) { // resource is a string var _mentions = []; diff --git a/lib/index.js b/lib/index.js index 5feab2f4d..a65047d35 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,26 +9,7 @@ a.on("debug", function (m) { return console.log("[debug]", m); }); -a.on("message", function (m) { - if (m.content === "$$$") a.getChannelLogs(m).then(function (logs) { - for (var _iterator = logs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var item = _ref; - - console.log(item.author.username + "> " + item.content); - } - }); -}); +a.on("message", function (m) {}); a.login(process.env["discordEmail"], process.env["discordPass"])["catch"](function (e) { return console.log(e); diff --git a/src/Client/Client.js b/src/Client/Client.js index 713702125..0f369ee53 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -138,7 +138,7 @@ class Client extends EventEmitter { callback = options; } - self.internal.deleteMessage(msg) + self.internal.deleteMessage(msg, options) .then(() => { callback(); resolve(); @@ -194,6 +194,23 @@ class Client extends EventEmitter { }); } + + // def sendFile + sendFile(where, attachment, name="image.png", callback=function(err, m){}){ + var self = this; + return new Promise((resolve, reject) => { + self.internal.sendFile(where, attachment, name) + .then( m => { + callback(null, m); + resolve(m); + }) + .catch( e => { + callback(e); + reject(e); + }); + + }); + } } module.exports = Client; \ No newline at end of file diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index a6b7baeb2..7f766e552 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -280,7 +280,37 @@ class InternalClient { }); } + + sendFile(where, _file, name="image.png"){ + var self = this; + return new Promise((resolve, reject) => { + self.resolver.resolveChannel(where) + .then(next) + .catch(e => reject(new Error("couldn't resolve to channel - " + e))); + function next(channel) { + + var file = self.resolver.resolveFile(_file); + + request + .post(Endpoints.CHANNEL_MESSAGES(channel.id)) + .set("authorization", self.token) + .attach("file", file, name) + .end((err, res) => { + + if(err){ + reject(new Error(err.response.text)); + }else{ + resolve(channel.messages.add(new Message(res.body, channel, self.client))); + } + + }); + + } + }); + } + + // def getChannelLogs getChannelLogs(_channel, limit = 500, options = {}) { var self = this; return new Promise((resolve, reject) => { diff --git a/src/Client/Resolver/Resolver.js b/src/Client/Resolver/Resolver.js index e8213d2d3..ac28af3fb 100644 --- a/src/Client/Resolver/Resolver.js +++ b/src/Client/Resolver/Resolver.js @@ -1,5 +1,7 @@ "use strict"; +var fs = require("fs"); + var User = require("../../Structures/User.js"), Channel = require("../../Structures/Channel.js"), TextChannel = require("../../Structures/TextChannel.js"), @@ -14,6 +16,14 @@ class Resolver { this.internal = internal; } + resolveFile(resource) { + if (typeof resource === "string" || resource instanceof String) { + return fs.createReadStream(resource); + } else { + return resource; + } + } + resolveMentions(resource) { // resource is a string var _mentions = []; @@ -41,9 +51,9 @@ class Resolver { accepts a Message, Channel, Server, String ID, User, PMChannel */ var found = null; - if( resource instanceof User ){ - found = resource; - }else if (resource instanceof Message) { + if (resource instanceof User) { + found = resource; + } else if (resource instanceof Message) { found = resource.author; } else if (resource instanceof TextChannel) { var lmsg = resource.lastMessage; @@ -60,17 +70,17 @@ class Resolver { return found; } - + resolveMessage(resource) { // accepts a Message, PMChannel & TextChannel var found = null; - - if( resource instanceof TextChannel || resource instanceof PMChannel ){ + + if (resource instanceof TextChannel || resource instanceof PMChannel) { found = resource.lastMessage; - }else if( resource instanceof Message ){ + } else if (resource instanceof Message) { found = resource; } - + return found; } diff --git a/src/index.js b/src/index.js index 2f6120186..52f45afe1 100644 --- a/src/index.js +++ b/src/index.js @@ -6,12 +6,6 @@ var a = new module.exports.Client(); a.on("debug", (m) => console.log("[debug]",m)); a.on("message", m => { - if(m.content === "$$$") - a.getChannelLogs(m).then( logs => { - for(var item of logs){ - console.log(item.author.username + "> " + item.content); - } - }); }); a.login(process.env["discordEmail"], process.env["discordPass"]).catch((e)=>console.log(e)); \ No newline at end of file