101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
var Promise = require('promise')
|
|
var requestPromise = require('./helpers/requestPromise.js')
|
|
var BasePlugin = require('./base.js')
|
|
var cheerio = require('cheerio')
|
|
|
|
class Pwm extends BasePlugin {
|
|
constructor (config) {
|
|
super(config)
|
|
this.name = 'Pvm'
|
|
this.apikey = config.keys.owm.apiKey // owm for sunrise
|
|
}
|
|
|
|
help () {
|
|
// | Command | Description
|
|
return '.pvm Kertoo päivän, nimipäivän ja muita tietoja'
|
|
}
|
|
|
|
test (input) {
|
|
var res = input.match(/^\.pvm$/i)
|
|
if (res) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
today () {
|
|
var today = new Date()
|
|
return (new Intl.DateTimeFormat('fi-FI', {day: 'numeric', month: 'numeric', timeZone: 'Europe/Helsinki'}).format(today))
|
|
}
|
|
getWeather (city, code) {
|
|
var language = 'fi'
|
|
|
|
var urlArgs = {
|
|
'q': city,
|
|
'lang': language,
|
|
'APPID': this.apikey
|
|
}
|
|
|
|
var url = 'http://api.openweathermap.org/data/2.5/weather'
|
|
var promise = requestPromise(url, urlArgs)
|
|
|
|
return promise
|
|
}
|
|
getNimipaiva () {
|
|
let dateString = this.today()
|
|
var urlArgs = {}
|
|
var url = 'http://nimipäivä.fi/' + dateString + '/'
|
|
|
|
var promise = requestPromise(url, urlArgs, {
|
|
'Accept': 'application/json'
|
|
}, true)
|
|
|
|
return promise
|
|
}
|
|
|
|
getAllData () {
|
|
return Promise.all([
|
|
this.getNimipaiva(),
|
|
this.getWeather('Helsinki')
|
|
])
|
|
}
|
|
|
|
result (input) {
|
|
var that = this
|
|
var resultPromise = new Promise(function (resolve, reject) {
|
|
var res = input.match(/^\.pvm$/i)
|
|
if (res) {
|
|
that.getAllData().then(function (data) {
|
|
// console.log(data)
|
|
let weather = data[1]
|
|
if (weather.cod === '404') {
|
|
reject(new Error('Eioo'))
|
|
return
|
|
}
|
|
|
|
let sunriseDate = new Date(Number(weather.sys.sunrise) * 1000)
|
|
let sunsetDate = new Date(Number(weather.sys.sunset) * 1000)
|
|
let sunrise = new Intl.DateTimeFormat('fi-FI', {hour: 'numeric', minute: 'numeric', timeZone: 'Europe/Helsinki'}).format(sunriseDate)
|
|
let sunset = new Intl.DateTimeFormat('fi-FI', {hour: 'numeric', minute: 'numeric', timeZone: 'Europe/Helsinki'}).format(sunsetDate)
|
|
|
|
const $ = cheerio.load(data[0])
|
|
let names = []
|
|
$('.text p').children('a').each(function (i, elem) {
|
|
names.push($(this).text())
|
|
})
|
|
|
|
let text = 'Pvm: Tänään on ' + that.today() + ' ja nimipäivää viettävät ' + names.join(', ') + '. Aurinko nousee ' + sunrise + ' ja laskee ' + sunset + '.'
|
|
|
|
resolve(text)
|
|
}, function (error) {
|
|
reject(error)
|
|
})
|
|
}
|
|
})
|
|
|
|
return resultPromise
|
|
}
|
|
}
|
|
|
|
module.exports = Pwm
|