
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
telegram-node-bot-extensions
Advanced tools
Этот небольшой проект представляет собой расширения стандартного функционала для библиотеки telegram-node-bot.
Добавление пакета в проект через npm:
npm install --save telegram-node-bot-extensions
Инициализация модуля:
require('telegram-node-bot-extensions')(Telegram, tg)
Вы можете создавать сложные формы с высокой степенью вложенности. Используйте $.runMultiForm для запуска.
const form = {
category: {
question: 'Выбери категорию',
error: 'Ты неправильно ввел категорию!',
keyboard: [['Курьер', 'Ремонт']],
'Курьер': {
subcategory: {
question: 'Выбери подкатегорию',
error: 'Ты неправильно ввел подкатегорию!',
keyboard: [['Пеший курьер', 'Доставка продуктов']]
},
size: {
question: 'Установить размер посылки?',
keyboard: [['Да', 'Нет']],
values: {'Да': true, 'Нет': false},
'Да': {
length: {
question: 'Задай длину посылки (см)',
validator: message => {return Number.isInteger(parseInt(message.text))}
},
width: {
question: 'Задай ширину посылки (см)',
validator: message => {return Number.isInteger(parseInt(message.text))}
}
}
},
weight: {
question: 'Задай вес посылки',
validator: message => {return Number.isInteger(parseInt(message.text))}
}
},
'Ремонт': {
subcategory: {
question: 'Выбери подкатегорию',
keyboard: [['Ремонт мебели', 'Отделочные работы']]
}
}
},
contacts: {
question: 'Оставить контакты?',
keyboard: [['Да', 'Нет']]
}
}
const config = {
buttons: {
cancel: 'Отменить',
back: 'Назад'
},
messages: {
canceled: 'Заполнение формы отменено.',
completed: 'Форма успешно заполнена.'
},
disable_notification: true,
disable_web_page_preview: true,
parse_mode: 'HTML'
}
$.runMultiForm(form, result => console.log(result), config)
Каждая форма состоит из вопросов, на которые должен ответить пользователь. Каждый вопрос должен включать в себя текст вопроса и ответ на него. В качестве проверки ответа выступает функция-валидатор, возвращающая логическое значение, либо текст из кнопок клавиатуры. Если указано и то и другое, функция-валидатор будет иметь приоритет.
...
validator: message => {return Number.isInteger(parseInt(message.text))}
...
В случае, если ответ не прошел проверку, может быть выведено сообщение об ошибке, которое устанавливается полем error.
...
question: 'Выбери подкатегорию',
error: 'Ты неправильно ввел подкатегорию!',
...
При каждом правильном ответе на вопрос производится поиск дочерней формы, объект которой называется именем этого ответа.
...
question: 'Выбери категорию',
error: 'Ты неправильно ввел категорию!',
keyboard: [['Курьер', 'Ремонт']],
'Курьер': {...},
'Ремонт': {...}
...
Есть возможность переопределения текстовых значений, которые будут записаны в результат. Для этого служит поле values.
...
question: 'Установить размер посылки?',
keyboard: [['Да', 'Нет']],
values: {'Да': true, 'Нет': false},
...
Доступна установка дополнительных параметров формы через конфиг, который можно передать в конструктор.
const config = {
buttons: {
cancel: 'Отменить',
back: 'Назад'
},
messages: {
canceled: 'Заполнение формы отменено.',
completed: 'Форма успешно заполнена.'
},
disable_notification: true,
disable_web_page_preview: true,
parse_mode: 'HTML'
}
В объекте buttons задается использование кнопок. Можно включить кнопки отмены и возвращения к предыдущему вопросу. Аналогичным образом, в объекте messages можно включить сообщения при завершении и при отмене формы.
Помимо этого, доступен к изменению ряд стандартных параметров: disable_notification, disable_web_page_preview и parse_mode.
Важно отметить, что конфиг совершенно опционален. Все функции, которыми он управляет по умолчанию выключены. Поэтому, если вы не хотите, допустим, использовать кнопку "Назад", просто не указывайте ее в конфиге.
Для создания таких меню можно воспользоваться методом $.runInlineTabsMenu.
const tabs = [
{
message: 'Первая вкладка',
menu: [
[
{text: 'Один', callback: callbackQuery => console.log('one')},
{text: 'Два', callback: callbackQuery => console.log('two')}
],
[
{text: 'Три', callback: callbackQuery => console.log('three')}
]
]
},
{
message: 'Вторая вкладка',
menu: [
[
{text: 'Четыре', callback: callbackQuery => console.log('four')}
],
[
{text: 'Пять', callback: callbackQuery => console.log('five')}
]
]
},
{
message: 'Третья вкладка'
},
{
message: 'Четвертая вкладка'
},
{
message: 'Пятая вкладка'
},
{
message: 'Шестая вкладка'
}
]
const config = {
title: '<b>Заголовок</b>',
max_buttons: 5,
disable_notification: true,
disable_web_page_preview: true,
parse_mode: 'HTML'
}
$.runInlineTabsMenu(tabs, config)
Массив вкладок содержит объекты, которые описывают каждую отдельную вкладку. В свою очередь, вкладка должна содержать текст (поле message) и может содержать меню с инлайновыми кнопками (поле menu).
...
message: 'Первая вкладка',
menu: [
[
{text: 'Один', callback: callbackQuery => console.log('one')},
{text: 'Два', callback: callbackQuery => console.log('two')}
],
[
{text: 'Три', callback: callbackQuery => console.log('three')}
]
]
...
Меню описывает набор строк и кнопок в них. Каждая кнопка должна содержать текст (поле text) и функцию-колбек (поле callback), который будет вызван при нажатии на эту кнопку.
...
{text: 'Один', callback: callbackQuery => console.log('one')},
...
В конфиге, который передается вторым необязательным параметром в конструктор, можно задать использование заголовка (поле title), который будет добавляться перед текстом вкладки. Поле max_buttons устанавливает максимальное количество кнопок для навигации по вкладкам (по умолчанию 5). Количество кнопок должно быть нечетным.
const config = {
title: '<b>Заголовок</b>',
max_buttons: 5,
disable_notification: true,
disable_web_page_preview: true,
parse_mode: 'HTML'
}
Также можно установить значения для стандартных параметров: disable_notification, disable_web_page_preview и parse_mode.
Появился простой механизм для создания инлайновых клавиатур:
let keyboard = $.genInlineKeyboard('Один', 'one', 'Два', 'two')
$.sendMessage('Выбери действие', {reply_markup: keyboard})
Метод $.genInlineKeyboard генерирует инлайновую клавиатуру из переданных пар аргументов: первый параметр устанавливает текст кнопки, второй устанавливает данные (callback_data). Оба переданных значения должны быть строкового типа.
Также параметры могут быть переданы в виде массива:
let buttons = ['Один', 'one', 'Два', 'two']
$.sendMessage('Выбери действие', {reply_markup: $.genInlineKeyboard(buttons)})
Можно использовать вложенные массивы для создания нескольких кнопок на одной строке:
let buttons = [['Один', 'one'], ['Два', 'two', 'Три', 'three'], 'Четыре', 'four', ['Пять', 'five']]
$.sendMessage('Выбери действие', {reply_markup: $.genInlineKeyboard(buttons)})
FAQs
extensions of telegram-node-bot module
We found that telegram-node-bot-extensions demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.