diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 1969ee0e3..0c01e597f 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -223,10 +223,15 @@ 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]; + Client.prototype.sendFile = function sendFile(where, attachment, name) { var callback = arguments.length <= 3 || arguments[3] === undefined ? function () /*err, m*/{} : arguments[3]; + if (typeof name === "function") { + // name is the callback + callback = name; + name = undefined; // Will get resolved into original filename in internal + } + return this.internal.sendFile(where, attachment, name).then(dataCallback(callback), errorCallback(callback)); }; diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 40bfd11d9..38a8a8634 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -573,10 +573,19 @@ var InternalClient = (function () { // def sendFile - InternalClient.prototype.sendFile = function sendFile(where, _file) { + InternalClient.prototype.sendFile = function sendFile(where, _file, name) { var _this15 = this; - var name = arguments.length <= 2 || arguments[2] === undefined ? "image.png" : arguments[2]; + if (!name) { + if (_file instanceof String || typeof _file === "string") { + name = require("path").basename(attachment); + } else if (_file.path) { + // fs.createReadStream()'s have .path that give the path. Not sure about other streams though. + name = require("path").basename(_file.path); + } else { + name = "image.png"; // Just have to go with default filenames. + } + } return this.resolver.resolveChannel(where).then(function (channel) { return _this15.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id), true, null, { diff --git a/src/Client/Client.js b/src/Client/Client.js index 0aa91c152..7ce43d3fa 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -203,7 +203,13 @@ export default class Client extends EventEmitter { } // def sendFile - sendFile(where, attachment, name = "image.png", callback = (/*err, m*/) => { }) { + sendFile(where, attachment, name, callback = (/*err, m*/) => { }) { + if (typeof name === "function") { + // name is the callback + callback = name; + name = undefined; // Will get resolved into original filename in internal + } + return this.internal.sendFile(where, attachment, name) .then(dataCallback(callback), errorCallback(callback)); } diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index ee745b7dd..e6f51937a 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -461,7 +461,19 @@ export default class InternalClient { } // def sendFile - sendFile(where, _file, name = "image.png") { + sendFile(where, _file, name) { + + if (!name) { + if (_file instanceof String || typeof _file === "string") { + name = require("path").basename(attachment); + } else if (_file.path) { + // fs.createReadStream()'s have .path that give the path. Not sure about other streams though. + name = require("path").basename(_file.path); + } else { + name = "image.png"; // Just have to go with default filenames. + } + } + return this.resolver.resolveChannel(where) .then(channel => this.apiRequest("post", Endpoints.CHANNEL_MESSAGES(channel.id), true, null, {