Files
seasonedBill/server.js

83 lines
1.9 KiB
JavaScript

var express = require('express')
var bodyParser = require('body-parser')
const axios = require('axios')
var PORT = process.env.PORT || 3000;
var BOT_TOKEN = process.env.SLACK_BOT_TOKEN || undefined;
if (!BOT_TOKEN) {
throw new Error("please set the SLACK_BOT_TOKEN environmental variable");
}
var router = express.Router()
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now())
console.log('payload type', req.body.type)
next()
})
router.use((req, res, next) => {
res.setHeader('Content-Type', 'application/json');
next()
})
function postMessage(msg, channel) {
const data = {
"text": msg,
"channel": channel
}
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${BOT_TOKEN}`
}
axios.post('https://slack.com/api/chat.postMessage', data, {headers: headers})
.then((resp) => console.log(resp.data))
.catch((error) => console.error(error.data))
}
router.post('/slack/list', (req, res, next) => {
axios.get('https://api.kevinmidboe.com/api/v1/seasoned/all')
.then((resp) => {
const shortlist = resp.data.slice(-3)
console.log('shortList', shortlist)
res.json(shortlist);
})
})
router.post('/slack/event', (req, res, next) => {
const payload = req.body;
const type = payload.type;
if (type === 'url_verification') {
res.json({ challenge: payload.challenge })
}
else if (payload.event.type === 'app_mention') {
if (payload.event.text.includes("joke")) {
console.log('someone is hungry for a joke');
axios.get('http://api.icndb.com/jokes/random')
.then((resp) => {
const msg = `Hello <@${payload.event.user}>! ${resp.data.value.joke}`
postMessage(msg, payload.event.channel)
})
}
}
res.json({ challenge: payload.challenge })
})
var app = express()
app.use(bodyParser.json())
app.use(router)
app.listen(PORT, () => {
console.log('Listening on port:', PORT);
})