kulmapaikka-ircbot/plugins/instantanswer.js

81 lines
1.9 KiB
JavaScript
Raw Normal View History

2018-04-29 17:37:07 +03:00
var Promise = require('promise');
var requestPromise = require('./helpers/requestPromise.js');
var BasePlugin = require('./base.js');
var logger = require('winston');
class InstantAswer extends BasePlugin {
constructor(config) {
super(config);
this.name = 'InstantAswer';
}
test(input) {
var res = null;
if (res = input.match(/^\.wtf (.+)$/i)) {
return true;
}
return false;
}
getDDG(query) {
var urlArgs = {
q: query,
kp: -1,
skip_disambig: '0',
format: 'json'
};
let url = 'https://api.duckduckgo.com/';
var promise = requestPromise(url, urlArgs, {
'Accept': 'application/json',
});
return promise;
}
getAnswer(query) {
let that = this;
var promise = new Promise(function(resolve, reject) {
that.getDDG(query).then((response) => {
var str = '';
if(response.AbstractText !== '') {
var text = '';
if(response.AbstractText.length > 350) {
text = response.AbstractText.substring(0, 350-response.AbstractURL.length) + '...';
} else {
text = response.AbstractText;
}
str = 'Vastaus: ' + text + '" | ' + response.AbstractURL;
resolve(str);
}
else if(response.RelatedTopics.length > 0) {
str = 'Vastaus: "' + response.RelatedTopics[0].Text + '" | ' + response.RelatedTopics[0].FirstURL;
resolve(str);
} else {
reject();
}
}, reject);
});
return promise;
}
result(input) {
let that = this;
var resultPromise = new Promise(function(resultResolve, resultReject) {
var res = null;
if (res = input.match(/^\.wtf (.+)$/i)) {
let query = res[1]
that.getAnswer(query).then(str => {
resultResolve(str);
})
} else {
resultReject();
}
});
return resultPromise;
}
}
module.exports = InstantAswer;