diff --git a/src/telegram.js b/src/telegram.js index 2a0a49e..cde1858 100644 --- a/src/telegram.js +++ b/src/telegram.js @@ -140,6 +140,14 @@ class TelegramBot extends EventEmitter { throw new Error(`Error parsing Telegram response: ${String(json)}`); } } + + _fixReplyMarkup(obj) { + const replyMarkup = obj.reply_markup; + if (replyMarkup && typeof replyMarkup !== 'string') { + // reply_markup must be passed as JSON stringified to Telegram + obj.reply_markup = JSON.stringify(replyMarkup); + } + } // request-promise _request(_path, options = {}) { @@ -148,11 +156,10 @@ class TelegramBot extends EventEmitter { } if (options.form) { - const replyMarkup = options.form.reply_markup; - if (replyMarkup && typeof replyMarkup !== 'string') { - // reply_markup must be passed as JSON stringified to Telegram - options.form.reply_markup = JSON.stringify(replyMarkup); - } + this._fixReplyMarkup(options.form); + } + if (options.qs) { + this._fixReplyMarkup(options.qs); } options.url = this._buildURL(_path); options.simple = false; diff --git a/test/index.js b/test/index.js index 4ed771d..207a015 100644 --- a/test/index.js +++ b/test/index.js @@ -205,6 +205,18 @@ describe('Telegram', function telegramSuite() { assert.ok(is.object(resp)); }); }); + + it('should send a photo along with reply_markup', function test() { + const bot = new Telegram(TOKEN); + const photo = fs.readFileSync(`${__dirname}/bot.gif`); + return bot.sendPhoto(USERID, photo, { + reply_markup: { + hide_keyboard: true + } + }).then(resp => { + assert.ok(is.object(resp)); + }); + }); }); describe('#sendChatAction', function sendChatActionSuite() {