diff --git a/build/functions/argument-parser.js b/build/functions/argument-parser.js index 9c5d9e0..d279825 100644 --- a/build/functions/argument-parser.js +++ b/build/functions/argument-parser.js @@ -43,8 +43,13 @@ var ESCAPABLE = '.^$*+?()[{\\|}]'.split(''); */ function argumentParser(format, string) { - string = string.replace(/[^\s]+/, ''); - format = format.replace(/[^\s]+/, ''); + string = string.replace(/[^\s]+/, '').trim(); + format = format.replace(/[^\s]+/, '').trim(); + + if (!string || !format) { + return {}; + } + var indexes = []; format = format.replace(/\s/g, '\\s*'); diff --git a/build/functions/fetch.js b/build/functions/fetch.js index 97275ee..32830b3 100644 --- a/build/functions/fetch.js +++ b/build/functions/fetch.js @@ -8,25 +8,49 @@ exports.getBody = getBody; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } -var _restler = require('restler'); +var _unirest = require('unirest'); -var _restler2 = _interopRequireDefault(_restler); +var _unirest2 = _interopRequireDefault(_unirest); function fetch(path) { var data = arguments[1] === undefined ? {} : arguments[1]; return new Promise(function (resolve, reject) { - var method = Object.keys(data).length ? 'POST' : 'GET'; - var multipart = method === 'POST' ? true : false; + var files = {}; - _restler2['default'].request('https://api.telegram.org/bot' + path, { - data: data, method: method, multipart: multipart - }).on('complete', function (response) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = Object.keys(data)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var key = _step.value; + + if (data[key].file) { + files[key] = data[key].file; + delete data[key]; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { try { - var json = JSON.parse(response); - resolve(json); - } catch (e) { - reject(e); + if (!_iteratorNormalCompletion && _iterator['return']) { + _iterator['return'](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + _unirest2['default'].post('https://api.telegram.org/bot' + path).field(data).attach(files).end(function (response) { + if (response.statusType === 4 || response.statusType === 5) { + reject(response); + } else { + resolve(response.body); } }); }); diff --git a/build/index.js b/build/index.js index 76d026e..bde391d 100644 --- a/build/index.js +++ b/build/index.js @@ -154,7 +154,7 @@ var Bot = (function (_EventEmitter) { value: function command(_command, listener) { var regex = /[^\s]+/; - var cmd = _command.match(regex)[0]; + var cmd = _command.match(regex)[0].trim(); this._userEvents.push({ pattern: new RegExp('^/' + cmd), diff --git a/build/types/File.js b/build/types/File.js index 04e78e6..30f54f4 100644 --- a/build/types/File.js +++ b/build/types/File.js @@ -24,18 +24,6 @@ var _mime = require('mime'); var _mime2 = _interopRequireDefault(_mime); -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _restler = require('restler'); - -var _restler2 = _interopRequireDefault(_restler); - var TYPES = ['photo', 'video', 'document', 'audio']; /** @@ -85,14 +73,11 @@ var File = (function (_Base) { */ value: function file(_file, fileType) { if (fileType) { - this.properties[fileType] = _file; + this.properties[fileType] = { file: _file }; return this; } - var stat = _fs2['default'].statSync(_file); - var name = _path2['default'].basename(_file); - var _mime$lookup$split = _mime2['default'].lookup(_file).split('/'); var _mime$lookup$split2 = _slicedToArray(_mime$lookup$split, 2); @@ -112,7 +97,7 @@ var File = (function (_Base) { type = 'document'; } - this.properties[type] = _restler2['default'].file(_file, name, stat.size, 'utf-8'); + this.properties[type] = { file: _file }; this.method = 'send' + (type[0].toUpperCase() + type.slice(1)); diff --git a/lib/functions/argument-parser.js b/lib/functions/argument-parser.js index 39e2006..dd9aac6 100644 --- a/lib/functions/argument-parser.js +++ b/lib/functions/argument-parser.js @@ -33,8 +33,13 @@ const ESCAPABLE = '.^$*+?()[{\\|}]'.split(''); * @return {object} Parsed arguments */ export default function argumentParser(format, string) { - string = string.replace(/[^\s]+/, ''); - format = format.replace(/[^\s]+/, ''); + string = string.replace(/[^\s]+/, '').trim(); + format = format.replace(/[^\s]+/, '').trim(); + + if (!string || !format) { + return {}; + } + let indexes = []; format = format.replace(/\s/g, '\\s*'); diff --git a/lib/functions/fetch.js b/lib/functions/fetch.js index d0ebe96..e88461f 100644 --- a/lib/functions/fetch.js +++ b/lib/functions/fetch.js @@ -1,18 +1,24 @@ -import restler from 'restler'; +import unirest from 'unirest'; export default function fetch(path, data = {}) { return new Promise((resolve, reject) => { - const method = Object.keys(data).length ? 'POST' : 'GET'; - const multipart = method === 'POST' ? true : false; + const files = {}; - restler.request('https://api.telegram.org/bot' + path, { - data, method, multipart - }).on('complete', response => { - try { - let json = JSON.parse(response); - resolve(json); - } catch(e) { - reject(e); + for (let key of Object.keys(data)) { + if (data[key].file) { + files[key] = data[key].file; + delete data[key]; + } + } + + unirest.post('https://api.telegram.org/bot' + path) + .field(data) + .attach(files) + .end(response => { + if (response.statusType === 4 || response.statusType === 5) { + reject(response); + } else { + resolve(response.body); } }); }); diff --git a/lib/index.js b/lib/index.js index c5871c3..1d9add8 100644 --- a/lib/index.js +++ b/lib/index.js @@ -109,7 +109,7 @@ export default class Bot extends EventEmitter { command(command, listener) { const regex = /[^\s]+/; - const cmd = command.match(regex)[0]; + const cmd = command.match(regex)[0].trim(); this._userEvents.push({ pattern: new RegExp(`^/${cmd}`), diff --git a/lib/types/File.js b/lib/types/File.js index 39fbfa6..8fed1d7 100644 --- a/lib/types/File.js +++ b/lib/types/File.js @@ -1,8 +1,5 @@ import Base from './Base'; import mime from 'mime'; -import fs from 'fs'; -import path from 'path'; -import restler from 'restler'; const TYPES = ['photo', 'video', 'document', 'audio']; @@ -40,14 +37,11 @@ export default class File extends Base { */ file(file, fileType) { if (fileType) { - this.properties[fileType] = file; + this.properties[fileType] = {file: file}; return this; } - const stat = fs.statSync(file); - const name = path.basename(file); - let [type, extension] = mime.lookup(file).split('/'); if (type === 'image') { type = 'photo'; @@ -61,7 +55,7 @@ export default class File extends Base { type = 'document'; } - this.properties[type] = restler.file(file, name, stat.size, 'utf-8'); + this.properties[type] = {file: file}; this.method = `send${type[0].toUpperCase() + type.slice(1)}`; diff --git a/package.json b/package.json index 125b3cf..5d263c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "telegram-api", - "version": "0.4.65", + "version": "0.4.70", "description": "Control Telegram bots easily using the new Telegram API", "main": "index.js", "scripts": { @@ -21,7 +21,11 @@ "bugs": { "url": "https://github.com/mdibaiee/node-telegram-api/issues" }, - "files": ["types", "build", "index.js"], + "files": [ + "types", + "build", + "index.js" + ], "directories": { "lib": "lib" }, @@ -38,6 +42,6 @@ "grunt-eslint": "^16.0.0", "mime": "^1.3.4", "qs": "^4.0.0", - "restler": "^3.3.0" + "unirest": "^0.4.2" } } diff --git a/types/File.js b/types/File.js index 04e78e6..30f54f4 100644 --- a/types/File.js +++ b/types/File.js @@ -24,18 +24,6 @@ var _mime = require('mime'); var _mime2 = _interopRequireDefault(_mime); -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _path = require('path'); - -var _path2 = _interopRequireDefault(_path); - -var _restler = require('restler'); - -var _restler2 = _interopRequireDefault(_restler); - var TYPES = ['photo', 'video', 'document', 'audio']; /** @@ -85,14 +73,11 @@ var File = (function (_Base) { */ value: function file(_file, fileType) { if (fileType) { - this.properties[fileType] = _file; + this.properties[fileType] = { file: _file }; return this; } - var stat = _fs2['default'].statSync(_file); - var name = _path2['default'].basename(_file); - var _mime$lookup$split = _mime2['default'].lookup(_file).split('/'); var _mime$lookup$split2 = _slicedToArray(_mime$lookup$split, 2); @@ -112,7 +97,7 @@ var File = (function (_Base) { type = 'document'; } - this.properties[type] = _restler2['default'].file(_file, name, stat.size, 'utf-8'); + this.properties[type] = { file: _file }; this.method = 'send' + (type[0].toUpperCase() + type.slice(1));