telegram-node-bot-extensions
Этот небольшой проект представляет собой расширения стандартного функционала для библиотеки telegram-node-bot.
Установка
Добавление пакета в проект через npm:
npm install --save 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: 'Задай длину посылки (см)' {return Number} width: question: 'Задай ширину посылки (см)' {return Number} weight: question: 'Задай вес посылки' {return Number} 'Ремонт': 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' $
Структура формы
Каждая форма состоит из вопросов, на которые должен ответить пользователь. Каждый вопрос должен включать в себя текст вопроса и ответ на него. В качестве проверки ответа выступает функция-валидатор, возвращающая логическое значение, либо текст из кнопок клавиатуры. Если указано и то и другое, функция-валидатор будет иметь приоритет.
... {return Number}...
В случае, если ответ не прошел проверку, может быть выведено сообщение об ошибке, которое устанавливается полем 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: 'Один' console text: 'Два' console text: 'Три' console message: 'Вторая вкладка' menu: text: 'Четыре' console text: 'Пять' console message: 'Третья вкладка' message: 'Четвертая вкладка' message: 'Пятая вкладка' message: 'Шестая вкладка' const config = title: '<b>Заголовок</b>' max_buttons: 5 disable_notification: true disable_web_page_preview: true parse_mode: 'HTML' $
Структура меню
Массив вкладок содержит объекты, которые описывают каждую отдельную вкладку. В свою очередь, вкладка должна содержать текст (поле message
) и может содержать меню с инлайновыми кнопками (поле menu
).
... message: 'Первая вкладка' menu: text: 'Один' console text: 'Два' console text: 'Три' console ...
Меню описывает набор строк и кнопок в них. Каждая кнопка должна содержать текст (поле text
) и функцию-колбек (поле callback
), который будет вызван при нажатии на эту кнопку.
... text: 'Один' console...
Настройка меню
В конфиге, который передается вторым необязательным параметром в конструктор, можно задать использование заголовка (поле 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
генерирует инлайновую клавиатуру из переданных пар аргументов: первый параметр устанавливает текст кнопки, второй устанавливает данные (callback_data
). Оба переданных значения должны быть строкового типа.
Также параметры могут быть переданы в виде массива:
let buttons = 'Один' 'one' 'Два' 'two'$
Можно использовать вложенные массивы для создания нескольких кнопок на одной строке:
let buttons = 'Один' 'one' 'Два' 'two' 'Три' 'three' 'Четыре' 'four' 'Пять' 'five'$