From 6541c477b0c6a3a57cd325e7aa80f14d38bcbb9d Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 11:56:44 -0400 Subject: [PATCH 01/14] added Procfile --- Procfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Procfile diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..ba175a3 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: PORT=$PORT TOKEN=$TOKEN SLACK=$SLACK node index.js \ No newline at end of file From b6dbb3c9f4c60b066110450fa004ffab12fda89c Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:05:11 -0400 Subject: [PATCH 02/14] making use of env vars --- index.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index afe736c..f58af35 100644 --- a/index.js +++ b/index.js @@ -5,8 +5,6 @@ var https = require('https'); var url = require('url'); var minimist = require('minimist'); var argv; -var port = 3000; -var host = '127.0.0.1'; var slackToken; var groupRestrict; var slackHost; @@ -78,21 +76,20 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ res.end('nope'); } }); - server.listen(port, ip); - console.log('listening on', ip+':'+port) + server.listen(port); + // console.log('listening on', ip+':'+port) } if(!module.parent){ argv = minimist(process.argv.slice(2)); - host = argv.host || host; - port = argv.port || port; + port = process.env.PORT || port; groupRestrict = argv.group || groupRestrict; - slackHost = argv.slack || slackHost; - slackToken = argv.token || slackToken; + slackHost = process.env.SLACK || slackHost; + slackToken = process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); } - startRollServer(port, host, slackToken, slackHost, groupRestrict); + startRollServer(port, slackToken, slackHost, groupRestrict); } From 574163f39c8b1b2fd3b8cfbec9603b703f7e8e66 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:06:36 -0400 Subject: [PATCH 03/14] making use of env vars --- index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index f58af35..d3a968f 100644 --- a/index.js +++ b/index.js @@ -82,8 +82,8 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ if(!module.parent){ argv = minimist(process.argv.slice(2)); - port = process.env.PORT || port; - groupRestrict = argv.group || groupRestrict; + port = process.env.PORT; + groupRestrict = process.env.GROUP || groupRestrict; slackHost = process.env.SLACK || slackHost; slackToken = process.env.TOKEN || slackToken; From e0e827ef8ce9129bce69e4c77a3a700455a705c4 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:07:15 -0400 Subject: [PATCH 04/14] making use of env vars --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index d3a968f..ad0e64d 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ var https = require('https'); var url = require('url'); var minimist = require('minimist'); var argv; +var port; var slackToken; var groupRestrict; var slackHost; From 6e10178198ec200eac10955f5d9808265d1a6ac4 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:13:08 -0400 Subject: [PATCH 05/14] catch ECONNREFUSED error so that the app doesn't crash --- index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.js b/index.js index ad0e64d..7b53bf4 100644 --- a/index.js +++ b/index.js @@ -68,6 +68,10 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ }); }); + post.on('error', function(e) { + console.log('problem with request: ' + e.message); + }); + post.write(output); post.end(); From f038ac358f8091d854102a201d36db1cbf91c6cb Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:22:48 -0400 Subject: [PATCH 06/14] re-adding cmd line switches for local development --- index.js | 10 +++++----- package.json | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 7b53bf4..c1d012a 100644 --- a/index.js +++ b/index.js @@ -82,15 +82,15 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ } }); server.listen(port); - // console.log('listening on', ip+':'+port) + console.log('listening on port '+port) } if(!module.parent){ argv = minimist(process.argv.slice(2)); - port = process.env.PORT; - groupRestrict = process.env.GROUP || groupRestrict; - slackHost = process.env.SLACK || slackHost; - slackToken = process.env.TOKEN || slackToken; + port = argv.port || process.env.PORT; + groupRestrict = argv.group || process.env.GROUP || groupRestrict; + slackHost = argv.slack || process.env.SLACK || slackHost; + slackToken = argv.token || process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); diff --git a/package.json b/package.json index 7fe1430..0f39208 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "homepage": "https://github.com/toddself/slack-dnd", "dependencies": { "minimist": "^0.1.0", - "tap": "^0.4.11" + "tap": "^0.4.11", + "node-slack": "^0.0.5" } } From eb2d7f6bdda5ab49e25e8d50eaf3165592900a68 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:38:01 -0400 Subject: [PATCH 07/14] troubleshooting & trying the node-slack module --- Procfile | 2 +- index.js | 58 ++++++++++++++++++++++++++++++++++---------------------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/Procfile b/Procfile index ba175a3..0307406 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: PORT=$PORT TOKEN=$TOKEN SLACK=$SLACK node index.js \ No newline at end of file +web: PORT=$PORT TOKEN=$TOKEN SLACK=$SLACK DOMAIN=$DOMAIN node index.js \ No newline at end of file diff --git a/index.js b/index.js index c1d012a..0cc8ef7 100644 --- a/index.js +++ b/index.js @@ -4,17 +4,19 @@ var http = require('http'); var https = require('https'); var url = require('url'); var minimist = require('minimist'); +var Slack = require('node-slack'); var argv; var port; var slackToken; var groupRestrict; var slackHost; +var slackDomain; function rollDie(max){ return Math.floor(Math.random() * (max - 1 + 1)) + 1; } -function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ +function startRollServer(port, ip, slackToken, slackHost, slackDomain, groupRestrict){ var server = http.createServer(function(req, res){ var parsed = url.parse(req.url, true); @@ -51,31 +53,40 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ channel: echoChannel }); - console.log('sending to webhook', output); + // console.log('sending to webhook', output); - var post = https.request({ - host: slackHost, - path: '/services/hooks/incoming-webhook?token='+slackToken, - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Content-Length': output.length - } - }, function(res){ - res.setEncoding('utf8'); - res.on('data', function(chunk){ - console.log('response', chunk); - }); - }); + var slack = new Slack(slackDomain,slackToken); - post.on('error', function(e) { - console.log('problem with request: ' + e.message); + slack.send({ + text: 'bot started', + channel: '#dnd', + username: 'dungeonmaster', + icon_emoji: ':dm:', }); - post.write(output); - post.end(); - - res.end(''); + // var post = https.request({ + // host: slackHost, + // path: '/services/hooks/incoming-webhook?token='+slackToken, + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json', + // 'Content-Length': output.length + // } + // }, function(res){ + // res.setEncoding('utf8'); + // res.on('data', function(chunk){ + // console.log('response', chunk); + // }); + // }); + + // post.on('error', function(e) { + // console.log('problem with request: ' + e.message); + // }); + + // post.write(output); + // post.end(); + + // res.end(''); } else { res.end('nope'); @@ -90,11 +101,12 @@ if(!module.parent){ port = argv.port || process.env.PORT; groupRestrict = argv.group || process.env.GROUP || groupRestrict; slackHost = argv.slack || process.env.SLACK || slackHost; + slackDomain = argv.domain || process.env.DOMAIN || slackDomain; slackToken = argv.token || process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); } - startRollServer(port, slackToken, slackHost, groupRestrict); + startRollServer(port, slackToken, slackHost, slackDomain, groupRestrict); } From 527e490426ff88a8d6f258899d7b1a4999101e89 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:56:04 -0400 Subject: [PATCH 08/14] removed node-slack module; not needed. looks like things are working --- Procfile | 2 +- index.js | 59 +++++++++++++++++++++------------------------------- package.json | 3 +-- 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/Procfile b/Procfile index 0307406..ba175a3 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: PORT=$PORT TOKEN=$TOKEN SLACK=$SLACK DOMAIN=$DOMAIN node index.js \ No newline at end of file +web: PORT=$PORT TOKEN=$TOKEN SLACK=$SLACK node index.js \ No newline at end of file diff --git a/index.js b/index.js index 0cc8ef7..f9a2d21 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,6 @@ var http = require('http'); var https = require('https'); var url = require('url'); var minimist = require('minimist'); -var Slack = require('node-slack'); var argv; var port; var slackToken; @@ -16,7 +15,7 @@ function rollDie(max){ return Math.floor(Math.random() * (max - 1 + 1)) + 1; } -function startRollServer(port, ip, slackToken, slackHost, slackDomain, groupRestrict){ +function startRollServer(port, slackToken, slackHost, groupRestrict){ var server = http.createServer(function(req, res){ var parsed = url.parse(req.url, true); @@ -53,40 +52,31 @@ function startRollServer(port, ip, slackToken, slackHost, slackDomain, groupRest channel: echoChannel }); - // console.log('sending to webhook', output); - - var slack = new Slack(slackDomain,slackToken); + console.log('sending to webhook', output); - slack.send({ - text: 'bot started', - channel: '#dnd', - username: 'dungeonmaster', - icon_emoji: ':dm:', + var post = https.request({ + host: slackHost, + path: '/services/hooks/incoming-webhook?token='+slackToken, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': output.length + } + }, function(res){ + res.setEncoding('utf8'); + res.on('data', function(chunk){ + console.log('response', chunk); + }); }); - // var post = https.request({ - // host: slackHost, - // path: '/services/hooks/incoming-webhook?token='+slackToken, - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json', - // 'Content-Length': output.length - // } - // }, function(res){ - // res.setEncoding('utf8'); - // res.on('data', function(chunk){ - // console.log('response', chunk); - // }); - // }); - - // post.on('error', function(e) { - // console.log('problem with request: ' + e.message); - // }); - - // post.write(output); - // post.end(); - - // res.end(''); + post.on('error', function(e) { + console.log('problem with request: ' + e.message); + }); + + post.write(output); + post.end(); + + res.end(''); } else { res.end('nope'); @@ -101,12 +91,11 @@ if(!module.parent){ port = argv.port || process.env.PORT; groupRestrict = argv.group || process.env.GROUP || groupRestrict; slackHost = argv.slack || process.env.SLACK || slackHost; - slackDomain = argv.domain || process.env.DOMAIN || slackDomain; slackToken = argv.token || process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); } - startRollServer(port, slackToken, slackHost, slackDomain, groupRestrict); + startRollServer(port, slackToken, slackHost, groupRestrict); } diff --git a/package.json b/package.json index 0f39208..7fe1430 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "homepage": "https://github.com/toddself/slack-dnd", "dependencies": { "minimist": "^0.1.0", - "tap": "^0.4.11", - "node-slack": "^0.0.5" + "tap": "^0.4.11" } } From c6a16f414e653b6f7bfc357302dbfdd5b3ca14ea Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:05:11 -0400 Subject: [PATCH 09/14] making use of env vars --- index.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/index.js b/index.js index afe736c..ad0e64d 100644 --- a/index.js +++ b/index.js @@ -5,8 +5,7 @@ var https = require('https'); var url = require('url'); var minimist = require('minimist'); var argv; -var port = 3000; -var host = '127.0.0.1'; +var port; var slackToken; var groupRestrict; var slackHost; @@ -78,21 +77,20 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ res.end('nope'); } }); - server.listen(port, ip); - console.log('listening on', ip+':'+port) + server.listen(port); + // console.log('listening on', ip+':'+port) } if(!module.parent){ argv = minimist(process.argv.slice(2)); - host = argv.host || host; - port = argv.port || port; - groupRestrict = argv.group || groupRestrict; - slackHost = argv.slack || slackHost; - slackToken = argv.token || slackToken; + port = process.env.PORT; + groupRestrict = process.env.GROUP || groupRestrict; + slackHost = process.env.SLACK || slackHost; + slackToken = process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); } - startRollServer(port, host, slackToken, slackHost, groupRestrict); + startRollServer(port, slackToken, slackHost, groupRestrict); } From d0f19ecbf66f9755a0a36848a26556b57c759355 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:13:08 -0400 Subject: [PATCH 10/14] catch ECONNREFUSED error so that the app doesn't crash --- index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.js b/index.js index ad0e64d..7b53bf4 100644 --- a/index.js +++ b/index.js @@ -68,6 +68,10 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ }); }); + post.on('error', function(e) { + console.log('problem with request: ' + e.message); + }); + post.write(output); post.end(); From d5cab4b784641b66e9e13733cbd703ab87f6d699 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:22:48 -0400 Subject: [PATCH 11/14] re-adding cmd line switches for local development --- index.js | 10 +++++----- package.json | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 7b53bf4..c1d012a 100644 --- a/index.js +++ b/index.js @@ -82,15 +82,15 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ } }); server.listen(port); - // console.log('listening on', ip+':'+port) + console.log('listening on port '+port) } if(!module.parent){ argv = minimist(process.argv.slice(2)); - port = process.env.PORT; - groupRestrict = process.env.GROUP || groupRestrict; - slackHost = process.env.SLACK || slackHost; - slackToken = process.env.TOKEN || slackToken; + port = argv.port || process.env.PORT; + groupRestrict = argv.group || process.env.GROUP || groupRestrict; + slackHost = argv.slack || process.env.SLACK || slackHost; + slackToken = argv.token || process.env.TOKEN || slackToken; if(typeof slackToken === 'undefined' || typeof slackHost === 'undefined'){ console.log('You need a slack token and a slack hostname to continue'); diff --git a/package.json b/package.json index 7fe1430..0f39208 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "homepage": "https://github.com/toddself/slack-dnd", "dependencies": { "minimist": "^0.1.0", - "tap": "^0.4.11" + "tap": "^0.4.11", + "node-slack": "^0.0.5" } } From 8bb85dea72c636da7a1af8b273cd35783274b99e Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 12:38:01 -0400 Subject: [PATCH 12/14] looks like things are working --- index.js | 5 +++-- package.json | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index c1d012a..f9a2d21 100644 --- a/index.js +++ b/index.js @@ -9,12 +9,13 @@ var port; var slackToken; var groupRestrict; var slackHost; +var slackDomain; function rollDie(max){ return Math.floor(Math.random() * (max - 1 + 1)) + 1; } -function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ +function startRollServer(port, slackToken, slackHost, groupRestrict){ var server = http.createServer(function(req, res){ var parsed = url.parse(req.url, true); @@ -52,7 +53,7 @@ function startRollServer(port, ip, slackToken, slackHost, groupRestrict){ }); console.log('sending to webhook', output); - + var post = https.request({ host: slackHost, path: '/services/hooks/incoming-webhook?token='+slackToken, diff --git a/package.json b/package.json index 0f39208..7fe1430 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "homepage": "https://github.com/toddself/slack-dnd", "dependencies": { "minimist": "^0.1.0", - "tap": "^0.4.11", - "node-slack": "^0.0.5" + "tap": "^0.4.11" } } From 276d4a74abf20bcca1ab189955b8a93b9307f0b8 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 14:26:40 -0400 Subject: [PATCH 13/14] updated readme with Heroku instructions --- readme.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/readme.md b/readme.md index dc12ad3..b20860d 100644 --- a/readme.md +++ b/readme.md @@ -34,3 +34,10 @@ Or if you like pictures: ![webhook](/assets/slack-webhook.png) +## Running on Heroku + +1. Add environment variables to your app: + * `SLACK` = \, e.g. `mycompany.slack.com` + * `TOKEN` = ` +1. Push to Heroku +1. Use the Heroku app URL for your `/roll` slash-command in Slack. \ No newline at end of file From c4f07f35a83950e74f73936e4dce574537446257 Mon Sep 17 00:00:00 2001 From: Eugene Brodsky Date: Tue, 7 Oct 2014 14:29:34 -0400 Subject: [PATCH 14/14] cleaned up leftover var from testing --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index f9a2d21..975bf16 100644 --- a/index.js +++ b/index.js @@ -9,7 +9,6 @@ var port; var slackToken; var groupRestrict; var slackHost; -var slackDomain; function rollDie(max){ return Math.floor(Math.random() * (max - 1 + 1)) + 1;