lgaticaq/hubot-cne

View on GitHub
src/script.js

Summary

Maintainability
B
4 hrs
Test Coverage
// Description:
//   Obtiene la estación de servicio con el precio mas barato de un combustible
//
// Dependencies:
//   "cne": "^1.0.1"
//
// Commands:
//   hubot cne obtener <combustible> - Obtiene la estación de servicio con el precio mas barato
//   hubot cne obtener <combustible> en <comuna> - Obtiene la estación de servicio con el precio mas barato en una determinada comuna
//   hubot cne listar combustibles - Obtiene el listado de combustibles disponibles
//   hubot cne listar comunas - Obtiene el listado de comunas disponibles
//
// Author:
//   lgaticaq

const cne = require('cne')

module.exports = robot => {
  const getFuelTypes = res =>
    res.send(`\`\`\`${cne.fuelTypes.join(', ')}\`\`\``)

  const getCommunes = res => res.send(`\`\`\`${cne.communes.join(', ')}\`\`\``)

  robot.respond(/cne listar combustibles/i, getFuelTypes)
  robot.respond(/cne listar comunas/i, getCommunes)

  robot.respond(/cne obtener (\w+)( en ([\w\sñáéíóúñÁÉÍÓÚÑ]+))?/i, res => {
    const fuelType = res.match[1].trim()
    const commune = res.match[3] ? res.match[3].trim() : ''
    const communes = Array.from(cne.communes).map(x => x.toLowerCase())

    if (!cne.fuelTypes.includes(fuelType)) {
      res.send(`El combustible *${fuelType}* no esta disponible`)
      res.send('Estos son los combustibles disponibles:')
      return res.send(`\`\`\`${cne.fuelTypes.join(', ')}\`\`\``)
    } else if (!communes.includes(commune.toLowerCase()) && commune !== '') {
      res.send(`La comuna *${commune}* no esta disponible`)
      res.send('Estos son las comunas disponibles:')
      return res.send(`\`\`\`${cne.communes.join(', ')}\`\`\``)
    } else {
      const options = { fuelType }
      if (commune !== '') options.commune = commune
      return cne
        .get(options)
        .then(data => {
          const price = data.precio_por_combustible[fuelType]
          const street = data.direccion_calle
          const number = data.direccion_numero
          const dist = data.nombre_distribuidor
          const addr = `${street} ${number} ${data.nombre_comuna}`
          res.send(`En ${dist} de ${addr} la venden a $${price} CLP el litro`)
        })
        .catch(err => {
          res.reply('ocurrio un error al consultar el combustible')
          robot.emit('error', err)
        })
    }
  })
}