diff --git a/package-lock.json b/package-lock.json index 4f16ce347..a19b54802 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "express": "4.21.2", "ical-browser": "0.1.4", "minimist": "1.2.8", + "minisearch": "7.1.1", "pdf-to-png-converter": "3.6.4", "request-json-rpc2": "2.3.0", "telegram-bot-activitystreams": "1.0.7", @@ -9027,6 +9028,12 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/minisearch": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.1.tgz", + "integrity": "sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 415c63b7d..a61599969 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "express": "4.21.2", "ical-browser": "0.1.4", "minimist": "1.2.8", + "minisearch": "7.1.1", "pdf-to-png-converter": "3.6.4", "request-json-rpc2": "2.3.0", "telegram-bot-activitystreams": "1.0.7", diff --git a/src/actions/private/text.cjs b/src/actions/private/text.cjs index 10067af02..9e985716a 100644 --- a/src/actions/private/text.cjs +++ b/src/actions/private/text.cjs @@ -47,7 +47,7 @@ module.exports = async (bot, message, dialog) => { const data = `Что: ${name}\n` + `Где: ${location?.name ?? '-'}\n` + - `Когда: ${time}\n` + + `Когда: ${time} ${dialog.user.timezone} \n` + 'Напомнить за: 15 минут\n\n'; // todo убрать хардкод await sendPrepareMessage(bot, message); const googleCalendarUrl = formatGoogleCalendarUrl({ @@ -98,6 +98,7 @@ module.exports = async (bot, message, dialog) => { }); await saveCalendar({ id: message.chat.id + '' + myMessage.message_id, + userId: message.chat.id, title: name, details: summary, location: location?.name, diff --git a/src/actions/system/registration-phone.cjs b/src/actions/system/registration-phone.cjs index 7eec780a9..7e07a622f 100644 --- a/src/actions/system/registration-phone.cjs +++ b/src/actions/system/registration-phone.cjs @@ -62,7 +62,7 @@ module.exports = async (bot, message, dialog) => { width: page.width, height: page.height, caption: - page.pageNumber === 0 + page.pageNumber === 1 ? 'Вы зарегистрированы!\nПродолжая использовать сервис вы принимаете условия пользовательского соглашения.' : undefined, }; diff --git a/src/index.cjs b/src/index.cjs index 420b1bf39..45a635693 100644 --- a/src/index.cjs +++ b/src/index.cjs @@ -74,7 +74,7 @@ const { bot, middleware } = botController({ ['video_note']: checkAuth(videoAction), ['document']: checkAuth(documentAction), ['contact']: checkAuth(contactAction), - ['inline_query']: checkAuth(inlineAction), + ['inline_query']: inlineAction, ['message_forwards']: checkAuth(textForwards), ['reply_to_message']: checkAuth(replyToMessageAction), ['pinned_message']: () => {}, diff --git a/src/libs/dialog.cjs b/src/libs/dialog.cjs index 01f0dabfe..e46ee22e9 100644 --- a/src/libs/dialog.cjs +++ b/src/libs/dialog.cjs @@ -11,11 +11,6 @@ class Dialog { */ constructor(user) { this.user = user; - this.clear(); - const x = getMessages(user.id); - } - clear() { - clearMessageById(this.user.id); this._activity = { '@context': ['https://www.w3.org/ns/activitystreams'], 'summary': '', @@ -24,6 +19,9 @@ class Dialog { 'items': [], }; } + clear() { + clearMessageById(this.user.id); + } /** * @description Обрабатывает входящее сообщение и добавляет его в активность. * @param {object} message - Входящее сообщение. diff --git a/src/libs/minisearch.cjs b/src/libs/minisearch.cjs new file mode 100644 index 000000000..44003ada7 --- /dev/null +++ b/src/libs/minisearch.cjs @@ -0,0 +1,27 @@ +const MiniSearch = require('minisearch'); +const { getCalendarsByUser } = require('../models/calendars.cjs'); + +const miniSearch = new MiniSearch({ + fields: ['title', 'details'], + storeFields: ['title', 'details'], +}); + +async function indexAllCalendars(userId) { + if (miniSearch.documentCount === 0) { + const documents = []; + for (const calendar of getCalendarsByUser(userId)) { + console.log('calendar', calendar) + documents.push({ + id: calendar.id, + title: calendar.title, + details: calendar.details, + }); + } + console.log('documents', documents) + await miniSearch.addAllAsync(documents); + } +} + +module.exports.indexAllCalendars = indexAllCalendars; +module.exports.miniSearch = miniSearch; +module.exports.MiniSearch = MiniSearch; diff --git a/src/models/calendars.cjs b/src/models/calendars.cjs index 771817a9d..c5cee8988 100644 --- a/src/models/calendars.cjs +++ b/src/models/calendars.cjs @@ -4,6 +4,7 @@ function createCalendarsTable() { calendarsDB.exec(` CREATE TABLE if not exists calendars( id INTEGER PRIMARY KEY, + user_id TEXT, message_id INTEGER, title TEXT, details TEXT NULL, @@ -28,10 +29,18 @@ module.exports.getCalendarMessage = (id) => { return events[0]; }; +module.exports.getCalendarsByUser = (userId) => { + const query = calendarsDB.prepare(`SELECT * FROM calendars WHERE user_id == ${userId}`); + const events = query.all(); + + return events; +}; + /** * @description сохранение в базу SQLite на временное хранилище * @param {object} calendar - объект события * @param {number} calendar.id - идентификатор сообщения + * @param {string} calendar.userId - идентификатор пользователя * @param {string} calendar.title - заголовок события * @param {string} [calendar.details] - детали события * @param {string|null} [calendar.location] - местоположение события @@ -39,12 +48,13 @@ module.exports.getCalendarMessage = (id) => { * @param {string} calendar.end - время окончания события * @param {number[]} [calendar.geo] - geo координата события */ -module.exports.saveCalendar = ({ id, title, details = '', location = null, start, end, geo = [] }) => { +module.exports.saveCalendar = ({ id, userId, title, details = '', location = null, start, end, geo = [] }) => { const insert = calendarsDB.prepare(` - INSERT INTO calendars (message_id, title, details, location, start, end, geo) - VALUES (:message_id, :title, :details, :location, :start, :end, :geo)`); + INSERT INTO calendars (message_id, user_id, title, details, location, start, end, geo) + VALUES (:message_id, :user_id, :title, :details, :location, :start, :end, :geo)`); insert.run({ message_id: id, + user_id: userId, title: title, details: details, location: location,