slack-command-server/app.js
2014-08-09 01:21:11 -05:00

65 lines
1.7 KiB
JavaScript

var connect = require('connect'),
SlackIncoming = require('slack-command-router'),
path = require('path'),
fs = require('fs');
var config = JSON.parse(fs.readFileSync("config.json")),
slack = new SlackIncoming();
var pluginsToInstall = config.plugins || [],
pluginsToLoad = config["local-plugins"] || [];
function installPlugins(callback) {
if (pluginsToInstall.length === 0) {
callback([]);
return;
}
var npm = require('npm');
npm.load({}, function (err) {
if (err) throw err;
npm.commands["install"](pluginsToInstall, function (err) {
if (err) throw err;
var loadedPlugins = [];
for (var i = 0; i < pluginsToInstall.length; i++) {
loadedPlugins.push(path.resolve(__dirname, require(pluginsToInstall[i])));
}
callback(loadedPlugins);
});
});
}
function loadPlugins(callback) {
var loadedPlugins = [];
for (var i = 0; i < pluginsToLoad.length; i++) {
pluginsToLoad.push(require(pluginsToLoad[i]));
}
callback(loadedPlugins);
}
function initPlugins(plugins, callback) {
for (var i = 0; i < plugins.length; i++) {
slack.registerHandler(plugins[i]);
}
callback();
}
function initCallback(callback) {
return function (loadedPlugins) {
initPlugins(loadedPlugins, callback);
}
}
function startApp() {
var app = connect();
app.use(slack.getMiddleware());
app.use(function (req, res) {
res.writeHead(400);
res.end("Unable to handle request");
});
app.listen(2354);
}
installPlugins(initCallback(function() {
loadPlugins(initCallback(startApp));
}));