diff --git a/src/actions/public/voice.cjs b/src/actions/public/voice.cjs index 2391e7e4f..5655110ad 100644 --- a/src/actions/public/voice.cjs +++ b/src/actions/public/voice.cjs @@ -32,7 +32,7 @@ module.exports = async (bot, userMessage, dialog) => { inline_keyboard: inlineKeyboard, }, }); - dialog.push(userMessage); + dialog.push(assistMessage); await bot.sendMessage(userMessage.chat.id, 'Все верно?', { reply_to_message_id: assistMessage.message_id, disable_notification: true, diff --git a/src/actions/system/generate-calendar.cjs b/src/actions/system/generate-calendar.cjs index af82d7b63..8a0e51e58 100644 --- a/src/actions/system/generate-calendar.cjs +++ b/src/actions/system/generate-calendar.cjs @@ -23,6 +23,7 @@ module.exports = async (bot, message, dialog) => { if (!event) { throw new Error('Событие не найдено'); } + dialog.clear(); await bot.setMessageReaction(message.chat.id, message.reply_to_message.message_id, { reaction: JSON.stringify([ { @@ -74,7 +75,6 @@ module.exports = async (bot, message, dialog) => { ics: icalendar.ics, user: user, }); - dialog.clear(); let webAppUrl = `${SERVER.APP_URL}/?lang=${message.reply_to_message?.from?.language_code}`; // eslint-disable-next-line unicorn/consistent-destructuring if (SERVER.IS_DEV) { diff --git a/src/libs/dialog.cjs b/src/libs/dialog.cjs index d72cc9c26..61cd1d715 100644 --- a/src/libs/dialog.cjs +++ b/src/libs/dialog.cjs @@ -18,6 +18,9 @@ class Dialog { } this.user = user; } + /** + * Удаление сообщений из базы данных + */ clear() { clearMessageById(this.user.id); } @@ -45,7 +48,10 @@ class Dialog { 'items': [], }; const messages = getMessages(this.user.id); - for (let { message } of messages) { + + // отправляем только последнее сообщение от ассистента и следующие за ним сообщения от пользователя + // eslint-disable-next-line prefer-const + for (let { message, role } of messages.reverse()) { message = JSON.parse(message); const activity = activitystreams(message); activity.type = 'Activity'; @@ -91,7 +97,11 @@ class Dialog { throw new Error('Unknown type message'); } activities.totalItems++; - activities.items.push(activity); + activities.items.unshift(activity); + + if (role === 'assistant') { + break; + } } return activities; diff --git a/src/models/messages.cjs b/src/models/messages.cjs index b84110de5..006431a31 100644 --- a/src/models/messages.cjs +++ b/src/models/messages.cjs @@ -48,12 +48,12 @@ module.exports.getMessages = (userId) => { }; /** * @description Очистка сообщений из базы данных по идентификатору сообщения - * @param {number} messageId - идентификатор сообщения + * @param {number} chatId - идентификатор пользователя */ -module.exports.clearMessageById = (messageId) => { +module.exports.clearMessageById = (chatId) => { const clear = messageDB.prepare(` DELETE FROM messages - WHERE message_id == ? + WHERE chat_id == ? `); - clear.run(messageId); + clear.run(chatId); };