Add server
This commit is contained in:
parent
44435cf18d
commit
58f203e71a
|
@ -0,0 +1,96 @@
|
||||||
|
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,
|
||||||
|
errorTemplate,
|
||||||
|
setLocationTemplate,
|
||||||
|
weatherTemplate,
|
||||||
|
weatherDetailsTemplate,
|
||||||
|
} from './templates';
|
||||||
|
|
||||||
|
const bot = new Telegraf(config.telegram.token);
|
||||||
|
|
||||||
|
bot.start((ctx) => {
|
||||||
|
const { id, first_name } = ctx.from;
|
||||||
|
initUser(id)
|
||||||
|
.then(() => ctx.reply(welcomeTemplate(first_name), { parse_mode: 'Markdown' }))
|
||||||
|
.catch(() => ctx.reply(errorTemplate, { parse_mode: 'Markdown' }));
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.help((ctx) => ctx.reply('help'));
|
||||||
|
|
||||||
|
|
||||||
|
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), { parse_mode: 'Markdown' });
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => ctx.reply(errorTemplate, { parse_mode: 'Markdown' }));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
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, { parse_mode: 'Markdown' }));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
bot.command('/get', (ctx) => {
|
||||||
|
const { id } = ctx.from;
|
||||||
|
|
||||||
|
findAssociedCity(id)
|
||||||
|
.then((cityId) => rainCheck(cityId))
|
||||||
|
.then((json) => {
|
||||||
|
if (json.rain === 'Y') {
|
||||||
|
ctx.reply(weatherTemplate(), { parse_mode: 'Markdown' });
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
})
|
||||||
|
.then((json) => {
|
||||||
|
ctx.reply(weatherDetailsTemplate(json), { parse_mode: 'Markdown' });
|
||||||
|
})
|
||||||
|
.catch((error) => ctx.reply(error));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
Loading…
Reference in New Issue