1 | # LSK.js – bots
|
2 |
|
3 | > @lskjs/bots – LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation
|
4 |
|
5 | [![LSK logo](https://badgen.net/badge/icon/MADE%20BY%20LSK?icon=zeit\&label\&color=red\&labelColor=red)](https://github.com/lskjs)
|
6 | [![NPM version](https://badgen.net/npm/v/@lskjs/bots)](https://www.npmjs.com/package/@lskjs/bots)
|
7 | [![NPM downloads](https://badgen.net/npm/dt/@lskjs/bots)](https://www.npmjs.com/package/@lskjs/bots)
|
8 | [![NPM Dependency count](https://badgen.net/bundlephobia/dependency-count/@lskjs/bots)](https://bundlephobia.com/result?p=@lskjs/bots)
|
9 | [![Have TypeScript types](https://badgen.net/npm/types/@lskjs/bots)](https://www.npmjs.com/package/@lskjs/bots)
|
10 | [![Have tree shaking](https://badgen.net/bundlephobia/tree-shaking/@lskjs/bots)](https://bundlephobia.com/result?p=@lskjs/bots)
|
11 | [![NPM Package size](https://badgen.net/bundlephobia/minzip/@lskjs/bots)](https://bundlephobia.com/result?p=@lskjs/bots)
|
12 | [![Package size](https://badgen.net//github/license/lskjs/lskjs)](https://github.com/lskjs/lskjs/blob/master/LICENSE)
|
13 | [![Ask us in Telegram](https://img.shields.io/badge/Ask%20us%20in-Telegram-brightblue.svg)](https://t.me/lskjschat)
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | ***
|
20 |
|
21 |
|
22 |
|
23 | # Table of contents
|
24 |
|
25 | * [⌨️ Install](#️-install)
|
26 |
|
27 | * [Bots Plugin Portal](#bots-plugin-portal)
|
28 |
|
29 | * [Правила (rules)](#правила-rules)
|
30 |
|
31 | * [`cron`](#cron)
|
32 | * [`criteria`](#criteria)
|
33 | * [`action`](#action)
|
34 |
|
35 | * [Параметры, используемые при настройке критериев:](#параметры-используемые-при-настройке-критериев)
|
36 |
|
37 | * [Список действий, которые реализованы в плагине:](#список-действий-которые-реализованы-в-плагине)
|
38 |
|
39 | * [createMessage](#createmessage)
|
40 | * [messageAppend](#messageappend)
|
41 | * [messageTrim](#messagetrim)
|
42 | * [messageEditExtra](#messageeditextra)
|
43 | * [messageAddExtra](#messageaddextra)
|
44 | * [sendMessage](#sendmessage)
|
45 | * [reply](#reply)
|
46 | * [repost](#repost)
|
47 | * [copyMessage](#copymessage)
|
48 | * [remove](#remove)
|
49 | * [findMessage](#findmessage)
|
50 | * [pinChatMessage](#pinchatmessage)
|
51 | * [messageSplit](#messagesplit)
|
52 | * [messagesJoin](#messagesjoin)
|
53 | * [checkInterview](#checkinterview)
|
54 | * [replyInterview](#replyinterview)
|
55 |
|
56 | * [Bots Plugin Interview](#bots-plugin-interview)
|
57 |
|
58 | * [Interview](#interview)
|
59 | * [Portal](#portal)
|
60 |
|
61 | * [📖 License](#-license)
|
62 |
|
63 | * [👥 Contributors](#-contributors)
|
64 |
|
65 | * [👏 Contributing](#-contributing)
|
66 |
|
67 | * [📮 Any questions? Always welcome :)](#-any-questions-always-welcome-)
|
68 |
|
69 | # ⌨️ Install
|
70 |
|
71 | ```sh
|
72 | # yarn
|
73 | yarn i @lskjs/bots @lskjs/db axios bluebird lodash
|
74 |
|
75 | # npm
|
76 | npm i @lskjs/bots @lskjs/db axios bluebird lodash
|
77 | ```
|
78 |
|
79 | ***
|
80 |
|
81 | # Bots Plugin Portal
|
82 |
|
83 | **Bots Plugin Portal** (*@lskjs/bots-plugin-portal*) - плагин, позволяющий настраивать реакции бота на различные триггеры.
|
84 |
|
85 | Конфиг плагина находится по пути `bots.plugins.portal` и имеет вид:
|
86 |
|
87 | ```js
|
88 | bots: {
|
89 | plugins: {
|
90 | portal: {
|
91 | group: true,
|
92 | rules: [
|
93 | //...
|
94 | ],
|
95 | },
|
96 | },
|
97 | },
|
98 | ```
|
99 |
|
100 | **Params:**
|
101 |
|
102 | | Field | Type | Desription |
|
103 | | ------ | :------: | ------ |
|
104 | | group | Boolean | Группировать ли медиа-файлы |
|
105 | | rules | Array of Objects | Массив правил, которым следует бот при обработке входящих сообщений или при срабатывании крона |
|
106 |
|
107 | **Group values:**
|
108 |
|
109 | | Field | Value | Description |
|
110 | | ------ | :------: | ------ |
|
111 | | group | true | Группирует медиа-файлы в одно сообщение и помещает их в `ctx.group` |
|
112 | | group | false | Медиа-файлы приходят на сервер разными сообщениями |
|
113 |
|
114 | /Reference/: При отправке боту нескольких медиа-файлов одним сообщением, на сервер медиа-файлы приходят разными сообщениями. Т.е. при отправке 5 изображений одним сообщением, на сервер приходит не одно сообщение, а 5.
|
115 |
|
116 | ***
|
117 |
|
118 | ## Правила (rules)
|
119 |
|
120 | Правила позволяют устанавливать триггеры на действия пользователей или на срабатывание крона. Представляют из себя объекты и могут быть вложены друг в друга.
|
121 |
|
122 | **Правила состоят из 3-х частей:**
|
123 | | Rule Part | Type | Required | Description |
|
124 | | ------ | :------: | :------: | ------ |
|
125 | | cron | Array of String\String | - | Позволяет устанавливать расписания срабатываний экшона |
|
126 | |criteria| Object | - | Критерии срабатывания экшона при обработке действий пользователя |
|
127 | | action | Object | + | Экшоны. Описания действий, которые выполняет бот |
|
128 |
|
129 | ### `cron`
|
130 |
|
131 | Параметр позволяет устанавливать время срабатывания действия бота. Например, если необходимо установить отправку сообщений в чат каждую минуту, то конфиг будет выглядеть `cron: '* * * * *'`.
|
132 |
|
133 | Официальный пакет крона: [node-cron - npm](https://www.npmjs.com/package/node-cron)
|
134 |
|
135 | ### `criteria`
|
136 |
|
137 | Параметр позволяет устанавливать критерии на триггеры срабатывания бота. Например, если необходимо, чтобы бот реагировал только на сообщения в определенном чате, то критерий будут выглядеть `chatId: 12345678`.
|
138 |
|
139 | Если criteria отсутствует, то правила могут срабатывать только по крону. Если же `criteria: {}`, то считается, что критерий отбора нет и правила будут срабатывать на любые взаимодействия с ботом.
|
140 |
|
141 | ### `action`
|
142 |
|
143 | Параметр задает действия бота. Здесь настраивается, будет бот искать сообщения, оправлять или удалять их и тд.
|
144 |
|
145 | Действия могут быть вложенными и составлять цепочки при помощи полей `then` и `else`. При удачном выполнении действия-родителя бот будет выполнять действия из поля `then`. При неудачном - `else`. Аналогия с if/else, где if - then, а else - else. Например, при проверке checkMessage, если сообщение существует, то бот пройдет по ветке `then`, в противном случае по `else`.
|
146 |
|
147 | Кроме вложенности, action/then могут быть массивами и содержать параллельные действия.
|
148 |
|
149 | **Examples:**
|
150 |
|
151 | ```js
|
152 | {
|
153 | cron: '* * * * *',
|
154 | criteria: {
|
155 | chatId: 12345678,
|
156 | },
|
157 | action: {
|
158 | type: 'checkMessage',
|
159 | chatId: -123114346456,
|
160 | userId: 12345678,
|
161 | then: {
|
162 | type: 'sendMessage',
|
163 | text: 'some text by true checkMessage',
|
164 | to: 12345678,
|
165 | },
|
166 | else: {
|
167 | type: 'sendMessage',
|
168 | text: 'some text by false checkMessage',
|
169 | to: 12345678,
|
170 | },
|
171 | },
|
172 | },
|
173 | ```
|
174 |
|
175 | ```js
|
176 | {
|
177 | cron: ['*/20 * * * *', '*/15 * * * * *'],
|
178 | action: [
|
179 | {
|
180 | type: 'sendMessage',
|
181 | text: 'some text 1',
|
182 | to: 12345678,
|
183 | },
|
184 | {
|
185 | type: 'sendMessage',
|
186 | text: 'some text 2',
|
187 | to: -87654321123,
|
188 | },
|
189 | ],
|
190 | }
|
191 | ```
|
192 |
|
193 | ```js
|
194 | {
|
195 | criteria: {
|
196 | chatId: 12345678,
|
197 | },
|
198 | action: {
|
199 | type: 'reply',
|
200 | text: 'some text by reply',
|
201 | },
|
202 | },
|
203 | ```
|
204 |
|
205 | ## Параметры, используемые при настройке критериев:
|
206 |
|
207 | | Criteria Field | Type | Values | Description |
|
208 | | ------ | :------: | ------ | ------ |
|
209 | | userId | Array of Number\Array of String\Number\String | | ID пользователя, который взаимодействует с ботом |
|
210 | | chatId | Array of Number\Array of String\Number\String | | ID чата, в котором происходит взаимодействие с ботом |
|
211 | | chatType | String | private\group\supergroup\channel | Тип чата, в котором происходит взаимодействие |
|
212 | | messageType | String | | Тип сообщения. Различают множество типов сообщений |
|
213 | | messageText | String\RegExp | | Текст сообщения. Например, можно сделать критерий на команду запуска бота `messageText: /start` |
|
214 | | nextRoute | String\RegExp | | Следующий роут. Используется только при заполнении формы. Необходимо устанавливать данный критерий для блокировки каких-либо действий во время заполнения формы в целях избежать спама и лишних триггеров. |
|
215 |
|
216 | **Chat types:**
|
217 |
|
218 | 1. `private` - личные диалог с ботом
|
219 | 2. `group` - общий чат
|
220 | 3. `supergroup` - общий чат
|
221 | 4. `channel` - канал
|
222 |
|
223 | **Message types:**
|
224 |
|
225 | 1. `mediaGroup` - группа медиа-файлов
|
226 | 2. `audio` - приложен аудио-файл
|
227 | 3. `document` - приложен документ
|
228 | 4. `animation` - гифка
|
229 | 5. `photo` - приложено изображение
|
230 | 6. `sticker` - стикер
|
231 | 7. `video` - приложено видео
|
232 | 8. `video_note` - видео-кружочек
|
233 | 9. `voice` - голосовое сообщение
|
234 | 10. `contact` - контакт
|
235 | 11. `dice` - игральная кость
|
236 | 12. `game` - игра
|
237 | 13. `poll` - голосование
|
238 | 14. `quiz` - викторина
|
239 | 15. `location` - геоданные
|
240 | 16. `venue` - место
|
241 | 17. `text` - текстовое сообщение
|
242 |
|
243 | ## Список действий, которые реализованы в плагине:
|
244 |
|
245 | 1. [createMessage](#createMessage) - создание сообщений
|
246 | 2. [messageAppend](#messageAppend) - добавление текста в конец
|
247 | 3. [messageTrim](#messageTrim) - фильтр текста
|
248 | 4. [messageEditExtra](#messageEditExtra) - редактирование кнопок
|
249 | 5. [messageAddExtra](#messageAddExtra) - добавление кнопок
|
250 | 6. [sendMessage](#sendMessage) - отправка сообщений
|
251 | 7. [reply](#reply) - реплай
|
252 | 8. [repost](#repost) - репост
|
253 | 9. [copyMessage](#copyMessage) - копирование сообщений
|
254 | 10. [remove](#remove) - удаление сообщений
|
255 | 11. [findMessage](#findMessage) - поиск сообщения
|
256 | 12. [pinChatMessage](#pinChatMessage) - закрепление сообщения
|
257 | 13. [messageSplit](#messageSplit) - разделение сообщения на элементы
|
258 | 14. [messagesJoin](#messagesJoin) - группировка сообщений в одно
|
259 | 15. [checkInterview](#checkInterview) - проверка заполнения формы
|
260 | 16. [replyInterview](#replyInterview) - отправка формы
|
261 |
|
262 | ### createMessage
|
263 |
|
264 | **createMessage** - действие бота, необходимое для создания сообщения и последующего редактирования перед отправкой. После создания сообщения, к нему можно добавить/изменить кнопки, отредактировать его текст и тд.
|
265 |
|
266 | При срабатывании createMessage от крона, создается пустое сообщение, которое можно заполнять различным контентом.<br/>
|
267 | При срабатывании createMessage от действия пользователя, сообщение создается на основе входящих данных. Т.е. в текст созданного сообщения помещается текст, написанный пользователем. С кнопками и файлами происходят аналогичные действия.
|
268 |
|
269 | **Params:**
|
270 |
|
271 | | Field | Type | Description |
|
272 | | ------ | :------: | ------ |
|
273 | | text | String | текст сообщения |
|
274 | | to | Array of Number\Array of String\Number\String | ID чата, в который будет отправлено сообщение |
|
275 |
|
276 | **Example:**
|
277 |
|
278 | ```js
|
279 | {
|
280 | criteria: {},
|
281 | action: {
|
282 | type: 'createMessage',
|
283 | text: "It's field from message text",
|
284 | to: 12345678,
|
285 | },
|
286 | },
|
287 | ```
|
288 |
|
289 | ### messageAppend
|
290 |
|
291 | **messageAppend** - действие бота, позволяющее добавить текст в конец сообщения.
|
292 |
|
293 | **Params:**
|
294 |
|
295 | | Field | Type | Description |
|
296 | | ------ | :------: | ------ |
|
297 | | text | String | Добавочный текст |
|
298 |
|
299 | **Example:**
|
300 |
|
301 | ```js
|
302 | {
|
303 | criteria: {
|
304 | messageText: /\/trim/,
|
305 | },
|
306 | action: {
|
307 | type: 'messageAppend',
|
308 | text: 'by @download4bot',
|
309 | then: {
|
310 | type: 'repost',
|
311 | to: 12345678,
|
312 | },
|
313 | },
|
314 | },
|
315 |
|
316 | ```
|
317 |
|
318 | ### messageTrim
|
319 |
|
320 | **messageTrim** - действие бота, позволяющее отфильтровать текст сообщения.
|
321 |
|
322 | **Params:**
|
323 |
|
324 | | Field | Type | Description |
|
325 | | ------ | :------: | ------ |
|
326 | | hashtags | Boolean |Удаляет все хештеги из текста сообщения |
|
327 | | links | Boolean | Удаляет все ссылки из текста сообщения |
|
328 | | regExp | RegExp | Позволяет удалять любые пользовательские шаблоны из текста сообщения |
|
329 |
|
330 | **Example:**
|
331 |
|
332 | ```js
|
333 | {
|
334 | criteria: {
|
335 | messageText: /\/trim/,
|
336 | },
|
337 | action: {
|
338 | type: 'messageTrim',
|
339 | hashtags: 1,
|
340 | links: 1,
|
341 | regExp: /1?123\n?/,
|
342 | then: {
|
343 | type: 'repost',
|
344 | to: 12345678,
|
345 | },
|
346 | },
|
347 | },
|
348 |
|
349 | ```
|
350 |
|
351 | ### messageEditExtra
|
352 |
|
353 | **messageEditExtra** - действие бота, позволяющее отредактировать клавиатуру сообщения.
|
354 |
|
355 | **Params:**
|
356 |
|
357 | | Field | Type | Description |
|
358 | | ------ | :------: |------ |
|
359 | | extra | Array | Содержит редактируемые кнопки клавиатуры |
|
360 |
|
361 | **Extra params for type *LIKE***:
|
362 |
|
363 | | Field | Type | Required | Description |
|
364 | | ------ | :------: | :------: | ------ |
|
365 | | type | String | + | Кнопки лайк/дисслайк к сообщению |
|
366 | | buttons | Array | - | Содержит редактируемые кнопки клавиатуры |
|
367 | | buttons.disslike | Object | - | Настройка кнопки дисслайка |
|
368 | | buttons.like | Object | - | Настройка кнопки дисслайка |
|
369 |
|
370 | **Extra params for type *ANSWER***:
|
371 |
|
372 | | Field | Type | Required | Description |
|
373 | | ------ | :------: | :------: | ------ |
|
374 | | type | String | + | Кнопка для установления соединения с другим пользователем через бота (чат) |
|
375 | | text | String | - | Настройка текста кнопки |
|
376 |
|
377 | **Extra params for type *SENDER***:
|
378 |
|
379 | | Field | Type | Required | Description |
|
380 | | ------ | :------: | :------: | ------ |
|
381 | | type | String | + | Кнопка для перехода к отправителю сообщения |
|
382 | | text | String | - | Настройка текста кнопки |
|
383 |
|
384 | **Example:**
|
385 |
|
386 | ```js
|
387 | {
|
388 | criteria: {}
|
389 | action: {
|
390 | type: 'createMessage',
|
391 | text: 'Title text',
|
392 | then: {
|
393 | type: 'messageEditExtra',
|
394 | extra: [
|
395 | {
|
396 | type: 'like',
|
397 | buttons: {
|
398 | disslike: {
|
399 | title: 'test 💔', // default: '💔'
|
400 | value: 10, // default: 0
|
401 | },
|
402 | like: {
|
403 | title: 'test ❤️', // default: '❤️'
|
404 | value: 0, // default: 0
|
405 | },
|
406 | },
|
407 | },
|
408 | {
|
409 | type: 'answer',
|
410 | text: 'Answer @{ {username} }', // default: '@username'
|
411 | },
|
412 | {
|
413 | type: 'sender',
|
414 | text: 'Sender: @{ {username} }', // default: '@username'
|
415 | },
|
416 | ],
|
417 | then: {
|
418 | type: 'sendMessage',
|
419 | to: 12345678,
|
420 | },
|
421 | },
|
422 | },
|
423 | },
|
424 | ```
|
425 |
|
426 | ### messageAddExtra
|
427 |
|
428 | **messageAddExtra** - действие бота, позволяющее добавить новую клавиатуру сообщения. Если клавиатура уже существует, то messageAddExtra заменит текущую на новую.
|
429 |
|
430 | **Params:**
|
431 | | Field | Type | Description |
|
432 | | ------ | :------: | ------ |
|
433 | | extra | Array | Содержит редактируемые кнопки клавиатуры |
|
434 |
|
435 | **Extra params for type *LIKE***:
|
436 |
|
437 | | Field | Type | Required | Description |
|
438 | | ------ | :------: | :------: | ------ |
|
439 | | type | String | + | Кнопки лайк/дисслайк к сообщению |
|
440 | | buttons | Array | - | Содержит редактируемые кнопки клавиатуры |
|
441 | | buttons.disslike | Object | - | Настройка кнопки дисслайка |
|
442 | | buttons.like | Object | - | Настройка кнопки дисслайка |
|
443 |
|
444 | **Extra params for type *ANSWER***:
|
445 |
|
446 | | Field | Type | Required | Description |
|
447 | | ------ | :------: | :------: | ------ |
|
448 | | type | String | + | Кнопка для установления соединения с другим пользователем через бота (чат) |
|
449 | | text | String | - | Настройка текста кнопки |
|
450 |
|
451 | **Extra params for type *SENDER***:
|
452 |
|
453 | | Field | Type | Required | Description |
|
454 | | ------ | :------: | :------: | ------ |
|
455 | | type | String | + | Кнопка для перехода к отправителю сообщения |
|
456 | | text | String | - | Настройка текста кнопки |
|
457 |
|
458 | **Example:**
|
459 |
|
460 | ```js
|
461 | {
|
462 | criteria: {}
|
463 | action: {
|
464 | type: 'createMessage',
|
465 | text: 'Title text',
|
466 | then: {
|
467 | type: 'messageAddExtra',
|
468 | extra: [
|
469 | {
|
470 | type: 'like',
|
471 | buttons: {
|
472 | disslike: {
|
473 | title: 'New disslike 💔', // default: '💔'
|
474 | value: 10, // default: 0
|
475 | },
|
476 | like: {
|
477 | title: 'New like ❤️', // default: '❤️'
|
478 | value: 0, // default: 0
|
479 | },
|
480 | },
|
481 | },
|
482 | {
|
483 | type: 'answer',
|
484 | text: 'Answer @{ {username} }', // default: '@username'
|
485 | },
|
486 | {
|
487 | type: 'sender',
|
488 | text: 'Sender: @{ {username} }', // default: '@username'
|
489 | },
|
490 | ],
|
491 | then: {
|
492 | type: 'sendMessage',
|
493 | to: 12345678,
|
494 | },
|
495 | },
|
496 | },
|
497 | },
|
498 | ```
|
499 |
|
500 | ### sendMessage
|
501 |
|
502 | **sendMessage** - действие бота, при котором бот отправляет сообщение заданному пользователю. Для настройки сообщения используется цепочка действий: `createMessage` -> `messageAddExtra` -> `messageAppend` -> `messageTrim` -> `sendMessage`.
|
503 |
|
504 | **Params:**
|
505 |
|
506 | | Field | Type | Required | Description |
|
507 | | ------ | :------: | :------: | ------ |
|
508 | | text | String | - | Текст сообщения |
|
509 | | to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
|
510 |
|
511 | **Example:**
|
512 |
|
513 | ```js
|
514 | {
|
515 | criteria: {},
|
516 | action: {
|
517 | type: 'createMessage',
|
518 | then: {
|
519 | type: 'sendMessage',
|
520 | text: 'Text by sendMessage',
|
521 | to: 12345678,
|
522 | },
|
523 | },
|
524 | },
|
525 | ```
|
526 |
|
527 | ### reply
|
528 |
|
529 | **reply** - действие бота, при котором бот отвечает на сообщение пользователя.
|
530 |
|
531 | **Params:**
|
532 |
|
533 | | Field | Type | Required | Description |
|
534 | | ------ | :------: | :------: | ------ |
|
535 | | text | String | - | Текст сообщения |
|
536 |
|
537 | **Example:**
|
538 |
|
539 | ```js
|
540 | {
|
541 | criteria: {
|
542 | messageText: 'ping',
|
543 | },
|
544 | action: {
|
545 | type: 'reply',
|
546 | text: 'pong',
|
547 | },
|
548 | },
|
549 | ```
|
550 |
|
551 | ### repost
|
552 |
|
553 | **repost** - действие бота, при котором бот пересылает активное сообщение в заданных чат.
|
554 |
|
555 | **Params:**
|
556 |
|
557 | | Field | Type | Required | Description |
|
558 | | ------ | :------: | :------: | ------ |
|
559 | | to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
|
560 |
|
561 | **Example:**
|
562 |
|
563 | ```js
|
564 | {
|
565 | criteria: {
|
566 | chatId: -136512436512436,
|
567 | },
|
568 | action: {
|
569 | type: 'repost',
|
570 | to: 12345678,
|
571 | },
|
572 | },
|
573 | ```
|
574 |
|
575 | ### copyMessage
|
576 |
|
577 | **sendMessage** - действие бота, при котором бот копирует активное сообщение и пересылает его в заданных чат.
|
578 |
|
579 | **Params:**
|
580 |
|
581 | | Field | Type | Required | Description |
|
582 | | ------ | :------: | :------: | ------ |
|
583 | | to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
|
584 |
|
585 | **Example:**
|
586 |
|
587 | ```js
|
588 | {
|
589 | criteria: {
|
590 | chatId: -136512436512436,
|
591 | },
|
592 | action: {
|
593 | type: 'copyMessage',
|
594 | to: 12345678,
|
595 | },
|
596 | },
|
597 | ```
|
598 |
|
599 | ### remove
|
600 |
|
601 | **remove** - действие бота, при котором бот удаляет активное сообщение. Активным сообщением является полученное сообщение, либо найденное при помощи findMessage.
|
602 |
|
603 | **Example:**
|
604 |
|
605 | ```js
|
606 | {
|
607 | criteria: {
|
608 | messageText: 'попит',
|
609 | },
|
610 | action: {
|
611 | type: 'remove',
|
612 | },
|
613 | },
|
614 | ```
|
615 |
|
616 | ### findMessage
|
617 |
|
618 | **findMessage** - действие бота, позволяющее найти сообщение в чате по заданным параметрам. Поиск осуществляется в модели `BotsTelegramMessageModel`.
|
619 |
|
620 | **Params:**
|
621 |
|
622 | | Field | Type | Required | Description |
|
623 | | ------ | :------: | :------: | ------ |
|
624 | | random | Boolean | - | Если нашлось несколько сообщений, выбирать ли случайное. По умолчанию: последнее полученное ботом сообщение. |
|
625 | | criteria | Object | - | Критерии поиска сообщения в базе |
|
626 | | criteria.userId | Array of Number\Array of String\Number\String | - | ID пользователя |
|
627 | | criteria.chatId | Array of Number\Array of String\Number\String | - | ID чата |
|
628 | | criteria.chatType | String | - | Тип чата |
|
629 | | criteria.messageType | String | - | Тип сообщения |
|
630 | | criteria.messageDate | Number | - | Дата сообщения в ms |
|
631 | | criteria.messageText | String\RegExp | - | Текст сообщения |
|
632 | | criteria.messageId | String\RegExp | - | ID сообщения |
|
633 |
|
634 | **Example:**
|
635 |
|
636 | ```js
|
637 | {
|
638 | criteria: {
|
639 | messageText: '/checkMessage',
|
640 | },
|
641 | action: {
|
642 | type: 'findMessage',
|
643 | criteria: {
|
644 | chatId: -1232343354655,
|
645 | messageText: '*message.text',
|
646 | },
|
647 | then: {
|
648 | type: 'repost',
|
649 | to: 12345678,
|
650 | },
|
651 | },
|
652 | },
|
653 | ```
|
654 |
|
655 | ### pinChatMessage
|
656 |
|
657 | **pinChatMessage** - действие бота, при котором бот закрепляет активное сообщение. Активным сообщением является полученное сообщение, либо сообщение после `findMessage`/`createMessage`.
|
658 |
|
659 | **Example:**
|
660 |
|
661 | ```js
|
662 | {
|
663 | criteria: {
|
664 | messageText: /^#закрепить.*/,
|
665 | },
|
666 | action: {
|
667 | type: 'pinChatMessage',
|
668 | },
|
669 | },
|
670 | ```
|
671 |
|
672 | ### messageSplit
|
673 |
|
674 | **messageSplit** - действие бота, позволяющее разделять входящее сообщение на элементы для последующей работы. Например, если пользователь пишет боту сообщение, содержащее 5 изображений и подпись, то бот разделит сообщение на 6 элементов.
|
675 |
|
676 | **Example:**
|
677 |
|
678 | ```js
|
679 | {
|
680 | criteria: {},
|
681 | action: {
|
682 | type: 'messageSplit',
|
683 | then: {
|
684 | type: 'sendMessage',
|
685 | to: 12345678,
|
686 | },
|
687 | },
|
688 | },
|
689 | ```
|
690 |
|
691 | ### messagesJoin
|
692 |
|
693 | **messagesJoin** - действие бота, позволяющее объединять несколько сообщений, переданных боту (например, пересылая сообщения). Если среди сообщений несколько подписей, то они объединятся в единый текст.
|
694 |
|
695 | **Example:**
|
696 |
|
697 | ```js
|
698 | {
|
699 | criteria: {},
|
700 | action: {
|
701 | type: 'messagesJoin',
|
702 | then: {
|
703 | type: 'sendMessage',
|
704 | to: 12345678,
|
705 | },
|
706 | },
|
707 | },
|
708 | ```
|
709 |
|
710 | ### checkInterview
|
711 |
|
712 | **checkInterview** - действие бота для проверки, заполнил ли пользователь необходимые формы.
|
713 |
|
714 | **Params:**
|
715 |
|
716 | | Field | Type | Description |
|
717 | | ------ | :------: | ------ |
|
718 | | type | String | Тип действия бота. Запускает проверку на заполненность формы |
|
719 | | forms | Array of String/String | Список с названиями форм, которые следует заполнить для прохождения проверки |
|
720 |
|
721 | **Example:**
|
722 |
|
723 | ```js
|
724 | {
|
725 | criteria: {
|
726 | messageText: /^(?!\/registration).*$/,
|
727 | nextRoute: /^(?!\/interview).*$/,
|
728 | },
|
729 | action: {
|
730 | type: 'checkInterview',
|
731 | forms: ['intro'],
|
732 | then: [
|
733 | type: 'reply',
|
734 | text: 'Успех!',
|
735 | ],
|
736 | else: {
|
737 | type: 'reply',
|
738 | text: 'Необходима регистрация! /registration'
|
739 | },
|
740 | },
|
741 | },
|
742 | ```
|
743 |
|
744 | ### replyInterview
|
745 |
|
746 | **replyInterview** - действие бота для отправки формы пользователю.
|
747 |
|
748 | **Params:**
|
749 |
|
750 | | Field | Type | Value | Description |
|
751 | | ------ | :------: | ------ | ------ |
|
752 | | type | String | | Тип действия бота. Отправляет форму пользователю |
|
753 | | formName | String | | Название формы, которая будет отправлена пользователю |
|
754 | | mode | String | form/dialog | Режим работы формы |
|
755 | | preview | Boolean | | Параметр, который указывает, необходимо ли выводить title формы перед вводом данных |
|
756 | | autosubmit | Boolean | | Параметр, который указывает, необходимо ли подтверждение данных формы |
|
757 |
|
758 | **Example:**
|
759 |
|
760 | ```js
|
761 | {
|
762 | criteria: {
|
763 | chatType: 'private',
|
764 | messageText: '/registration',
|
765 | },
|
766 | action: {
|
767 | type: 'replyInterview',
|
768 | formName: 'intro',
|
769 | mode: 'form',
|
770 | preview: false,
|
771 | autosubmit: false,
|
772 | then: {
|
773 | type: 'reply',
|
774 | text: 'Успех!',
|
775 | },
|
776 | },
|
777 | },
|
778 | ```
|
779 |
|
780 | # Bots Plugin Interview
|
781 |
|
782 | **Bots Plugin Interview** (*@lskjs/bots-plugin-interview*) - плагин, позволяющий создавать формы ввода в боте. Реализована вариация с классической браузерной формой с подтверждением введенных данных. Режим диалога находится в стации разработки.
|
783 |
|
784 | Конфиг для плагина состоит из двух частей - interview и portal. Interview отвечает за настройку формы, её полей и их валидацию. Portal реализует взаимодействие с формой. Например, при каких действиях пользователя будет вызвана форма.
|
785 |
|
786 | Входные данные сохраняются в базу и хранятся в модели `BotsTelegramUserModel`. Путь в модели `meta.interview.[formName]`.
|
787 |
|
788 | ## Interview
|
789 |
|
790 | Конфиг для настройки формы, её полей и их валиацию.
|
791 |
|
792 | `bot/plugins/interview/forms` - обязательный путь до форм.
|
793 |
|
794 | **Params:**
|
795 |
|
796 | | Field | Type | Description |
|
797 | | ------ | :------: | ------ |
|
798 | | intro | String | Название формы. Название формы должно быть уникально и используется в portal-части для коннекта с формой |
|
799 | | intro.title | String | Текст, который видит пользователь при появлении формы |
|
800 | | intro.controls | Object | Поля формы, которые будут заполняться пользователем |
|
801 | | controls.\[name/city/age] | String | Названия полей формы внутри конфига |
|
802 | | controls.name.title | String | Название поля формы, которое видит пользователь в `intro.title` |
|
803 | | controls.name.placeholder | String | Текст, выводимый перед заполнением поля формы |
|
804 | | controls.name.format | Func | Валидация входных данных |
|
805 | | intro.fields | Array of String | Массив с активными полями формы |
|
806 |
|
807 | **Example:**
|
808 |
|
809 | ```js
|
810 | bots: {
|
811 | plugins: {
|
812 | interview: {
|
813 | forms: {
|
814 | intro: {
|
815 | title: 'Добро пожаловать. Для продолжения пройдите краткую регистрацию!',
|
816 | controls: {
|
817 | name: {
|
818 | title: 'Имя',
|
819 | placeholder: 'Введите имя',
|
820 | format: String,
|
821 | },
|
822 | city: {
|
823 | title: 'Город',
|
824 | placeholder: 'Введите город',
|
825 | },
|
826 | age: {
|
827 | title: 'Возраст',
|
828 | placeholder: 'Введите ваш возраст',
|
829 | format: Number,
|
830 | },
|
831 | },
|
832 | fields: ['name', 'city', 'age'],
|
833 | },
|
834 | },
|
835 | },
|
836 | },
|
837 | },
|
838 | ```
|
839 |
|
840 | ## Portal
|
841 |
|
842 | *см. Bost Plugin Portal - checkInterview & replyInterview.*
|
843 |
|
844 | # 📖 License
|
845 |
|
846 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
|
847 |
|
848 | # 👥 Contributors
|
849 |
|
850 |
|
851 |
|
852 |
|
853 |
|
854 |
|
855 |
|
856 | <table>
|
857 | <tr>
|
858 | <td align="center"><a href="https://isuvorov.com"><img src="https://avatars2.githubusercontent.com/u/1056977?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Igor Suvorov</b></sub></a><br /><a href="lskjs/lskjs///commits?author=isuvorov" title="Code">💻</a> <a href="#design-isuvorov" title="Design">🎨</a> <a href="#ideas-isuvorov" title="Ideas, Planning, & Feedback">🤔</a></td>
|
859 | </tr>
|
860 | </table>
|
861 |
|
862 |
|
863 |
|
864 |
|
865 | # 👏 Contributing
|
866 |
|
867 | 1. Fork it (<https://github.com/yourname/yourproject/fork>)
|
868 | 2. Create your feature branch (`git checkout -b features/fooBar`)
|
869 | 3. Commit your changes (`git commit -am 'feat(image): Add some fooBar'`)
|
870 | 4. Push to the branch (`git push origin feature/fooBar`)
|
871 | 5. Create a new Pull Request
|
872 |
|
873 | # 📮 Any questions? Always welcome :)
|
874 |
|
875 | * [Email](mailto:hi@isuvorov.com)
|
876 | * [LSK.news – Telegram channel](https://t.me/lskjs)
|
877 | * [Спроси нас в телеграме ;)](https://t.me/lskjschat)
|