Статьи

Как оживить свой слабый канал с Hubot

Hubot — это робот CoffeeScript с открытым исходным кодом, который может отслеживать команды и реагировать на них с помощью различных приложений чата. Как с гордостью заявляет GitHub, «он может помочь значительно улучшить и снизить эффективность работы сотрудников» (в зависимости от того, как вы его используете). В этой статье мы настроим Hubot, интегрируем его со Slack и продемонстрируем как повышенную, так и пониженную эффективность, которую мы можем получить благодаря плодам нашего труда.

Что может сделать Hubot?

Единственным ограничением для Hubot является ваше собственное воображение. Тем не менее, важно понимать, что, хотя вы можете делать с Hubot практически все, возникает вопрос, не так ли? От публикации изображений, перевода языков, отправки напоминаний о предстоящих днях рождения до создания отчета о последних действиях вашей команды. Hubot обладает множеством способностей благодаря очень надежной системе сообщений и хорошо расположенным хукам .

Вверх и работает

Итак, давайте запустим Hubot. Для этого нам понадобится Node.js, а также npm (менеджер пакетов Node). Если вы не знаете, как это сделать, ознакомьтесь с нашим руководством: Руководство для начинающих по npm .

Затем установите следующие пакеты по всему миру:

  • Hubot — рамки Hubot
  • coffee-script — сценарии Hubot написаны на CoffeeScript
  • yo — инструмент CLI для запуска генераторов Yeoman
  • generator-hubot — генератор Yeoman для создания собственного чат-бота с использованием фреймворка Hubot

Вы можете сделать это с помощью следующей команды:

npm install -g hubot coffee-script yo generator-hubot 

Затем нам нужно создать каталог для размещения нашего нового друга и запустить вышеупомянутый генератор Yeoman.

 mkdir test-bot && cd test-bot yo hubot 

Если все прошло хорошо, Hubot появится и задаст вам несколько вопросов. Введите ваше имя, имя нового бота и описание. Вы можете оставить адаптер как костер. Перед выходом создаст кучу файлов.

Скриншот работающего генератора Hubot

Теперь запустите bin/hubot для bin/hubot вашего нового бота.

Тестовый прогон

Чтобы увидеть, на что способен ваш новый бот, запустите:

 <bot_name> help 
 test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional  test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional   test-bot> ship it - Display a motivation squirrel test-bot adapter - Reply with the adapter test-bot animate me - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. test-bot echo - Reply back with test-bot help - Displays all of the help commands that test-bot knows about. test-bot help - Displays all help commands that match . test-bot image me - The Original. Queries Google Images for and returns a random top result. test-bot map me - Returns a map view of the area returned by `query`. test-bot mustache me - Searches Google Images for the specified query and mustaches it. test-bot mustache me - Adds a mustache to the specified URL. test-bot ping - Reply with pong test-bot pug bomb N - get N pugs test-bot pug me - Receive a pug test-bot the rules - Make sure test-bot still knows the rules. test-bot time - Reply with current time test-bot translate me - Searches for a translation for the and then prints that bad boy out. test-bot translate me from into - Translates from into . Both and are optional 

Вот это да! Хорошо, давайте попробуем один из них:

 test-bot translate me from German into English Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz 

Производит:

 test-bot> The German "Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz" translates as "Beef labeling monitoring delegation law" in English 

Потрясающие!

Так что Hubot работает. Не стесняйтесь поиграть еще немного, прежде чем перейти к следующему шагу.

Интеграция Hubot со Slack

Slack — это инструмент для совместной работы в команде, который предлагает постоянные чаты, а также частные группы и прямой обмен сообщениями. Slack также является предпочтительным инструментом SitePoint для облегчения сотрудничества между его участниками, которые базируются по всему миру. Давайте интегрируем нашего бота со Slack.

Первое, что нам нужно сделать, это установить адаптер Slack в наш проект:

 npm install hubot-slack --save 

Как только это будет сделано, откройте страницу Slack Team и перейдите в область «Настройка интеграции». Найдите интеграцию Hubot и нажмите «Добавить». Slack попросит вас указать имя пользователя для вашего бота. Я выбираю Jarvis и Tars для двух ботов, которые я создал для персонала Sitepoint Forum.

Как только имя пользователя будет указано, Slack создаст учетную запись в вашей команде с этим именем пользователя и назначит ему токен API. Очень важно хранить этот токен API в секрете, поэтому не проверяйте его в своем git-репозитории. У вас также будет возможность настроить значок вашего бота, имя и фамилию, что он делает и так далее.

Имея токен API в руках, мы теперь можем запустить нашего бота локально, используя следующую команду:

 HUBOT_SLACK_TOKEN=YOUR_SLACK_API_TOKEN_HERE ./bin/hubot --adapter slack 

Это позволит войти в ваш бот в Slack, чтобы вы могли поговорить с ним там. Попробуйте это, выполнив приведенную выше команду, посетив канал #general (Hubot использует его по умолчанию) и выполнив такую ​​команду:

 <bot_name> pug me 

Примечание : как только вы закончите экспериментировать локально, хорошей идеей будет переместить вашего бота куда-нибудь на более постоянный уровень (например, Heroku). Есть много хороших руководств о том, как это сделать, и я не буду освещать это здесь.

Где найти готовые сценарии

Вы можете найти множество сценариев для сопряжения с вашим Hubot на веб-сайте npm, используя ключевое слово «hubot-scripts» . Все эти скрипты могут быть добавлены к вашему боту с помощью команды npm с параметром --save .

Давайте попробуем это с помощью скрипта, который выбирает изображения случайных кошек . Как весело! Бегать:

 npm install hubot-catme --save 

Затем добавьте hubot-catme в ваш файл hubot-catme :

 [ "hubot-catme", "hubot-diagnostics", "hubot-help", ... ] 

Запустите бот локально (как указано выше), затем зайдите в #general и введите:

 <bot_name> cat me with funny 

Если все идет хорошо, ваш бот должен вытащить случайную, но забавную фотографию кота из Интернета.

Создание сценария для снижения эффективности сотрудников

Есть много способов снизить эффективность с помощью Hubot, от использования мопсовых pug bombs до создания сценария, который случайным образом выбирает ответ (иногда комичный) при получении команды. Последний, на котором мы сосредоточимся в этой статье, является частью программирования Джарвиса .

Я проиллюстрирую это, используя следующий скрипт с именем which-is-better.coffee . Поместите этот файл в директорию scripts .

 # Description: # Which is Better? # # Dependencies: # None # # Configuration: # None # # Commands: # hubot which is better[?] <text> or <text>? # hubot who is better[?] <text> or <text>? # hubot which is worse[?] <text> or <text>? # hubot who is worse[?] <text> or <text>? # # Author: # cpradio uhh_what = [ "I could tell you, but then I'd have to kill you", "Answering that would be a matter of national security", "You can't possibly compare them!", "Both hold a special place in my heart" ] module.exports = (robot) -> robot.respond /(which|who) is (better|worse)\?* (.*) or (.*?)\??$/i, (msg) -> choosen_response = msg.random [1..5] if choosen_response >= 3 msg.send msg.random uhh_what else msg.send "Clearly #{msg.match[choosen_response + 2]} is #{msg.match[2]}" 

В верхней части скрипта находится наш базовый шаблон комментариев. Здесь вы можете указать описание того, для чего предназначен скрипт, какие у него зависимости и как его можно настроить. Также важно включить команды, которые люди могут использовать для взаимодействия с вашим сценарием.

Чуть дальше мы находим строку с module.exports = (robots) -> где будут жить ваши инструкции Hubot.

Следующая часть использует метод .respond для прослушивания определенной команды, направленной на вашего бота. Все методы слушания и ответа принимают регулярное выражение в качестве входных данных. Когда это регулярное выражение находит подходящее совпадение, вызывается логика, связанная с .hear и .respond .

В этом случае я выбираю .respond , потому что я хочу, чтобы Hubot отвечал на прямую команду. Если бы я хотел, чтобы он отвечал, даже если команда не направлена ​​на него, я бы использовал .hear

В этом случае регулярное выражение совпадает с фразой «что лучше», «кто лучше», «что хуже» и «кто хуже», за которым следуют два варианта.

 robot.respond /(which|who) is (better|worse)\?* (.*) or (.*?)\??$/i, (msg) -> 

Следующий оператор выбирает случайное число от 1 до 5. Если выбранное число больше или равно 3, он будет использовать один из ответов, сохраненных в массиве uhh_what для отправки пользователю, в противном случае он сначала выберет соответствующий или Второй вариант пользователь предоставил как часть своего ответа.

 choosen_response = msg.random [1..5] if choosen_response >= 3 msg.send msg.random uhh_what else msg.send "Clearly #{msg.match[choosen_response + 2]} is #{msg.match[2]}" 

Чтобы проверить это, запустите Hubot, используя:

 HUBOT_SLACK_TOKEN=YOUR_SLACK_API_TOKEN_HERE ./bin/hubot --adapter slack 

После этого вы сможете протестировать свой скрипт в Slack, используя:

 <bot_name> who is better? Bill Gates or Steve Jobs? 

Или вы можете стать немного более креативным, как показано ниже.

Вывод «кто лучше»

Создание сценария для повышения эффективности сотрудников

Основная причина, по которой я внедрил Hubot, вовсе не обязательно отвлекала от ценных разговоров. Фактически, именно поэтому Jarvis, наш веселый бот, ограничен нашим каналом #random , а скорее, я хотел автоматизировать некоторые задачи, которые мы используем для персонала. постоянная основа. С этой целью Тарс родился и живет в частной группе «Лидер группы», чтобы помочь нам найти статистику форума.

Одна статистика, которую должен знать каждый руководитель группы: кто недавно присутствовал, а кто нет. Скрипт Tars ‘ discourse.group.info.coffee обеспечивает это понимание.

 # Description: # Query Discourse for Group Information # # Dependencies: # None # # Configuration: # HUBOT_DISCOURSE_URL # # Commands: # hubot show <group> group info [from discourse] # # Author: # cpradio last_checkin_date = new Date(); last_checkin_date.setHours(0,0,0,0); dif = (last_checkin_date.getDay() + 6) % 7; last_checkin_date = new Date(last_checkin_date - dif * 24*60*60*1000); module.exports = (robot) -> robot.respond /show (.+) group info( from discourse)?/i, (res) -> groupname = res.match[1] user_url = process.env.HUBOT_DISCOURSE_URL + "/groups/#{encodeURIComponent(groupname)}/members.json" res.http(user_url) .get() (err, _, body) -> return res.send "Sorry, the tubes are broken." if err try data = JSON.parse(body.toString("utf8")) checkin_date_str = last_checkin_date.toDateString() output = "Discourse Info: #{groupname} (last check-in date: #{checkin_date_str})\r\n" for own key, user of data.members username = user.username last_seen = new Date(user.last_seen_at) last_seen_as_date = new Date(last_seen) checked_in = last_seen_as_date > last_checkin_date checked_in_str = if checked_in then "(checked in)" else "(not checked in)" prefix_suffix = if checked_in then "" else "*" output += " #{prefix_suffix}User #{username} was last seen on #{last_seen} #{checked_in_str}#{prefix_suffix}\r\n" res.send output catch e res.send "Discourse data for #{groupname} group is unavailable." 

Как и в предыдущем примере, в этом также есть заполненные комментарии. Эта команда должна использоваться различными участниками, и важно знать, как ее запустить. Во-вторых, для работы этой команды должна быть настроена переменная окружения, которая также указана в списке.

В этом примере мне просто нужно, чтобы tars show {group_name} group info отвечал на прямую команду tars show {group_name} group info где {group_name} соответствует группе, созданной на форуме Discourse (примечание: на этой странице должна быть открытая страница, на которой перечислены ее члены группы, чтобы Работа).

 groupname = res.match[1] user_url = process.env.HUBOT_DISCOURSE_URL + "/groups/#{encodeURIComponent(groupname)}/members.json" res.http(user_url) .get() (err, _, body) -> return res.send "Sorry, the tubes are broken." if err try data = JSON.parse(body.toString("utf8")) ... 

Затем команда создает URL-адрес для получения фида json из Discourse и перебирает его набор данных, чтобы получить результат, аналогичный приведенному ниже.

Вывод «Показать информацию о группе наставников»

Теперь любой руководитель группы может запросить информацию о группе, узнать, кто не был активным какое-то время, и связаться с этими участниками. Как и предыдущий скрипт, вам нужно будет запустить Hubot, однако нам нужно добавить новую переменную среды в стартовый скрипт, которая содержит URL-адрес Discourse, с которым мы планируем запустить наш скрипт. Ради этой статьи давайте использовать экземпляр Discourse в Sitepoint.

 HUBOT_DISCOURSE_URL=https://www.sitepoint.com/community HUBOT_SLACK_TOKEN=YOUR_SLACK_API_TOKEN_HERE ./bin/hubot --adapter slack 

Теперь в Slack вы можете выполнить команду:

 <bot_name> show mentors group info 

Продолжай и экспериментируй!

Ну, это Hubot в двух словах. У вас есть возможность интегрировать его с множеством адаптеров , множеством скриптов , и вы даже можете создать свой собственный, используя его API и немного CoffeeScript! Так что ты собираешься создать с этим? Позвольте мне знать в комментариях ниже.