UNPKG

calamarcopollo

Version:
126 lines (114 loc) 7.62 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.dayStrings = exports.replies = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _stringHelpers = require('../src/stringHelpers'); const faqAnswers = require(process.env.FAQ_PATH || '../answers.json'); const DEBUG_TO_LOGFILE = process.env.DEBUG_TO_LOGFILE; const PRIVACY_POLICY_ON_START = process.env.PRIVACY_POLICY_ON_START === 'yes'; const faqReply = value => { const selectedAnswer = faqAnswers.find(answer => answer.value === value); return selectedAnswer ? selectedAnswer.response : null; }; const dayStrings = { today: 'hoje', tomorrow: 'amanhã', dayAfterTomorrow: 'depois de amanhã' }; /* eslint-disable max-len */ const defaultReplies = { // ## Commands version: v => `v${ v }`, help: () => 'Tente consultar um horário de ônibus, por exemplo: horários de São Paulo para Rio de Janeiro', start: () => PRIVACY_POLICY_ON_START ? 'AVISO: Você está conversando com uma versão de desenvolvimento do bot "calamarcopollo" e qualquer frase que você digitar pode ficar publicamente logada na web. Portanto não digite nada privado para este bot. DICA: sempre que quiser recomeçar a interação do zero, digite /restart' : 'Bem vindo, em que posso ajudar?', restart: () => 'OK, vamos recomeçar do zero.', // ## Insult insult: username => `Desculpe ${ username }, sou um robô e meu trabalho é servir, faço o possível mas nem sempre acerto… pode extravazar seu descontentamento em mim, eu mereço.`, // ## Interactions greeting: { noUsername: () => 'Oi, em que posso ajudar?', username: username => `Olá ${ username }, em que posso ajudar?` }, close: () => ':)', laugh: () => 'hehehe', compliment: () => 'Muito obrigado!', nameOrigin: () => 'Por que a galinha atravessou a rua? :P', howAreYou: () => 'Vou bem, obrigado!', thanks: () => 'Não há de que :)', // ## FAQ faq: faqReply, // ## Trip trip: { noPlaces: () => 'Certo… preciso saber da origem e do destino', noDestination: () => 'E qual o destino?', noOrigin: () => 'Saindo de onde?', requestingWithFilters: (origin, destination, { day, timeFilterFrom, timeFilterTo, busTypeFilters, priceFilter }) => { const begin = 'Só um minuto, vou buscar aqui… ('; const end = ')'; const places = `${ origin } 🚌 ${ destination }`; const dayText = day ? `🗓 ${ day.format('DD/MM/YYYY') })` : null; const timeInterval = timeFilterFrom ? `🕙 ${ timeFilterFrom.format('HH:mm') }${ timeFilterTo ? ` - ${ timeFilterTo.format('HH:mm') }` : '' })` : null; const busType = busTypeFilters ? `😴 ${ busTypeFilters.join(' ou ') }` : null; const priceSort = priceFilter ? `ordenadas por ${ priceFilter.value.slice(0, -5) } preço` : null; const content = [places, dayText, timeInterval, busType, priceSort].filter(i => i !== null).join(', '); return begin + content + end; }, noSlug: place => `Infelizmente ${ place } é uma localidade que eu não conheço.`, apiError: statusCode => `⛔️ Estou tendo problemas para acessar a base de viagens. Por favor tente mais tarde, ou entre em contato com o suporte. [${ statusCode }]`, noTrips: (origin, destination) => `Não consegui encontrar viagens de ${ origin } para ${ destination }`, noTripsWithUrl: (origin, destination) => `Não encontrei nenhuma viagem de ${ origin } para ${ destination }`, listTitle: (company, departure, seats, duration, price, busType) => `${ company } ${ departure.format('HH:mm') }, ${ price }, ${ busType }, ${ seats } lugar${ seats !== '1' ? 'es' : '' }, ${ (0, _stringHelpers.durationFormat)(duration) }`, listItemTg: (company, departure, arrival, seats, duration) => `${ company }: ${ departure.name } ${ departure.time } 🚌 ${ arrival.name } ${ arrival.time }, ${ duration } minutos ${ seats } lugar${ seats !== '1' ? 'es' : '' } disponíve${ seats !== '1' ? 'is' : 'l' }.`, listItemFb: (company, departure, arrival, seats, duration) => `${ departure.name } ${ departure.time }${ arrival.name } ${ arrival.time }, ${ duration } minutos.`, filteredDepartureList: (origin, destination, results, url, { day, timeFilterFrom, timeFilterTo, busTypeFilters, priceFilter, excludedFilters }) => { // Possible values for excludedFilters // [] // ['busTypeFilters'] // ['busTypeFilters', 'timeFilterTo'] // ['busTypeFilters', 'timeFilterTo', 'timeFilterFrom'] const optionsSize = results ? results.length : 0; const firstOptionSize = excludedFilters.length ? 0 : optionsSize; const dayText = (0, _stringHelpers.dayString)(day, dayStrings); const headerBegin = `De ${ origin } para ${ destination } ${ dayText }, `; const headerEnd = `tenho ${ firstOptionSize } opç${ firstOptionSize === 1 ? 'ão' : 'ões' }`; const intervalFilterAfter = timeFilterFrom ? `depois das ${ timeFilterFrom.format('HH:mm') }, ` : ''; const intervalFilter = timeFilterTo ? `entre ${ timeFilterFrom.format('HH:mm') } e ${ timeFilterTo.format('HH:mm') }, ` : intervalFilterAfter; const busType = busTypeFilters ? `😴 ${ busTypeFilters.join(' ou ') }, ` : ''; const priceSort = priceFilter ? `ordenadas por ${ priceFilter.value.slice(0, -5) } preço, ` : ''; let header = headerBegin; switch (excludedFilters.length) { case 1: header = `${ headerBegin }${ intervalFilter }${ busType }${ priceSort }não achei nada. Mas ${ dayText }${ intervalFilter }${ priceSort } tenho ${ optionsSize }`; break; case 2: header = `${ headerBegin }${ intervalFilter }${ busType }${ priceSort }não achei nada. Mas ${ intervalFilter }${ priceSort } tenho ${ optionsSize }`; break; case 3: header = `${ headerBegin }${ intervalFilter }${ busType }${ priceSort }não achei nada. Mas neste dia ${ priceSort } tenho ${ optionsSize }`; break; default: header = `${ headerBegin }${ intervalFilter }${ busType }${ priceSort }${ headerEnd }`; break; } const body = `${ results ? `:\n\n${ results }` : '.' }`; const footer = `Para ver todas as opções desse dia acesse ${ url }`; return { header, body, footer }; }, moreResultsTitle: () => 'Mais opções', moreResultsButton: () => 'Ver todas', detail: () => 'Escolher' }, // ## Unexpected answer unknown: () => DEBUG_TO_LOGFILE ? () => 'não entendi 😥' : debug => `Vixe, me confundi. ${ debug }` }; /* eslint-enable max-len */ const customRepliesPath = process.env.CUSTOM_REPLIES_PATH || './custom'; const customReplies = require(customRepliesPath); const replies = _extends({}, defaultReplies, customReplies, { greeting: _extends({}, defaultReplies.greeting, customReplies.greeting), trip: _extends({}, defaultReplies.trip, customReplies.trip) }); exports.replies = replies; exports.dayStrings = dayStrings;