Hubot is an scriptable chat bot framework created by GitHub. The newer version supports JavaScript (ES6+), no more CoffeeScript!
ref:
https://hubot.github.com/
https://slack.dev/hubot-slack/
Installation
$ npm install -g yo generator-hubot
$ mkdir codetengu-bot
$ cd codetengu-bot
$ yo hubot --adapter=slack
You could find all available adapters here:
https://hubot.github.com/docs/adapters/
Slack Token
The next thing you need is a Slack Bot Token (API Token) which looks like xoxb-xxx
for your chat bot app. You could create a Hubot app in your Slack workspace to request a token, for instance https://vintachen.slack.com/apps/A0F7XDU93-hubot.
Otherwise, you could also create an universal Slack app, install it to your workspace. In your app settings, under "Install App" section, you are able to find OAuth Tokens
for your chat bot. See https://api.slack.com/apps.
ref:
https://api.slack.com/bot-users
Development
$ HUBOT_SLACK_TOKEN=YOUR_SLACK_BOT_TOKEN \
./bin/hubot --adapter slack
I fork a script named hubot-reload-scripts
to help you reload your scripts when developing them.
https://github.com/vinta/hubot-reload-scripts
Hear And Respond Messages
Writing your own script
https://hubot.github.com/docs/scripting/
// scripts/your_script.js
// Description
// Do your shit
//
// Author:
// Vinta Chen
//
// Commands:
// * `restart <service>`* - Restart the service
//
const _ = require('lodash');
module.exports = (robot) => {
robot.hear(/restart ([a-z0-9_\-]+)/i, (res) => {
robot.logger.debug(`Received message: ${res.message.rawText}`);
const [ serviceName ] = res.match.slice(1);
res.send(`Restarting ${serviceName}`);
doYourShit();
});
};
Call Slack APIs
robot.slack.channels.info({'channel': res.message.rawMessage.channel})
.then(apiRes => {
const purpose = apiRes.channel.purpose.value;
const topic = apiRes.channel.topic.value;
res.send(`purpose: ${purpose}`);
res.send(`topic: ${topic`);
})
.catch(apiErr => {
robot.logger.error('apiErr', apiErr);
});
ref:
https://slack.dev/hubot-slack/basic_usage#using-the-slack-web-api
https://api.slack.com/methods