Требуется опыт: понимание терминала и работы с текстовым редактором. Вам также потребуется установить node и npm. Вы можете установить узел здесь, а затем обновить npm здесь.

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

Я хочу начать с установления основных правил, я расширю их в одном из следующих постов в блоге.

  1. Любая концепция будет полностью объяснена в меру моих возможностей. Это означает, что это руководство, вероятно, будет болезненным для любого, кто хорошо разбирается в node или JavaScript. Я предпочитаю быть болезненным и понятным, чем кратким, но сбивающим с толку.
  2. Я НЕ эксперт по JavaScript. Я изучаю JavaScript всего около 3 месяцев. Если вы опытный программист и читаете что-то не так, пожалуйста, поправьте меня, и я буду счастлив отредактировать статью и поблагодарить вас за ваш вклад.
  3. Фрагменты кода, хотя и имеют разумную длину, показывают полный код страницы, чтобы человек, следящий за руководством, мог следить за каждым изменением.

Хорошо, приступим!

Итак, всем нужно резюме, которое выделялось бы из толпы, верно? Я пытался придумать, как сделать интерактивное резюме, которое люди заметят. У меня есть небольшой опыт создания слэк-ботов, поэтому я подумал, что мне стоит попробовать сделать свое резюме слэк-ботом, а затем научить вас, как это делать!

Давайте начнем! Прежде всего, войдите в свой терминал. Если у вас есть папка с проектами или папка «практика», это отличное место для размещения этого проекта. На примере папки проектов я покажу вам, как настроить костяк этого проекта. Примечание: вы можете сделать все это вручную в искателе. Просто создайте новую папку и добавьте в нее файл с именем bot.js.

cd projects
mkdir resume_bot
touch bot.js
npm init (just hit enter on every question it asks you)
npm install --save botkit

Пояснение: мы переходим в папку с нашими проектами. Затем мы создаем новую папку с именем slack_bot внутри этой папки. Затем мы создаем единственный файл для записи нашего кода javascript, который называется bot.js. Мы инициируем npm и соглашаемся со всеми его требованиями, потому что мы нубы и кто знает ??? Наконец, мы говорим npm установить botkit, который является полезным модулем узла, который поможет вам легко создать slackbot. (Думайте о модуле узла как о группе поддержки. Действительно блестящие люди написали вам вспомогательную программу, которую вы можете включить в свое приложение. Когда вы вводите определенные фрагменты кода в свой проект, модуль распознает их и запускает весь умный код заранее. написано другими людьми, поэтому заставьте ваш маленький кусочек кода делать кучу крутых вещей!)

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

atom .

в мой терминал, и мой проект появляется в атоме, готовом к работе.

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

Вы должны увидеть два файла package.json и bot.js и папку с именем node_modules. Package.json похож на карту вашего проекта, созданную при вводе команды npm init. Каждый раз, когда вы устанавливаете новый модуль с помощью npm install, он будет добавлять его в раздел «зависимости» этого файла. Это позволяет узнать обо всех установленных модулях и позволяет любому, кто клонирует или просматривает ваш проект, увидеть, какие модули им понадобятся. Например, вы можете видеть, что боткит теперь указан в списке наших зависимостей.

Теперь о боте! Если вы нажмете на свой файл «bot.js», он должен полностью очиститься.

Первое, что вам нужно сделать, это сообщить вашему файлу, что вы используете боткит в качестве помощника. Вы делаете это в JavaScript, объявляя переменную с красивым понятным именем, а затем словом «требуется». Итак, для нашего проекта вы напечатаете это вверху страницы:

var Botkit = require('botkit');
var os = require('os');

Даже не спрашивайте меня об «os». Я не знаю об «os», кто вам сказал, что я знаю об «os»? Он просто появляется во всей документации боткита, так что я с ним покатаюсь ...

Итак, на этом этапе мы сказали нашему проекту, что ему нужно заглянуть внутрь наших узловых модулей, найти папку с именем botkit и использовать существующие там вспомогательные методы.

Следующим шагом является создание небольшого «шаблонного» кода для боткита. Это просто означает, что мы собираемся написать несколько строк кода, который просто необходим для существования боткита. Для новичка не обязательно понимать их на 100%. Наблюдать:

var Botkit = require('botkit');
var os = require('os');
var controller = Botkit.slackbot({
  debug: true
});
var bot = controller.spawn({
  token: "YOUR_SLACK_TOKEN"
}).startRTM();

Обратите внимание на строку YOUR_SLACK_TOKEN. В вашем канале Slack вы создадите бота, у которого будет специальный идентификатор, который вам нужно будет ввести здесь, чтобы Slack мог сопоставить бота, который вы написали в своем коде, с ботом, который существует на их сайте. Мы вернемся, чтобы заполнить это позже.

Итак, прогон этого кода. Мы настраиваем переменные под названием «контроллер» и «бот». Это означает, что мы пишем фрагмент кода, который будем повторно использовать в нашем приложении. Это помогает нам сократить непрерывное переписывание блоков кода, что является более эффективным и делает наш код более читабельным. Поэтому всякий раз, когда наше приложение видит слово «контроллер», оно читает «Botkit.slackbot ({debug: true});». Как видите, мы не хотим повторять это 10 раз на протяжении всего приложения. Фактически вы можете видеть, что наша вторая переменная «bot» использует нашу первую переменную «controller». Поскольку «контроллер» появляется над «ботом», «бот» может использовать переменную «контроллер». Переменные, как правило, ищут на странице то, что они могут использовать. Таким образом, если «контроллер» находится ниже «бота», «бот» не может использовать контроллер. Смущенный? Я тоже…

Эти переменные содержат логику, необходимую для жизни нашего бота. Эта логика во многом дана нам от нашего удобного помощника Botkit. Вперед, боткит! Заметили всю гадость, которую нам не пришлось писать самим? Например:

var controller = Botkit.slackbot

Откуда появился «Botkit.slackbot»? Я же не писал переменную или функцию под названием slackbot, а вы? Если да, то вы действительно сделали боткит, и это супер круто, что вы читаете мой учебник. Привет!

Это один из тех удобных вспомогательных методов, которые предлагает нам Botkit. Наше приложение смотрит на него, распознает, что мы объявили Botkit как «require ('botkit')» в верхней части нашей страницы, знает, что ему нужно найти Botkit в наших модулях, делает это и извлекает кучу кода. от Botkit.

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

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

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

var Botkit = require('botkit');
var os = require('os');
var controller = Botkit.slackbot({
  debug: true
});
var bot = controller.spawn({
  token: "YOUR_SLACK_TOKEN"
}).startRTM();
controller.on('direct_mention', function(bot, message) {
  bot.reply(message, "Hey there! Thanks for looking at my resume. To get to the good bits there are a few command you'll need. If you want to hear about my work experience type 'experience'. If you want to hear about my education type 'eduction'. If you want my contact information type 'contact'. If you want a list of my past awards and achievements type 'achievements'");
});

Botkit использует "on", чтобы реагировать на ситуации, которые не связаны с сообщениями боту. В этом случае мы говорим ему ответить на «direct_mention» блоком текста. Это означает, что всякий раз, когда кто-то называет его по имени, например «@Resbot» ответит этим сообщением. Вы можете видеть, что в боткит встроен полезный метод, называемый «reply». Он позволяет вам открыть некоторые скобки после «reply», сообщить ему, что вы собираетесь написать сообщение, используя «message», а затем просто выписать все, что это сообщение будет.

Итак, чтобы перевести этот блок кода на простой английский: при прямом упоминании имени бота «@resbot» он ответит сообщением, которое мы для него определили, например: «Привет! … ».

Теперь я буду первым, кто признает, что не совсем понимаю, что здесь происходит. Например, я не хочу подробно расходиться с объяснением функций и того, как они здесь используются, поскольку мне кажется, что ваше внимание, вероятно, тает. Я также знаю, что мое объяснение функций, вероятно, не на высоте. Достаточно сказать, что функции, как и переменные, представляют собой повторно используемые блоки кода, которые выполняют более сложные задачи в зависимости от того, какие данные они получили от вашего приложения. Если вы опытный разработчик, пожалуйста, разорвите это объяснение в клочья.

Просто имейте в виду, что этот блок кода использует функции для запуска блоков кода, когда происходят такие вещи, как получение прямого сообщения.

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

controller.hears(['experience', 'previous employment'],['ambient'], function(bot,message){
  return bot.reply(message, "2010 - experience. 2011 - experience. 2012 - experience". 2013 - chocolate eating champion of the world. 2014 - Transformed into Lionel Messi for a year while on a spirit quest. 2015 - Ate lots of toast. 2016 - wrote JavaScript tutorials");
});

Вы можете видеть, что этот блок следует той же схеме, что и предыдущий. Он заменяет «on» на «hears», чтобы слышать определенные фразы. Вы можете передать ему любое количество фраз, на которые нужно обратить внимание, например «Опыт» и «предыдущая работа» в квадратных скобках (это называется массивом и в основном используется компьютером для понимания списков). Вы можете добавить что-нибудь бессмысленное, например, «яйца вкусные», и он также будет прислушиваться к этому и отвечать тем же методом. Он также использует «окружающий» вместо «прямое сообщение». Это просто позволяет Botkit знать, что вы хотите, чтобы ваш пользователь мог вводить «опыт», а не «опыт @resbot», чтобы он отображал это сообщение.

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

var Botkit = require('botkit');
var os = require('os');
var controller = Botkit.slackbot({
  debug: true
});
var bot = controller.spawn({
  token: "YOUR_SLACK_TOKEN"
}).startRTM();
controller.on('direct_mention', function(bot, message) {
  bot.reply(message, "Hey there! Thanks for looking at my resume. To get to the good bits there are a few command you'll need. If you want to hear about my work experience type 'experience'. If you want to hear about my education type 'eduction'. If you want my contact information type 'contact'. If you want a list of my past awards and achievements type 'achievements'");
});
controller.hears(['experience', 'previous employment'],['ambient'], function(bot,message){
  return bot.reply(message, "2010 - experience. 2011 - experience. 2012 - experience". 2013 - chocolate eating champion of the world. 2014 - Transformed into Lionel Messi for a year while on a spirit quest. 2015 - Ate lots of toast. 2016 - wrote JavaScript tutorials" );
});
... your additional code

Но мы еще не закончили. Мы должны подписать вас на слабый канал. Перейдите на https://slack.com/ и зарегистрируйтесь в Slack-канале (если у вас уже есть Slack-канал, вы можете протестировать его, пропустите этот шаг и просто войдите в Slack в своем браузере). После того, как вы зарегистрировались для учетной записи Slack, вы должны перейти на https://YOURSLACKCHANNELNAME.slack.com/apps/build/custom-integration, заменив YOURSLACKCHANNELNAME на имя вашего канала Slack для вашего канала Slack, у которого есть имя, ваше имя вашего канала. Имя. Канал. Понимать?

Теперь нажмите Bots, выберите имя пользователя для своего бота, например. «Resbot» и нажмите «Добавить интеграцию». Теперь у вас есть возможность выбрать собственный значок для своего бота, дать ему имя, фамилию и описание, но это все необязательно. Самое главное здесь то, что вам нужно будет скопировать API-токен из верхней части страницы в свой проект здесь:

var bot = controller.spawn({
  token: "YOUR_SLACK_TOKEN"
}).startRTM();

Убедитесь, что вы заключили его в кавычки. Теперь просто нажмите "Сохранить интеграцию", и все готово.

Теперь, если вы откроете свой Slack-канал, вы все равно заметите, что там нет бота. Вам нужно дать ему жизнь, запустив его в своем терминале. Находясь в папке проекта, сделайте следующее:

node resume_bot.js (or whatever you called your bot file)

Теперь в вашем терминале будет запущена целая куча вещей. Теперь вернитесь к Slack и выберите «случайный» тип канала в @resbot, и Slack спросит вас, хотите ли вы добавить его в свой канал. Скажи слабину, да! Теперь все должно работать. Попробуйте называть его по имени еще раз, и он заговорит с вами.

Отличная работа! У вас есть работающий Slack-бот! И это заняло всего 31 строку кода.

Вы можете попробовать несколько более сложных вещей:

  1. Разместите своего бота в сети, чтобы он не просто жил в вашем терминале. Рекомендую использовать Heroku.
  2. Создайте API-интерфейс express / koa, содержащий текст вашего резюме, который отправляет эти данные вашему боту. Это довольно бесполезно, но будет хорошей практикой для имитации запросов, которые вы могли бы сделать в реальном приложении.

Будем признательны за любые отзывы о том, как был написан этот учебник.