slapp
Version:
A module for Slack App integrations
104 lines (83 loc) • 2.34 kB
JavaScript
const chalk = require('chalk')
module.exports = (opts) => {
opts = opts || {}
const withColors = opts.colors !== false
var formatters = {
event (msg) {
let event = msg.body.event || {}
let msgType = event.type + (event.subtype ? `.${event.subtype}` : '')
let text = event.text || event.reaction || ''
let channelId = event.channel || (event.item && event.item.channel)
let output = [
`${type(msg.type)}`,
`${team(msg.body.team_id)}`,
`${channel(channelId)}`,
event.bot_id ? `${bot(event.bot_id)}` : `${user(event.user)}`,
`${c(msgType, 'yellow')}`,
`${text}`
].join(' ')
if ((event.attachments || []).length > 0) {
output += `${event.attachments.length} attachments`
}
return output
},
action (msg) {
let actions = (msg.body.actions || []).map(action => {
return `${action.name}=${action.value}`
})
let teamId = msg.body.team && msg.body.team.id || 'UNKNOWN'
let channelId = msg.body.channel && msg.body.channel.id || 'UNKNOWN'
let userId = msg.body.user && msg.body.user.id || 'UNKNOWN'
return [
`${type(msg.type)}`,
`${team(teamId)}`,
`${channel(channelId)}`,
`${user(userId)}`,
`${actions.join(',')}`
].join(' ')
},
command (msg) {
return [
`${type(msg.type)}`,
`${team(msg.body.team_id)}`,
`${channel(msg.body.channel_id)}`,
`${user(msg.body.user_id)}`,
`${msg.body.command}`,
`${msg.body.text}`
].join(' ')
}
}
function c (val, color) {
return withColors ? chalk[color](val) : val
}
function type (val) {
val = {
'action': 'act',
'event': 'evt',
'command': 'cmd'
}[val] || val
return c(`[${val}]`, 'gray')
}
function team (val) {
return c(`tm=${val}`, 'red')
}
function channel (val) {
return c(`ch=${val}`, 'magenta')
}
function user (val) {
return c(`usr=${val}`, 'cyan')
}
function bot (val) {
return c(`bot=${val}`, 'cyan')
}
return function formatMessage (msg) {
if (!msg) {
return null
}
if (!formatters[msg.type]) {
return `Unknown type: ${type(msg.type)}`
}
return formatters[msg.type](msg)
}
}