Added Pvm and cron
This commit is contained in:
parent
e24d0d75dd
commit
f5facd076d
15
app.js
15
app.js
|
@ -7,7 +7,7 @@ const path = require('path');
|
|||
|
||||
// Load config
|
||||
const config = require('./config');
|
||||
|
||||
const cron = require('node-cron');
|
||||
|
||||
// Load new plugins
|
||||
const PluginManager = require('./plugins/pluginManager.js');
|
||||
|
@ -38,6 +38,7 @@ if(!config.irc.connect) {
|
|||
return;
|
||||
}
|
||||
|
||||
var isConnected = false
|
||||
// Start client
|
||||
var client = new irc.Client(config.irc.server, config.irc.nick, {
|
||||
debug: true,
|
||||
|
@ -131,3 +132,15 @@ client.addListener('names', function(channel, nicks) {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (let i = 0; i < config.cron.length; i++) {
|
||||
let row = config.cron[i]
|
||||
let that = this;
|
||||
cron.schedule(row.cron, () => {
|
||||
if (client.conn !== null) {
|
||||
for (let c = 0; c < config.irc.channels.length; c++) {
|
||||
handleMessage('BOT', config.irc.channels[i] , row.command);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,41 +1,51 @@
|
|||
var config = {
|
||||
plugins: [
|
||||
'Character1',
|
||||
'Character2',
|
||||
'Dice',
|
||||
'InstantAnswer',
|
||||
'Kernel',
|
||||
'Tweet',
|
||||
'Url',
|
||||
'Weather',
|
||||
'Joke',
|
||||
],
|
||||
irc: {
|
||||
connect: true,
|
||||
server: 'irc.example.com',
|
||||
nick: 'My bot',
|
||||
channels: ['#botdev']
|
||||
},
|
||||
members: {
|
||||
'lanxu': {
|
||||
user: /lanxu$/,
|
||||
host: /^(.*)example\.com$/
|
||||
},
|
||||
},
|
||||
owmCityIds: {
|
||||
Tampere: 634963,
|
||||
Helsinki: 658225
|
||||
},
|
||||
keys: {
|
||||
twitter: {
|
||||
consumerKey: '',
|
||||
consumerSecret: ''
|
||||
},
|
||||
google: {
|
||||
apiKey: ''
|
||||
},
|
||||
owm: {
|
||||
apiKey: ''
|
||||
}
|
||||
}
|
||||
};
|
||||
let config = {
|
||||
plugins: [
|
||||
'Character1',
|
||||
'Character2',
|
||||
'Dice',
|
||||
'InstantAnswer',
|
||||
'Kernel',
|
||||
'Twitter',
|
||||
'Url',
|
||||
'Weather',
|
||||
'Youtube',
|
||||
'Joke',
|
||||
'Mastodon',
|
||||
'Users',
|
||||
'Pvm'
|
||||
],
|
||||
cron: [{
|
||||
cron: '1 0 * * *',
|
||||
command: '.pvm'
|
||||
}],
|
||||
irc: {
|
||||
connect: true,
|
||||
server: 'irc.example.com',
|
||||
nick: 'My bot',
|
||||
channels: ['#botdev']
|
||||
},
|
||||
members: {
|
||||
'lanxu': {
|
||||
user: /lanxu$/,
|
||||
host: /^(.*)example\.com$/
|
||||
}
|
||||
},
|
||||
owmCityIds: {
|
||||
Tampere: 634963,
|
||||
Helsinki: 658225
|
||||
},
|
||||
keys: {
|
||||
twitter: {
|
||||
consumerKey: '',
|
||||
consumerSecret: ''
|
||||
},
|
||||
google: {
|
||||
apiKey: ''
|
||||
},
|
||||
owm: {
|
||||
apiKey: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = config
|
||||
|
|
87
package-lock.json
generated
87
package-lock.json
generated
|
@ -4,6 +4,11 @@
|
|||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "10.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz",
|
||||
"integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ=="
|
||||
},
|
||||
"abbrev": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||
|
@ -151,7 +156,7 @@
|
|||
},
|
||||
"axios": {
|
||||
"version": "0.18.0",
|
||||
"resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||
"integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.3.0",
|
||||
|
@ -247,6 +252,11 @@
|
|||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
|
||||
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
|
||||
},
|
||||
"boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
|
||||
},
|
||||
"boom": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
|
||||
|
@ -411,6 +421,19 @@
|
|||
"resolved": "https://registry.npmjs.org/chance/-/chance-1.0.13.tgz",
|
||||
"integrity": "sha512-9cpcgmAIQiXC0eMgQuMZgXuHR2Y+gKUyGQnalqSAg5LlUJyJFsZeKyuHVSGhj+bx18ppH+Jo3VOayNeXR/7p9Q=="
|
||||
},
|
||||
"cheerio": {
|
||||
"version": "1.0.0-rc.2",
|
||||
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
|
||||
"integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
|
||||
"requires": {
|
||||
"css-select": "~1.2.0",
|
||||
"dom-serializer": "~0.1.0",
|
||||
"entities": "~1.1.1",
|
||||
"htmlparser2": "^3.9.1",
|
||||
"lodash": "^4.15.0",
|
||||
"parse5": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
|
||||
|
@ -616,6 +639,33 @@
|
|||
"integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
|
||||
"dev": true
|
||||
},
|
||||
"css-select": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
|
||||
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
|
||||
"requires": {
|
||||
"boolbase": "~1.0.0",
|
||||
"css-what": "2.1",
|
||||
"domutils": "1.5.1",
|
||||
"nth-check": "~1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"domutils": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
|
||||
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
|
||||
"requires": {
|
||||
"dom-serializer": "0",
|
||||
"domelementtype": "1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"css-what": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
|
||||
"integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
|
||||
},
|
||||
"currently-unhandled": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
||||
|
@ -2913,6 +2963,15 @@
|
|||
"to-regex": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"node-cron": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz",
|
||||
"integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==",
|
||||
"requires": {
|
||||
"opencollective-postinstall": "^2.0.0",
|
||||
"tz-offset": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node-dev": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/node-dev/-/node-dev-3.1.3.tgz",
|
||||
|
@ -3047,6 +3106,14 @@
|
|||
"path-key": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"nth-check": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
|
||||
"integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
|
||||
"requires": {
|
||||
"boolbase": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz",
|
||||
|
@ -3134,6 +3201,11 @@
|
|||
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
|
||||
"integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
|
||||
},
|
||||
"opencollective-postinstall": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz",
|
||||
"integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ=="
|
||||
},
|
||||
"optimist": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
||||
|
@ -3184,6 +3256,14 @@
|
|||
"error-ex": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"parse5": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
|
||||
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"parseurl": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
|
||||
|
@ -4094,6 +4174,11 @@
|
|||
"request": "^2.72.0"
|
||||
}
|
||||
},
|
||||
"tz-offset": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz",
|
||||
"integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ=="
|
||||
},
|
||||
"undefsafe": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"chance": "=1.0.13",
|
||||
"cheerio": "^1.0.0-rc.2",
|
||||
"cron": "=1.3.0",
|
||||
"file-stream-rotator": "=0.2.1",
|
||||
"finalhandler": "=1.1.1",
|
||||
|
@ -24,6 +25,7 @@
|
|||
"lokijs": "=1.5.3",
|
||||
"mkdirp": "=0.5.1",
|
||||
"morgan": "=1.9.0",
|
||||
"node-cron": "^2.0.3",
|
||||
"node-dev": "=3.1.3",
|
||||
"node-uuid": "=1.4.8",
|
||||
"promise": "=8.0.1",
|
||||
|
|
|
@ -18,7 +18,11 @@ function RequestPromise(url, urlArgs, headers, json) {
|
|||
json: json
|
||||
}, function(error, response, body) {
|
||||
if(!error && response.statusCode == 200) {
|
||||
resolve(JSON.parse(body));
|
||||
if (json === false) {
|
||||
resolve(JSON.parse(body)); /// wtf
|
||||
} else {
|
||||
resolve(body)
|
||||
}
|
||||
} else {
|
||||
reject(error);
|
||||
}
|
||||
|
|
98
plugins/pvm.js
Normal file
98
plugins/pvm.js
Normal file
|
@ -0,0 +1,98 @@
|
|||
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
|
||||
}
|
||||
|
||||
test (input) {
|
||||
var res = input.match(/^\.pvm$/i)
|
||||
if (res) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
today () {
|
||||
var today = new Date()
|
||||
var month = today.getMonth() + 1
|
||||
var day = today.getDate()
|
||||
var dateString = day + '.' + month + '.'
|
||||
return dateString
|
||||
}
|
||||
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 = sunriseDate.getHours() + '.' + sunriseDate.getMinutes()
|
||||
let sunset = sunsetDate.getHours() + '.' + sunsetDate.getMinutes()
|
||||
|
||||
const $ = cheerio.load(data[0])
|
||||
let names = []
|
||||
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
|
Loading…
Reference in New Issue
Block a user