initial commit
This commit is contained in:
commit
56b99d2758
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
node_modules
|
||||
config.json
|
||||
.idea
|
28
README.md
Normal file
28
README.md
Normal file
|
@ -0,0 +1,28 @@
|
|||
slack-command-server
|
||||
====================
|
||||
Slack command server is a simple way to build a server that responds to slack slash commands.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
Configuring the server is simple, you can use any plugin compatible with [slack-command-router](https://github.com/terribly-lazy/slack-command-router), custom or otherwise.
|
||||
|
||||
To use pre-written plugins write your configuration thusly:
|
||||
```json
|
||||
{
|
||||
"plugins": [
|
||||
"slack-roll-command"
|
||||
]
|
||||
}
|
||||
```
|
||||
Or if you have plugins of your own, you can do this:
|
||||
```json
|
||||
{
|
||||
"local-plugins": [
|
||||
"directory/to/plugin.js"
|
||||
]
|
||||
}
|
||||
```
|
||||
Notes
|
||||
=====
|
||||
Any `plugins` specified in your configuration will be installed through npm upon starting your server, and any
|
||||
`local-plugins` will will be loaded relative to the directory in which `app.js` resides.
|
64
app.js
Normal file
64
app.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
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));
|
||||
}));
|
6
config.json.example
Normal file
6
config.json.example
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"plugins": [
|
||||
"slack-roll-command"
|
||||
],
|
||||
"local-plugins": []
|
||||
}
|
31
package.json
Normal file
31
package.json
Normal file
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"name": "slack-command-server",
|
||||
"version": "0.0.0",
|
||||
"description": "A slack slash command hander framework",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/terribly-lazy/slack-command-server.git"
|
||||
},
|
||||
"keywords": [
|
||||
"slack",
|
||||
"slash",
|
||||
"command",
|
||||
"webhooks"
|
||||
],
|
||||
"author": "Kegan Myers <kegan@keganmyers.com>",
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"connect": "~3.1.0",
|
||||
"npm": "^1.4.23",
|
||||
"require-directory": "~2.0.0",
|
||||
"slack-command-router": "0.0.0"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/terribly-lazy/slack-command-server/issues"
|
||||
},
|
||||
"homepage": "https://github.com/terribly-lazy/slack-command-server"
|
||||
}
|
Loading…
Reference in a new issue