From f6beebe241bac4f7aea38e1c39e18ba1eb1dae09 Mon Sep 17 00:00:00 2001 From: Laurynas Karvelis Date: Wed, 21 Mar 2018 13:29:05 +0200 Subject: [PATCH] Mount bot.on('update') event listener only if message was sent out successfully; Reset one time keyboard after api.send request has been done --- src/types/Base.js | 61 ++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/src/types/Base.js b/src/types/Base.js index 23a259c..d8ba44d 100644 --- a/src/types/Base.js +++ b/src/types/Base.js @@ -25,7 +25,7 @@ export default class Base extends EventEmitter { * gets the Update object containing message * * @param {object} bot - * @return {promise} returns a promise, resolved with message:answer + * @return {Promise} returns a promise, resolved with message:answer */ send(bot) { if (this._keyboard) { @@ -33,46 +33,47 @@ export default class Base extends EventEmitter { this.properties.reply_markup = replyMarkup; } - let messageId; return new Promise((resolve, reject) => { this._apiSend(bot) .then(response => { - messageId = response.result.message_id; this.emit('message:sent', response); + return response.result.message_id; }) - .catch(reject); + .then(messageId => { + const chat = this.properties.chat_id; + let answers = 0; - if (this._keyboard.one_time_keyboard) { - this._keyboard.replyMarkup = ''; - } + bot.on('update', function listener(result) { + answers += result.length; - const chat = this.properties.chat_id; - let answers = 0; + const update = result.find(({ message }) => { + // if in a group, there will be a reply to this message + if (chat < 0) { + return message.chat.id === chat + && message.reply_to_message + && message.reply_to_message.message_id === messageId; + } - bot.on('update', function listener(result) { - answers += result.length; + return message && message.chat.id === chat; + }); - const update = result.find(({ message }) => { - // if in a group, there will be a reply to this message - if (chat < 0) { - return message.chat.id === chat - && message.reply_to_message - && message.reply_to_message.message_id === messageId; + if (update) { + resolve(update.message); + this.emit('message:answer', update.message); + bot.removeListener('update', listener); + } + + if (answers >= ANSWER_THRESHOLD) { + bot.removeListener('update', listener); + } + }); + }) + .catch(reject) + .finally(() => { + if (this._keyboard.one_time_keyboard) { + this._keyboard.replyMarkup = ''; } - - return message && message.chat.id === chat; }); - - if (update) { - resolve(update.message); - this.emit('message:answer', update.message); - bot.removeListener('update', listener); - } - - if (answers >= ANSWER_THRESHOLD) { - bot.removeListener('update', listener); - } - }); }); } -- 2.34.1