Instantly share code, notes, and snippets.
Created
April 22, 2016 19:03
-
Star
(1)
1
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save devStepsize/18688bb1aa1d72bc52870fcee4a92f1d to your computer and use it in GitHub Desktop.
An example of Botkit using the Slack Button to offer a bot integration (from https://github.com/howdyai/botkit/blob/master/examples/slackbutton_bot.js)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
______ ______ ______ __ __ __ ______ | |
/\ == \ /\ __ \ /\__ _\ /\ \/ / /\ \ /\__ _\ | |
\ \ __< \ \ \/\ \ \/_/\ \/ \ \ _"-. \ \ \ \/_/\ \/ | |
\ \_____\ \ \_____\ \ \_\ \ \_\ \_\ \ \_\ \ \_\ | |
\/_____/ \/_____/ \/_/ \/_/\/_/ \/_/ \/_/ | |
This is a sample Slack Button application that adds a bot to one or many slack teams. | |
# RUN THE APP: | |
Create a Slack app. Make sure to configure the bot user! | |
-> https://api.slack.com/applications/new | |
-> Add the Redirect URI: http://localhost:3000/oauth | |
Run your bot from the command line: | |
clientId=<my client id> clientSecret=<my client secret> port=3000 node slackbutton_bot.js | |
# USE THE APP | |
Add the app to your Slack by visiting the login page: | |
-> http://localhost:3000/login | |
After you've added the app, try talking to your bot! | |
# EXTEND THE APP: | |
Botkit has many features for building cool and useful bots! | |
Read all about it here: | |
-> http://howdy.ai/botkit | |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ | |
/* Uses the slack button feature to offer a real time bot to multiple teams */ | |
var Botkit = require('../lib/Botkit.js'); | |
if (!process.env.clientId || !process.env.clientSecret || !process.env.port) { | |
console.log('Error: Specify clientId clientSecret and port in environment'); | |
process.exit(1); | |
} | |
var controller = Botkit.slackbot({ | |
json_file_store: './db_slackbutton_bot/', | |
}).configureSlackApp( | |
{ | |
clientId: process.env.clientId, | |
clientSecret: process.env.clientSecret, | |
scopes: ['bot'], | |
} | |
); | |
controller.setupWebserver(process.env.port,function(err,webserver) { | |
controller.createWebhookEndpoints(controller.webserver); | |
controller.createOauthEndpoints(controller.webserver,function(err,req,res) { | |
if (err) { | |
res.status(500).send('ERROR: ' + err); | |
} else { | |
res.send('Success!'); | |
} | |
}); | |
}); | |
// just a simple way to make sure we don't | |
// connect to the RTM twice for the same team | |
var _bots = {}; | |
function trackBot(bot) { | |
_bots[bot.config.token] = bot; | |
} | |
controller.on('create_bot',function(bot,config) { | |
if (_bots[bot.config.token]) { | |
// already online! do nothing. | |
} else { | |
bot.startRTM(function(err) { | |
if (!err) { | |
trackBot(bot); | |
} | |
bot.startPrivateConversation({user: config.createdBy},function(err,convo) { | |
if (err) { | |
console.log(err); | |
} else { | |
convo.say('I am a bot that has just joined your team'); | |
convo.say('You must now /invite me to a channel so that I can be of use!'); | |
} | |
}); | |
}); | |
} | |
}); | |
// Handle events related to the websocket connection to Slack | |
controller.on('rtm_open',function(bot) { | |
console.log('** The RTM api just connected!'); | |
}); | |
controller.on('rtm_close',function(bot) { | |
console.log('** The RTM api just closed'); | |
// you may want to attempt to re-open | |
}); | |
controller.hears('hello','direct_message',function(bot,message) { | |
bot.reply(message,'Hello!'); | |
}); | |
controller.hears('^stop','direct_message',function(bot,message) { | |
bot.reply(message,'Goodbye'); | |
bot.rtm.close(); | |
}); | |
controller.on(['direct_message','mention','direct_mention'],function(bot,message) { | |
bot.api.reactions.add({ | |
timestamp: message.ts, | |
channel: message.channel, | |
name: 'robot_face', | |
},function(err) { | |
if (err) { console.log(err) } | |
bot.reply(message,'I heard you loud and clear boss.'); | |
}); | |
}); | |
controller.storage.teams.all(function(err,teams) { | |
if (err) { | |
throw new Error(err); | |
} | |
// connect all teams with bots up to slack! | |
for (var t in teams) { | |
if (teams[t].bot) { | |
controller.spawn(teams[t]).startRTM(function(err, bot) { | |
if (err) { | |
console.log('Error connecting bot to Slack:',err); | |
} else { | |
trackBot(bot); | |
} | |
}); | |
} | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment