Node.js and MongoDB Slack Bot Example

Node.js and MongoDB Slack Bot Example

Step by step tutorial of building Slack Bot using Node.js and MongoDB with the help of Slackbots module

The comprehensive step by step tutorial of building Slack Bot using Node.js and MongoDB with the help of Slackbots module. Slack become the popular tools recently that used by developers. There is a Bot feature on the Slack that can be accessed by Slack RTM. On the Node.js environment, there are a lot of modules that can use for accessing Slack RTM easily. We will be using this Slackbots module for this tutorial. You can find more available methods on their GitHub README. We are already written the tutorial for Java and Spring Boot, we can replicate the steps for generating Slack Bot token from there.

The scenario for this tutorial same as Java version tutorial. There is catch the keyword from a conversation or chats that contains harsh words or bad words (ex: fu*ck, sh*t, b*tch) then save it to MongoDB include with User who sends it. The Slack will count that words from MongoDB until getting 5 words then the Bot will send back the message to channels to warns the sender of bad words.

The following tools, frameworks, and modules are required for this tutorial:

Node.js

Mongoose module

- Bluebird module

Slackbots module

MongoDB

- Slack Account

- IDE and Text Editor

- Terminal (OSX/Linux) or Node.js Command Line (Windows)

Before continuing to the steps of the tutorial, make sure you have installed Recommended version of Node.js and MongoDB on your machine.

1. Generate Slack Bot Token

We need a Slack token before moving to Spring Boot MongoDB Slack Bot tutorial. For that, on the browser go to https://yourworkspace.slack.com/services/new/bot. You will redirect to the login form if not logged in yet. Log in using your workspaces user then you will entering Slack Bot configuration page.

Give username for your bot then click Add Bot Integration button. That's it, now you have your Bot token that ready to use. Save that code somewhere in your local, do not try to save it on public repositories or the bot will be disabled by Slack.

2. Create a Node.js Application

To create a Node.js application, open the terminal then go to your Node projects folder then create a folder for this Node.js app.

mkdir node-slackbot

Next, go to the newly created folder then type this command to initialize the Node.js application.

cd node-slackbot
npm init

Leave all question as default press enter few times, so the result will be like this.

{
  "name": "slackbot",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Then type yes to complete this Node app wizard. Now, you will see a file package.json that contains required modules for creating Node application. Open and edit `package.json` then add dependencies for all modules that required for this tutorial by replacing all codes with this.

 {
  "name": "slackbot",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "npm test",
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bluebird": "^3.5.1",
    "mongoose": "^4.13.6",
    "slackbots": "^0.3.0"
  }
}

Next, install all modules and dependencies by type this command.

npm install

Now, create a new Javascript file on the root of the project folder.

touch index.js

Open and edit `index.js` then declare this required variables.


var SlackBot = require('slackbots'); // import slackbot library
var mongoose = require('mongoose');  // import mongoose library for accessing MongoDB

Declare the variable for handle HTTP request and response including server creation method.

var http = require('http');
http.createServer((req, res) => {}).listen(1337, '127.0.0.1');

Add the MongoDB connection using Mongoose.js and Bluebird module.

/* Create MongoDB Connection */
mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost/slackbot', { useMongoClient: true, promiseLibrary: require('bluebird') })
  .then(() =>  console.log('connection succesful'))
  .catch((err) => console.error(err));

Run your Node app by type this command.

npm start

You will see response below on the Terminal or Node.js command line if Node app is working.

> [email protected] start /Users/didin/Documents/NodeApps/node-slackbot
> node index.js

connection succesful

2. Create Mongoose.js Model

To create a model that represents MongoDB collection, create a folder with a new Javascript file on the root of the project directory.

mkdir models
touch models/Badword.js

Open and edit Badword.js file then add this lines of codes.

var mongoose = require('mongoose');

var BadwordSchema = new mongoose.Schema({   user_id: String,   keyword: String,   receive_date: { type: Date, default: Date.now }, });

module.exports = mongoose.model('Badword', BadwordSchema);

3. Create Helper for Retrieve and Send Slack Bot Messages

For accessing Slack Bot or Slack RTM, create a new folder and Javascript file.

mkdir helpers
touch helpers/bot.js

Open and edit helpers/bot.js then import and declare the required modules.

var SlackBot = require('slackbots');
var mongoose = require('mongoose');
var Badword = require('../models/Badword.js');

Next, instantiate Slackbots library with your own Slack Bot token.

var bot = new SlackBot({
    token: 'BOT_API_KEY',
    name: 'SlackBot'
});

Create initial methods for first run.

exports.run = () => {
  bot.on('start', onStart);
  bot.on('message', onMessage);
}

Create onStart function to start the Slack Bot on the Slack Team.

var onStart = () => {
  console.log('Bot started');
}

Create save function and count bad words function including sending the message back to Slack channel.

var saveWord = (channel,user, word) => {
  Badword.create({user_id:user.id,keyword:word}, (err, post) => {
    if (err) {
      console.log(err);
      return;
    } else {
      countWord(channel,user);
    }
  });
}

var countWord = (channel,user) => {   Badword.find({user_id:user.id}).exec((err, badwords) => {     if (err) {       console.log(err);       return;     } else {       if(badwords.length > 5) {         bot.postMessageToChannel(channel.name, 'It's enough '+user.name+' you will kicked from this channel!', {as_user: true});       } else {         bot.postMessageToChannel(channel.name, 'Becareful '+user.name+' you have say bad word '+badwords.length+' times.', {as_user: true});       }     }   }); }

Create function for retrieve message from Slack channel.

var onMessage = (message) => {
  users = [];
  channels = [];
  var botUsers = bot.getUsers();
  users = botUsers._value.members;
  var botChannels = bot.getChannels();
  channels = botChannels._value.channels;

  if(message.type === 'message' && Boolean(message.text)) {     var channel = channels.find(channel => channel.id === message.channel);     var usr = users.find(user => user.id === message.user);

    if(usr.name !== 'attitudebot') {       if(message.text.toLowerCase().indexOf('shit') || message.text.toLowerCase().indexOf('fuck') || message.text.toLowerCase().indexOf('bitch')) {         var keyword = '';         if(message.text.toLowerCase().indexOf('shit')) {           keyword = 'shit';         }         if(message.text.toLowerCase().indexOf('fuck')) {           keyword = 'fuck';         }         if(message.text.toLowerCase().indexOf('bitch')) {           keyword = 'bitch';         }         saveWord(channel,usr,keyword);       }     }   } }

4. Test and Run The Slack Bot App

Before test and run the Slack Bot app, make sure MongoDB service is running or you can type this on the other Terminal tab.

mongod

Now, run the Node.js app.

npm start

Open your Slack on the browser or desktop then invite Slack Bot to the Team. After that, you can test using the bad word to your channel as below example.

That's it, a simple example of Slack Bot using Node.js, Mongoose.js and Slackbots module. You can find the full source code on our GitHub.

Originally published by Didin J at  djamware.com

=============================

Thanks for reading

If you liked this post, share it with all of your programming buddies!

Follow me on Facebook | Twitter

Learn More

☞ NestJS Zero to Hero - Modern TypeScript Back-end Development

☞ The Complete Node.js Developer Course (3rd Edition)

☞ Complete Next.js with React & Node - Beautiful Portfolio App

☞ Angular & NodeJS - The MEAN Stack Guide

☞ NodeJS - The Complete Guide (incl. MVC, REST APIs, GraphQL)

☞ Docker for Node.js Projects From a Docker Captain

☞ Intro To MySQL With Node.js - Learn To Use MySQL with Node!

☞ Node.js Absolute Beginners Guide - Learn Node From Scratch


node-js mongodb web-development

What's new in Bootstrap 5 and when Bootstrap 5 release date?

How to Build Progressive Web Apps (PWA) using Angular 9

What is new features in Javascript ES2020 ECMAScript 2020

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

Random Password Generator Online

HTML Color Picker online | HEX Color Picker | RGB Color Picker

How to Hire Node.js Developers And How Much Does It Cost?

A Guide to Hire Node.js Developers who can help you create fast and efficient web applications. Also, know how much does it cost to hire Node.js Developers.

Top Node.js Development Companies and Expert NodeJS Developers

A thoroughly researched list of top NodeJS development companies with ratings & reviews to help hire the best Node.JS developers who provide development services and solutions across the world. List of Leading Node.js development Service Providers...

Hire Node JS Developer from Expert Node JS Development Company

NodeJS Development Company-Hire Node JS developer from the most prominent NodeJS development company, Mobiweb and get remarkable Node.js app development services.

Main Reasons of Using Node JS for Your Web Application Development

You have to hire Node JS developer from prestigious and expert Node JS development company Mobiweb Technologies. They are tech enthusiasts with new and latest programming ideas, web development technologies and industry trends.

Web Development | React, Node.js and MySQL Tutorial for Beginners

React Components will help you in understanding the fundamentals of components in ReactJS. Node.js MySQL Tutorial will help you in learning how to connect to a MySQL database from your Node.js application with practical demonstration.