
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
@lskjs/bots
Advanced tools
LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation
@lskjs/bots – LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation
# yarn
yarn i @lskjs/bots @lskjs/db axios bluebird lodash
# npm
npm i @lskjs/bots @lskjs/db axios bluebird lodash
Bots Plugin Portal (@lskjs/bots-plugin-portal) - плагин, позволяющий настраивать реакции бота на различные триггеры.
Конфиг плагина находится по пути bots.plugins.portal и имеет вид:
bots: {
plugins: {
portal: {
group: true,
rules: [
//...
],
},
},
},
Params:
| Field | Type | Desription |
|---|---|---|
| group | Boolean | Группировать ли медиа-файлы |
| rules | Array of Objects | Массив правил, которым следует бот при обработке входящих сообщений или при срабатывании крона |
Group values:
| Field | Value | Description |
|---|---|---|
| group | true | Группирует медиа-файлы в одно сообщение и помещает их в ctx.group |
| group | false | Медиа-файлы приходят на сервер разными сообщениями |
/Reference/: При отправке боту нескольких медиа-файлов одним сообщением, на сервер медиа-файлы приходят разными сообщениями. Т.е. при отправке 5 изображений одним сообщением, на сервер приходит не одно сообщение, а 5.
Правила позволяют устанавливать триггеры на действия пользователей или на срабатывание крона. Представляют из себя объекты и могут быть вложены друг в друга.
Правила состоят из 3-х частей:
| Rule Part | Type | Required | Description |
|---|---|---|---|
| cron | Array of String\String | - | Позволяет устанавливать расписания срабатываний экшона |
| criteria | Object | - | Критерии срабатывания экшона при обработке действий пользователя |
| action | Object | + | Экшоны. Описания действий, которые выполняет бот |
cronПараметр позволяет устанавливать время срабатывания действия бота. Например, если необходимо установить отправку сообщений в чат каждую минуту, то конфиг будет выглядеть cron: '* * * * *'.
Официальный пакет крона: node-cron - npm
criteriaПараметр позволяет устанавливать критерии на триггеры срабатывания бота. Например, если необходимо, чтобы бот реагировал только на сообщения в определенном чате, то критерий будут выглядеть chatId: 12345678.
Если criteria отсутствует, то правила могут срабатывать только по крону. Если же criteria: {}, то считается, что критерий отбора нет и правила будут срабатывать на любые взаимодействия с ботом.
actionПараметр задает действия бота. Здесь настраивается, будет бот искать сообщения, оправлять или удалять их и тд.
Действия могут быть вложенными и составлять цепочки при помощи полей then и else. При удачном выполнении действия-родителя бот будет выполнять действия из поля then. При неудачном - else. Аналогия с if/else, где if - then, а else - else. Например, при проверке checkMessage, если сообщение существует, то бот пройдет по ветке then, в противном случае по else.
Кроме вложенности, action/then могут быть массивами и содержать параллельные действия.
Examples:
{
cron: '* * * * *',
criteria: {
chatId: 12345678,
},
action: {
type: 'checkMessage',
chatId: -123114346456,
userId: 12345678,
then: {
type: 'sendMessage',
text: 'some text by true checkMessage',
to: 12345678,
},
else: {
type: 'sendMessage',
text: 'some text by false checkMessage',
to: 12345678,
},
},
},
{
cron: ['*/20 * * * *', '*/15 * * * * *'],
action: [
{
type: 'sendMessage',
text: 'some text 1',
to: 12345678,
},
{
type: 'sendMessage',
text: 'some text 2',
to: -87654321123,
},
],
}
{
criteria: {
chatId: 12345678,
},
action: {
type: 'reply',
text: 'some text by reply',
},
},
| Criteria Field | Type | Values | Description |
|---|---|---|---|
| userId | Array of Number\Array of String\Number\String | ID пользователя, который взаимодействует с ботом | |
| chatId | Array of Number\Array of String\Number\String | ID чата, в котором происходит взаимодействие с ботом | |
| chatType | String | private\group\supergroup\channel | Тип чата, в котором происходит взаимодействие |
| messageType | String | Тип сообщения. Различают множество типов сообщений | |
| messageText | String\RegExp | Текст сообщения. Например, можно сделать критерий на команду запуска бота messageText: /start | |
| nextRoute | String\RegExp | Следующий роут. Используется только при заполнении формы. Необходимо устанавливать данный критерий для блокировки каких-либо действий во время заполнения формы в целях избежать спама и лишних триггеров. |
Chat types:
private - личные диалог с ботомgroup - общий чатsupergroup - общий чатchannel - каналMessage types:
mediaGroup - группа медиа-файловaudio - приложен аудио-файлdocument - приложен документanimation - гифкаphoto - приложено изображениеsticker - стикерvideo - приложено видеоvideo_note - видео-кружочекvoice - голосовое сообщениеcontact - контактdice - игральная костьgame - играpoll - голосованиеquiz - викторинаlocation - геоданныеvenue - местоtext - текстовое сообщениеcreateMessage - действие бота, необходимое для создания сообщения и последующего редактирования перед отправкой. После создания сообщения, к нему можно добавить/изменить кнопки, отредактировать его текст и тд.
При срабатывании createMessage от крона, создается пустое сообщение, которое можно заполнять различным контентом.
При срабатывании createMessage от действия пользователя, сообщение создается на основе входящих данных. Т.е. в текст созданного сообщения помещается текст, написанный пользователем. С кнопками и файлами происходят аналогичные действия.
Params:
| Field | Type | Description |
|---|---|---|
| text | String | текст сообщения |
| to | Array of Number\Array of String\Number\String | ID чата, в который будет отправлено сообщение |
Example:
{
criteria: {},
action: {
type: 'createMessage',
text: "It's field from message text",
to: 12345678,
},
},
messageAppend - действие бота, позволяющее добавить текст в конец сообщения.
Params:
| Field | Type | Description |
|---|---|---|
| text | String | Добавочный текст |
Example:
{
criteria: {
messageText: /\/trim/,
},
action: {
type: 'messageAppend',
text: 'by @download4bot',
then: {
type: 'repost',
to: 12345678,
},
},
},
messageTrim - действие бота, позволяющее отфильтровать текст сообщения.
Params:
| Field | Type | Description |
|---|---|---|
| hashtags | Boolean | Удаляет все хештеги из текста сообщения |
| links | Boolean | Удаляет все ссылки из текста сообщения |
| regExp | RegExp | Позволяет удалять любые пользовательские шаблоны из текста сообщения |
Example:
{
criteria: {
messageText: /\/trim/,
},
action: {
type: 'messageTrim',
hashtags: 1,
links: 1,
regExp: /1?123\n?/,
then: {
type: 'repost',
to: 12345678,
},
},
},
messageEditExtra - действие бота, позволяющее отредактировать клавиатуру сообщения.
Params:
| Field | Type | Description |
|---|---|---|
| extra | Array | Содержит редактируемые кнопки клавиатуры |
Extra params for type LIKE:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопки лайк/дисслайк к сообщению |
| buttons | Array | - | Содержит редактируемые кнопки клавиатуры |
| buttons.disslike | Object | - | Настройка кнопки дисслайка |
| buttons.like | Object | - | Настройка кнопки дисслайка |
Extra params for type ANSWER:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопка для установления соединения с другим пользователем через бота (чат) |
| text | String | - | Настройка текста кнопки |
Extra params for type SENDER:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопка для перехода к отправителю сообщения |
| text | String | - | Настройка текста кнопки |
Example:
{
criteria: {}
action: {
type: 'createMessage',
text: 'Title text',
then: {
type: 'messageEditExtra',
extra: [
{
type: 'like',
buttons: {
disslike: {
title: 'test 💔', // default: '💔'
value: 10, // default: 0
},
like: {
title: 'test ❤️', // default: '❤️'
value: 0, // default: 0
},
},
},
{
type: 'answer',
text: 'Answer @{ {username} }', // default: '@username'
},
{
type: 'sender',
text: 'Sender: @{ {username} }', // default: '@username'
},
],
then: {
type: 'sendMessage',
to: 12345678,
},
},
},
},
messageAddExtra - действие бота, позволяющее добавить новую клавиатуру сообщения. Если клавиатура уже существует, то messageAddExtra заменит текущую на новую.
Params:
| Field | Type | Description |
|---|---|---|
| extra | Array | Содержит редактируемые кнопки клавиатуры |
Extra params for type LIKE:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопки лайк/дисслайк к сообщению |
| buttons | Array | - | Содержит редактируемые кнопки клавиатуры |
| buttons.disslike | Object | - | Настройка кнопки дисслайка |
| buttons.like | Object | - | Настройка кнопки дисслайка |
Extra params for type ANSWER:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопка для установления соединения с другим пользователем через бота (чат) |
| text | String | - | Настройка текста кнопки |
Extra params for type SENDER:
| Field | Type | Required | Description |
|---|---|---|---|
| type | String | + | Кнопка для перехода к отправителю сообщения |
| text | String | - | Настройка текста кнопки |
Example:
{
criteria: {}
action: {
type: 'createMessage',
text: 'Title text',
then: {
type: 'messageAddExtra',
extra: [
{
type: 'like',
buttons: {
disslike: {
title: 'New disslike 💔', // default: '💔'
value: 10, // default: 0
},
like: {
title: 'New like ❤️', // default: '❤️'
value: 0, // default: 0
},
},
},
{
type: 'answer',
text: 'Answer @{ {username} }', // default: '@username'
},
{
type: 'sender',
text: 'Sender: @{ {username} }', // default: '@username'
},
],
then: {
type: 'sendMessage',
to: 12345678,
},
},
},
},
sendMessage - действие бота, при котором бот отправляет сообщение заданному пользователю. Для настройки сообщения используется цепочка действий: createMessage -> messageAddExtra -> messageAppend -> messageTrim -> sendMessage.
Params:
| Field | Type | Required | Description |
|---|---|---|---|
| text | String | - | Текст сообщения |
| to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
Example:
{
criteria: {},
action: {
type: 'createMessage',
then: {
type: 'sendMessage',
text: 'Text by sendMessage',
to: 12345678,
},
},
},
reply - действие бота, при котором бот отвечает на сообщение пользователя.
Params:
| Field | Type | Required | Description |
|---|---|---|---|
| text | String | - | Текст сообщения |
Example:
{
criteria: {
messageText: 'ping',
},
action: {
type: 'reply',
text: 'pong',
},
},
repost - действие бота, при котором бот пересылает активное сообщение в заданных чат.
Params:
| Field | Type | Required | Description |
|---|---|---|---|
| to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
Example:
{
criteria: {
chatId: -136512436512436,
},
action: {
type: 'repost',
to: 12345678,
},
},
sendMessage - действие бота, при котором бот копирует активное сообщение и пересылает его в заданных чат.
Params:
| Field | Type | Required | Description |
|---|---|---|---|
| to | Array of String/Array of Number/String/Number | - | ID получателя(-ей) |
Example:
{
criteria: {
chatId: -136512436512436,
},
action: {
type: 'copyMessage',
to: 12345678,
},
},
remove - действие бота, при котором бот удаляет активное сообщение. Активным сообщением является полученное сообщение, либо найденное при помощи findMessage.
Example:
{
criteria: {
messageText: 'попит',
},
action: {
type: 'remove',
},
},
findMessage - действие бота, позволяющее найти сообщение в чате по заданным параметрам. Поиск осуществляется в модели BotsTelegramMessageModel.
Params:
| Field | Type | Required | Description |
|---|---|---|---|
| random | Boolean | - | Если нашлось несколько сообщений, выбирать ли случайное. По умолчанию: последнее полученное ботом сообщение. |
| criteria | Object | - | Критерии поиска сообщения в базе |
| criteria.userId | Array of Number\Array of String\Number\String | - | ID пользователя |
| criteria.chatId | Array of Number\Array of String\Number\String | - | ID чата |
| criteria.chatType | String | - | Тип чата |
| criteria.messageType | String | - | Тип сообщения |
| criteria.messageDate | Number | - | Дата сообщения в ms |
| criteria.messageText | String\RegExp | - | Текст сообщения |
| criteria.messageId | String\RegExp | - | ID сообщения |
Example:
{
criteria: {
messageText: '/checkMessage',
},
action: {
type: 'findMessage',
criteria: {
chatId: -1232343354655,
messageText: '*message.text',
},
then: {
type: 'repost',
to: 12345678,
},
},
},
pinChatMessage - действие бота, при котором бот закрепляет активное сообщение. Активным сообщением является полученное сообщение, либо сообщение после findMessage/createMessage.
Example:
{
criteria: {
messageText: /^#закрепить.*/,
},
action: {
type: 'pinChatMessage',
},
},
messageSplit - действие бота, позволяющее разделять входящее сообщение на элементы для последующей работы. Например, если пользователь пишет боту сообщение, содержащее 5 изображений и подпись, то бот разделит сообщение на 6 элементов.
Example:
{
criteria: {},
action: {
type: 'messageSplit',
then: {
type: 'sendMessage',
to: 12345678,
},
},
},
messagesJoin - действие бота, позволяющее объединять несколько сообщений, переданных боту (например, пересылая сообщения). Если среди сообщений несколько подписей, то они объединятся в единый текст.
Example:
{
criteria: {},
action: {
type: 'messagesJoin',
then: {
type: 'sendMessage',
to: 12345678,
},
},
},
checkInterview - действие бота для проверки, заполнил ли пользователь необходимые формы.
Params:
| Field | Type | Description |
|---|---|---|
| type | String | Тип действия бота. Запускает проверку на заполненность формы |
| forms | Array of String/String | Список с названиями форм, которые следует заполнить для прохождения проверки |
Example:
{
criteria: {
messageText: /^(?!\/registration).*$/,
nextRoute: /^(?!\/interview).*$/,
},
action: {
type: 'checkInterview',
forms: ['intro'],
then: [
type: 'reply',
text: 'Успех!',
],
else: {
type: 'reply',
text: 'Необходима регистрация! /registration'
},
},
},
replyInterview - действие бота для отправки формы пользователю.
Params:
| Field | Type | Value | Description |
|---|---|---|---|
| type | String | Тип действия бота. Отправляет форму пользователю | |
| formName | String | Название формы, которая будет отправлена пользователю | |
| mode | String | form/dialog | Режим работы формы |
| preview | Boolean | Параметр, который указывает, необходимо ли выводить title формы перед вводом данных | |
| autosubmit | Boolean | Параметр, который указывает, необходимо ли подтверждение данных формы |
Example:
{
criteria: {
chatType: 'private',
messageText: '/registration',
},
action: {
type: 'replyInterview',
formName: 'intro',
mode: 'form',
preview: false,
autosubmit: false,
then: {
type: 'reply',
text: 'Успех!',
},
},
},
Bots Plugin Interview (@lskjs/bots-plugin-interview) - плагин, позволяющий создавать формы ввода в боте. Реализована вариация с классической браузерной формой с подтверждением введенных данных. Режим диалога находится в стации разработки.
Конфиг для плагина состоит из двух частей - interview и portal. Interview отвечает за настройку формы, её полей и их валидацию. Portal реализует взаимодействие с формой. Например, при каких действиях пользователя будет вызвана форма.
Входные данные сохраняются в базу и хранятся в модели BotsTelegramUserModel. Путь в модели meta.interview.[formName].
Конфиг для настройки формы, её полей и их валиацию.
bot/plugins/interview/forms - обязательный путь до форм.
Params:
| Field | Type | Description |
|---|---|---|
| intro | String | Название формы. Название формы должно быть уникально и используется в portal-части для коннекта с формой |
| intro.title | String | Текст, который видит пользователь при появлении формы |
| intro.controls | Object | Поля формы, которые будут заполняться пользователем |
| controls.[name/city/age] | String | Названия полей формы внутри конфига |
| controls.name.title | String | Название поля формы, которое видит пользователь в intro.title |
| controls.name.placeholder | String | Текст, выводимый перед заполнением поля формы |
| controls.name.format | Func | Валидация входных данных |
| intro.fields | Array of String | Массив с активными полями формы |
Example:
bots: {
plugins: {
interview: {
forms: {
intro: {
title: 'Добро пожаловать. Для продолжения пройдите краткую регистрацию!',
controls: {
name: {
title: 'Имя',
placeholder: 'Введите имя',
format: String,
},
city: {
title: 'Город',
placeholder: 'Введите город',
},
age: {
title: 'Возраст',
placeholder: 'Введите ваш возраст',
format: Number,
},
},
fields: ['name', 'city', 'age'],
},
},
},
},
},
см. Bost Plugin Portal - checkInterview & replyInterview.
This project is licensed under the MIT License - see the LICENSE file for details
Igor Suvorov 💻 🎨 🤔 |
git checkout -b features/fooBar)git commit -am 'feat(image): Add some fooBar')git push origin feature/fooBar)FAQs
LSK.js module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation
The npm package @lskjs/bots receives a total of 229 weekly downloads. As such, @lskjs/bots popularity was classified as not popular.
We found that @lskjs/bots demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 11 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.