Mount event listener only if message was sent out successfully #42
@ -25,7 +25,7 @@ export default class Base extends EventEmitter {
|
|||||||
* gets the Update object containing message
|
* gets the Update object containing message
|
||||||
*
|
*
|
||||||
* @param {object} bot
|
* @param {object} bot
|
||||||
* @return {promise} returns a promise, resolved with message:answer
|
* @return {Promise} returns a promise, resolved with message:answer
|
||||||
*/
|
*/
|
||||||
send(bot) {
|
send(bot) {
|
||||||
if (this._keyboard) {
|
if (this._keyboard) {
|
||||||
@ -33,46 +33,47 @@ export default class Base extends EventEmitter {
|
|||||||
this.properties.reply_markup = replyMarkup;
|
this.properties.reply_markup = replyMarkup;
|
||||||
}
|
}
|
||||||
|
|
||||||
let messageId;
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this._apiSend(bot)
|
this._apiSend(bot)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
messageId = response.result.message_id;
|
|
||||||
this.emit('message:sent', response);
|
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) {
|
bot.on('update', function listener(result) {
|
||||||
this._keyboard.replyMarkup = '';
|
answers += result.length;
|
||||||
}
|
|
||||||
|
|
||||||
const chat = this.properties.chat_id;
|
const update = result.find(({ message }) => {
|
||||||
let answers = 0;
|
// 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) {
|
return message && message.chat.id === chat;
|
||||||
answers += result.length;
|
});
|
||||||
|
|
||||||
const update = result.find(({ message }) => {
|
if (update) {
|
||||||
// if in a group, there will be a reply to this message
|
resolve(update.message);
|
||||||
if (chat < 0) {
|
this.emit('message:answer', update.message);
|
||||||
return message.chat.id === chat
|
bot.removeListener('update', listener);
|
||||||
&& message.reply_to_message
|
}
|
||||||
&& message.reply_to_message.message_id === messageId;
|
|
||||||
|
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user