umbrello-bot/src/app.js

100 lines
2.4 KiB
JavaScript

import Telegraf from 'telegraf';
import config from './config';
import logger from './logger';
import { rainCheck, searchCity } from './api';
import { initUser, setCity, findAssociedCity } from './db';
import {
searchCityTemplate,
welcomeTemplate,
helpTemplate,
errorTemplate,
setLocationTemplate,
weatherTemplate,
weatherDetailsTemplate,
} from './templates';
const bot = new Telegraf(config.telegraf.token);
bot.start((ctx) => {
const { id } = ctx.from;
initUser(id)
.then(() => ctx.reply(welcomeTemplate(), config.telegraf.options.message))
.then(() => ctx.reply(helpTemplate(), config.telegraf.options.message))
.catch(() => ctx.reply(errorTemplate(), config.telegraf.options.message));
});
bot.help((ctx) => ctx.reply(helpTemplate()));
bot.command('/search', (ctx) => {
const { text } = ctx.message;
const cityName = text.split(' ').slice(1, 6).join(' ');
if (!cityName) {
ctx.reply('Missing city name. ex: /search Napoli');
return;
}
searchCity(cityName)
.then((data) => {
data.forEach((e) => {
ctx.reply(searchCityTemplate(e), config.telegraf.options.message);
});
})
.catch(() => ctx.reply(errorTemplate(), config.telegraf.options.message));
});
bot.command('/set', (ctx) => {
const { id } = ctx.from;
const { text } = ctx.message;
const cityId = Number(text.split(' ').slice(1, 2).join(' ')) || undefined;
if (!cityId) {
ctx.reply('Missing city id. (ex: /set 3172394)');
return;
}
setCity(id, cityId)
.then(() => ctx.reply(setLocationTemplate(cityId)))
.catch(() => ctx.reply(errorTemplate(), config.telegraf.options.message));
});
bot.command('/get', (ctx) => {
const { id } = ctx.from;
findAssociedCity(id)
.then((cityId) => rainCheck(cityId))
.then((json) => {
if (json.rain === 'Y') {
ctx.reply(weatherTemplate(), config.telegraf.options.message);
}
return json;
})
.then((json) => {
ctx.reply(weatherDetailsTemplate(json), config.telegraf.options.message);
})
.catch(() => ctx.reply(errorTemplate(), config.telegraf.options.message));
});
bot.catch((err) => logger.error(err));
bot.launch();
process
.on('unhandledRejection', (reason) => logger.error(reason))
.on('uncaughtException', (err) => {
logger.error(err);
process.exit(1);
})
.on('SIGINT', () => {
logger.info('App stopped');
process.exit(0);
});