Рубрики
Без рубрики

Как построить Slackbot с Node.js и slackbots.js

SLACK – это американский набор облачных набор проприетарных командных инструментов программного обеспечения для сотрудничества команд и онлайн-сервисов, разработанные Slack Technologies. Slack – это рабочее пространство, где команды могут общаться и сотрудничать. Работа в команде в Slack происходит в каналах – одно место для обмена сообщениями, инструментами и файлами – помогая всем сэкономить время и сотрудничать. Один

SLACK – это американский набор облачных набор проприетарных командных инструментов программного обеспечения для сотрудничества команд и онлайн-сервисов, разработанные Slack Technologies. Slack – это рабочее пространство, где команды могут общаться и сотрудничать.

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

Одна из потрясающих особенностей слабых является Slack Apps , интеграции и Слабые боты Отказ

SLAST BOT – это тип Slack App, предназначенный для взаимодействия с пользователями через разговор. Ваш бот может отправлять DMS, он может быть упомянут пользователями, он может опубликовать сообщения или загружать файлы, и его можно пригласить на каналы. Круто верно?

Если вы уже используете Slash, вы должны быть знакомы с некоторыми творческими ботами, такими как Стойка , День рождения и более.

В этой статье я пойду на тебя через создание вашего первого провисающего бота от начала до конца с Node.js а также Slackbots.js.

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

Я построил Chrome расширение Это отображает случайные вдохновляющие цитаты Techie для разработчиков/дизайнеров на вашей новой вкладке (вы можете скачать его здесь ). Мы будем использовать цитаты JSON из этого расширения как наши цитаты API и Чак Норрис шутчики API для шуток.

Когда пользователь упоминает наш бот и добавляет вдохновлять меня Бот возвращает случайную цитату из Inspirenuggets Отказ Когда типы пользователей Случайная шутка , это возвращает случайную шутку из Чак Норрис API. И когда пользовательские типы помогают, он возвращает руководство по эксплуатации.

Эта статья на самом деле не о том, что мы будем строить – это просто чтобы показать вам концепцию Slack Botts и как создать свою. После того, как вы пройдете через него, вы можете подумать о чем-то еще и построить другой бот, так как много возможностей.

Вы можете клонировать или вил окончательный проект здесь Отказ

Довольно интересно верно? Давайте начнем.

Мы построим этот бот с Node.js и slackbots.js. Вам не нужно знать, как написать Node.js, поскольку я пойду на тебя через него. Тем не менее, зная, что это преимущество. Вы также должны иметь

  • Основные знания JavaScript
  • ES6 JavaScript
  • Расслабиться рабочая среда
  • Какой-то опыт с провисанием
  • Некоторые навыки контроля версии

Давайте настроим и установим Node.js и NPM сначала.

  • Скачать узел здесь Отказ Если у вас уже установлено, пропустите этот шаг. Если вы предпочитаете использовать менеджер пакета для установки, читать Это Для всех операционных систем.
  • Проверьте, если у вас есть узел установлены
node -v
  • Node.js поставляется с NPM, поэтому вам не нужно устанавливать это снова.
npm -v

Теперь, когда у нас есть настройка Node.js, давайте инициализируем наш проект.

Создайте свой каталог проекта (я позвонил Mine Slackbot) и инициализируйте Git:

git init

Далее создайте index.js файл:

touch index.js

И инициализировать NPM:

npm init

Просто ответьте на все вопросы, которые приходят впоследствии. Если у вас есть проблемы, вот мой собственный package.json :

{
  "name": "slackbot",
  "version": "1.0.0",
  "description": "A simple Slackbot that displays random inspiring techie quotes for developers/designers.",
  "main": "index.js",
  "scripts": {
    "start": "index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/BolajiAyodeji/slackbot.git"
  },
  "author": "Bolaji Ayodeji",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/BolajiAyodeji/slackbot/issues"
  },
  "homepage": "https://github.com/BolajiAyodeji/slackbot#readme"
}

Теперь давайте установимся и настроим все библиотеки, которые нам нужны.

Slackbots.js.

Slackbots.js Это библиотека Node.js для простота работы с помощью Slack API.

npm install slackbots

В index.js :

const SlackBot = require('slackbots');

Axios.

Axios Клиент HTTP на основе обещания для браузера и Node.js. Если вы знаете Fetch или Ajax, это всего лишь библиотека, которая делает то же самое с помощью функций охлаждения. Вы можете увидеть их здесь Отказ

npm install axios

В index.js :

const axios = require('axios')

Узел

Чтобы запустить скрипт в Node.js, вы должны запустить Узел index.js Отказ Всякий раз, когда вы вносите изменения в этот файл, вы должны перезагрузить Узел index.js. . Это отстой, когда вы делаете так много изменений, как мы будем делать. Вот почему нам нужно узел , Инструмент, который помогает разработать приложения на основе Node.js, автоматически перезапускаю приложение узла при обнаружении изменений файлов в каталоге.

npm install -g nodemon

В package.json Найдите раздел сценариев и добавьте новый сценарий запуска:

"scripts": {
    "start": "node index.js"
  }

Если вы запустите NPM начать , файл будет работать, но не будет перезапущен на изменение. Чтобы исправить это, используйте Nodemon, который мы установили вместо узла, как так:

"scripts": {
    "start": "nodemon index.js"
  }

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

Есть несколько способов сделать это, но я предпочитаю использовать Dotenv. Доценв Это модуль нулевой зависимости, который загружает переменные среды из файла .env в Process.env.

npm install dotenv

В index.js :

const dotenv = require('dotenv')

dotenv.config()

Ведь установка, ваш package.json должен выглядеть так:

{
  "name": "inspireNuggetsSlackBot",
  "version": "1.0.0",
  "description": "A simple Slackbot that displays random inspiring techie quotes and jokes for developers/designers.",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/BolajiAyodeji/inspireNuggetsSlackBot.git"
  },
  "author": "Bolaji Ayodeji",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/BolajiAyodeji/inspireNuggetsSlackBot/issues"
  },
  "homepage": "https://github.com/BolajiAyodeji/inspireNuggetsSlackBot#readme",
  "devDependencies": {
    "dotenv": "^8.0.0"
  },
  "dependencies": {
    "axios": "^0.19.0",
    "slackbots": "^1.2.0"
  }
}

Теперь, когда у нас есть, что все настроили, нам нужна лобское рабочее пространство для запуска нашего бота в развитии. Создание рабочей области довольно легко, читайте Это Узнать больше.

Теперь, когда у вас есть рабочее пространство, у вас должен быть ударный URL с именем вашего рабочего пространства. Мой это mekafindteam.slack.com .

Теперь вам нужно будет создать приложение Slack. Создать один здесь Отказ

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

Теперь вы увидите настройки> Основная страница информации. Нажмите на первую вкладку Добавить функции и функциональные возможности :

Так как мы строим бот, выберите Боты поле.

Теперь вы увидите страницу пользователя Bot:

Нажмите на Добавьте пользователя бота кнопка.

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

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

Сохраните все изменения сейчас:

Далее вернитесь к Основная информация Страница и выберите Установите свое приложение в свое рабочее пространство вкладка.

Нажмите на Установите приложение к Workspace :

Нажмите Разрешить и ждать, чтобы быть перенаправленным обратно в Основная информация страница.

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

Если вы проверяете свое проклеемое рабочее пространство сейчас, вы должны увидеть приложение, установленное в разделе приложений.

На данный момент это в автономном режиме – как только мы начнем строить бот, мы включим это.

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

Тем не менее, на Основная информация Страница, прокрутите вниз до Показать информацию раздел:

Это базовые вещи: просто загрузите логотип, измените цвет фона и добавьте краткое описание.

Ваша иконка должна быть 512x512px или больше, и ваш цвет фона должен быть в шестнадцатеричном. Читайте больше в рекомендации приложений здесь Отказ

Вот что мой выглядит так, как после настройки:

Теперь, когда у нас есть наша установка Slack Bot, давайте схватим ключи токена.

В панели навигации найдите раздел «Особенности» и нажмите « » ОАУТ и разрешение Вкладка:

Вы увидите два токена доступа:

  • Токен доступа к ОАУТ
  • Бот пользователь OAUTH Access Токен

Скопируйте Бот пользователь OAuth Access токен.

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

Вот почему мы установили Dotenv – мы установим это в следующем разделе.

Теперь давайте построим наш бот:).

Во-первых, давайте держать наш токен доступа где-то.

Создать .env Файл и добавьте это:

BOT_TOKEN=YOUR_SLACK_ACCESS_TOKEN_HERE

Теперь давайте начнем нашу slackbot.js:

const bot = new SlackBot({
    token: `${process.env.BOT_TOKEN}`,
    name: 'inspirenuggets'
})

Мы только что создали переменную BOT, которая инициализирует новый экземпляр Slowbot, который имеет два значения, наш токен и имя приложения.

Я использовал ES6 шаблон строки синтаксиса Чтобы принести в нашу ключ токена от нашего .env файл. Доценв охватил это для нас.

Убедитесь, что вы используете одно и то же имя, которое вы использовали при создании вашего приложения Slack, иначе вы будете иметь ошибки аутентификации.

Теперь запустите приложение:

npm start

Nodemon должен работать сейчас, и наше Slack App тоже должно быть онлайн.

Начать обработчик

Наш бот ничего не делает, даже несмотря на то, что он работает. Давайте вернем сообщение.

bot.on('start', () => {
    const params = {
        icon_emoji: ':robot_face:'
    }

    bot.postMessageToChannel(
        'random',
        'Get inspired while working with @inspirenuggets',
        params
    );
})

Bot.on Обработчик отправляет приветственное сообщение. Мы прошли два параметра, «Начать» и функция, которая содержит переменную параметров, которая также содержит провисающую эмодзи. Slack Emoji есть коды, и вы можете найти их здесь Отказ Я использовал : Robot_face: , но вы можете изменить это на ваш любимый эмодзи.

Мы также инициализировали Бот.Постмессагеточанал Функция, которая является методом Slackbot.js, чтобы опубликовать сообщение на канал. В этой функции мы передаем имя канала, которое мы хотим опубликовать, это сообщение в строке, а переменная параметров мы объявили ранее для Emoji. Я использовал #random канал и отправлено Вдохновляйтесь во время работы с @inspirenuggets к этому. Ваше приложение должно перезапустить автоматически, и ваш бот должен сделать это:

Круто верно? Вы также можете размещать сообщения пользователям и группам.

    // define existing username instead of 'user_name'
    bot.postMessageToUser('user_name', 'Hello world!', params); 
   
    
    // define private group instead of 'private_group', where bot exist
    bot.postMessageToGroup('private_group', 'Hello world!', params); 

Обработчик ошибок

Давайте также напишем функцию, чтобы проверить наличие ошибок и возвращать их:

bot.on('error', (err) => {
    console.log(err);
})

Обработчик сообщений

Теперь давайте построим основную функциональность бота.

Как и я сказал ранее, мы будем использовать цитаты JSON из расширения, которое я построен в виде наших цитат API. JSON можно найти с этим URL: https://raw.githubusercontent.com/bolajiayodeji/inspirenuggets/master/src/quotes.json.json.

Когда пользователь упоминает наш бот и добавляет вдохновлять меня Бот возвращает случайную цитату из Inspirenuggets Отказ Когда типы пользователей Случайная шутка , это возвращает случайную шутку из Чак Норрис API. И когда пользователь типы Помогите он возвращает руководство по эксплуатации.

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

function handleMessage(message) {
    if(message.includes(' inspire me')) {
        inspireMe()
    } else if(message.includes(' random joke')) {
        randomJoke()
    } else if(message.includes(' help')) {
        runHelp()
    }
}

Теперь давайте создадим три функции, которые нам нужны

вдохновить меня()

Наша демонстрация JSON на самом деле не API, это просто немного JSON, я использовал в хромированном расширении. Мы доступ к этому только из Github Raw Content. Вы можете использовать любую API, которую вы предпочитаете, вы просто должны по-разному получить свои данные, чтобы ваши данные в зависимости от того, если ваша API возвращает массив или объект – в зависимости от того, что он возвращается, это не имеет большого значения.

Проверьте мои предыдущие статьи на:

function inspireMe() {
    axios.get('https://raw.githubusercontent.com/BolajiAyodeji/inspireNuggets/master/src/quotes.json')
      .then(res => {
            const quotes = res.data;
            const random = Math.floor(Math.random() * quotes.length);
            const quote = quotes[random].quote
            const author = quotes[random].author

            const params = {
                icon_emoji: ':male-technologist:'
            }
        
            bot.postMessageToChannel(
                'random',
                `:zap: ${quote} - *${author}*`,
                params
            );

      })
}

Мы просто использовали Axios, чтобы получить файл JSON, который возвращает некоторые данные:

[
    {
        "number": "1",
        "author": "Von R. Glitschka",
        "quote": "The client may be king, but he's not the art director."
    },
    {
        "number": "2",
        "author": "Frank Capra",
        "quote": "A hunch is creativity trying to tell you something."
    },
.
.
.
.
]

Этот JSON в настоящее время содержит 210 цитат, и я часто обновляю их. Поэтому мы хотим получить случайную цитату плюс имени автора каждый раз, когда пользователь его запрашивает. Из нашей реакции Axios мы просто делаем это:

const quotes = res.data;
const random = Math.floor(Math.random() * quotes.length);
const quote = quotes[random].quote
const author = quotes[random].author

И так же, как мы сделали с приветственным сообщением, мы просто вернем цитату и автору вместо строкового сообщения:

`:zap: ${quote} - *${author}*`

Давайте проверим это:

Тип @inspirenuggets вдохновляют меня

Йой! Это сработало!

PS: Вы всегда можете изменить тип emoji для каждого запроса. Если вы заметили, я изменил вдохновляем () к : Мужской технолог:

RANDENGEJOKE ()

Мы получаем шутки из Чака Норриса API с этой конечной точки https://api.cchucknorris.io/jokes/random Отказ

{
"categories": [],
"created_at": "2016-05-01 10:51:41.584544",
"icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
"id": "6vUvusBeSVqdsU9C5-ZJZw",
"updated_at": "2016-05-01 10:51:41.584544",
"url": "https://api.chucknorris.io/jokes/6vUvusBeSVqdsU9C5-ZJZw",
"value": "Chuck Norris once choked a wildcat to death with his sphincter muscle."
}

Это настоящий API, который возвращает случайную шутку на любой запрос, поэтому нам не нужно делать Math.floor () опять таки.

function randomJoke() {
    axios.get('https://api.chucknorris.io/jokes/random')
      .then(res => {
            const joke = res.data.value;

            const params = {
                icon_emoji: ':smile:'
            }
        
            bot.postMessageToChannel(
                'random',
                `:zap: ${joke}`,
                params
            );

      })
}

К настоящему времени вы должны понимать, как это работает уже. Сделайте сообщение с именем канала, сообщение и параметры.

runhelp ()

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

function runHelp() {
    const params = {
        icon_emoji: ':question:'
    }

    bot.postMessageToChannel(
        'random',
        `Type *@inspirenuggets* with *inspire me* to get an inspiring techie quote, *random joke* to get a Chuck Norris random joke and *help* to get this instruction again`,
        params
    );
}

Теперь давайте проверим все три команды:

Теперь все работает хорошо, поздравляю !!!! Вы просто построили свой Slackbot.

Существует бесконечное количество возможностей ботов, которые вы можете построить с этим, чтобы автоматизировать свою работу или совместную работу.

Вы можете построить бот, который:

  • Выбирает ваши задачи откуда-то и напоминает вам, когда вы вводите эй, что следующее С
  • Приветствует каждого пользователя к вашим рабочем пространстве (я построил это во время одного из стажировка HNG ),
  • Дает вам футбольные матчи обновления во время работы,
  • Рассказывает вашу команду, когда вы попадаете на вехое в количестве зарегистрированных пользователей,

И еще много …

Это почти где-то получить данные, а некоторые основные навыки итерации и Bot.PostmessageTochannel () метод.

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

Вот наш финал index.js.

const SlackBot = require('slackbots');
const axios = require('axios')
const dotenv = require('dotenv')

dotenv.config()

const bot = new SlackBot({
    token: `${process.env.BOT_TOKEN}`,
    name: 'inspirenuggets'
})

// Start Handler
bot.on('start', () => {
    const params = {
        icon_emoji: ':robot_face:'
    }

    bot.postMessageToChannel(
        'random',
        'Get inspired while working with @inspirenuggets',
        params
    );
})

// Error Handler
bot.on('error', (err) => {
    console.log(err);
})

// Message Handler
bot.on('message', (data) => {
    if(data.type !== 'message') {
        return;
    }
    handleMessage(data.text);
})

// Response Handler
function handleMessage(message) {
    if(message.includes(' inspire me')) {
        inspireMe()
    } else if(message.includes(' random joke')) {
        randomJoke()
    } else if(message.includes(' help')) {
        runHelp()
    }
}

// inspire Me
function inspireMe() {
    axios.get('https://raw.githubusercontent.com/BolajiAyodeji/inspireNuggets/master/src/quotes.json')
      .then(res => {
            const quotes = res.data;
            const random = Math.floor(Math.random() * quotes.length);
            const quote = quotes[random].quote
            const author = quotes[random].author

            const params = {
                icon_emoji: ':male-technologist:'
            }
        
            bot.postMessageToChannel(
                'random',
                `:zap: ${quote} - *${author}*`,
                params
            );

      })
}

// Random Joke
function randomJoke() {
    axios.get('https://api.chucknorris.io/jokes/random')
      .then(res => {
            const joke = res.data.value;

            const params = {
                icon_emoji: ':smile:'
            }
        
            bot.postMessageToChannel(
                'random',
                `:zap: ${joke}`,
                params
            );

      })
}

// Show Help
function runHelp() {
    const params = {
        icon_emoji: ':question:'
    }

    bot.postMessageToChannel(
        'random',
        `Type *@inspirenuggets* with *inspire me* to get an inspiring techie quote, *random joke* to get a Chuck Norris random joke and *help* to get this instruction again`,
        params
    );
}

Наш бот сейчас работает только в разработке, и использовать его, мы всегда должны NPM Start. .

Это не круто, верно? Мы захотим принять его где-то, он может работать каждый раз. В моей следующей статье я покажу вам, как разместить это на либо Heroku , Zeit. или NetLify И публикуйте его в магазин Slack Apps, чтобы любой мир мог его использовать. Кроме того, не забудьте добавить это в свой .gitignore Перед толканием на Github:

/.env
/node_modules

Оригинал: “https://www.freecodecamp.org/news/building-a-slackbot-with-node-js-and-slackbots-js/”