lgaticaq/hubot-cementerio

View on GitHub
src/script.js

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
// Description
//   Un hubot-script para contabilizar los días sin nuevos despidos
//
// Dependencies:
//   "moment": "^2.15.1",
//   "pug": "^2.0.0-beta6"
//
// Configuration:
//   HUBOT_URL
//
// Commands:
//   hubot cementerio dias - Ver la cantidad de días sin caídos
//   hubot cementerio (qepd|q.e.p.d.|rip|r.i.p.) nombre del difunto - Agregar un nuevo caído
//   hubot cementerio (caidos|sacrificados|martires) - Ver enlace con listado de caídos
//
// Author:
//   lgaticaq
'use strict'

const express = require('express')
const path = require('path')
const moment = require('moment')

module.exports = robot => {
  moment.locale('es')

  robot.respond(/cementerio d[ií]as/, res => {
    const cementerio = robot.brain.get('cementerio') || []
    if (cementerio.length === 0) {
      return res.send('Desde el inicio de los tiempos no hay perdidas')
    }
    const data = cementerio[cementerio.length - 1]
    const last = moment(data.date)
    const today = moment()
    const duration = moment.duration(today.diff(last)).humanize()
    res.send(`Van ${duration} sin nuevas perdidas`)
  })

  robot.respond(/cementerio (q\.*e\.*p\.*d\.*|r\.*i\.*p\.*) (.*)/i, res => {
    const name = res.match[2]
    const cementerio = robot.brain.get('cementerio') || []
    cementerio.push({ name, date: new Date().toISOString() })
    robot.brain.set('cementerio', cementerio)
    res.send(`Q.E.P.D ${name}`)
  })

  robot.respond(/cementerio (ca[ií]dos|sacrificados|m[aá]rtires)/i, res => {
    const url = process.env.HUBOT_URL || `http://${robot.name}.herokuapp.com`
    const name = res.match[1]
    res.send(`Los ${name} estan inmortalizados en ${url}/cementerio`)
  })

  robot.router.use(express.static(path.join(__dirname, '..', 'public')))
  robot.router.set('views', path.join(__dirname, '..', 'views'))
  robot.router.set('view engine', 'pug')

  robot.router.get('/cementerio', (req, res) => {
    const cementerio = robot.brain.get('cementerio') || []
    const format = 'YYYY-MM-DD HH:mm:ss'
    const data = cementerio.map(
      x => `Q.E.P.D. ${x.name} (${moment(x.date).format(format)})`
    )
    res.render('index', { data })
  })
}