Rename libFlayer to libCore
This commit is contained in:
@@ -2,10 +2,9 @@
|
|||||||
let Parser = require('rss-parser');
|
let Parser = require('rss-parser');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
let parser = new Parser();
|
let parser = new Parser();
|
||||||
var jsonfile = require('jsonfile');
|
|
||||||
var fs = require('fs');
|
|
||||||
var file = ('./feeds.json');
|
|
||||||
const storageHandler = require("./libStorage");
|
const storageHandler = require("./libStorage");
|
||||||
|
|
||||||
|
/* OpenAI config
|
||||||
const { Configuration, OpenAIApi } = require('openai');
|
const { Configuration, OpenAIApi } = require('openai');
|
||||||
const configuration = new Configuration({
|
const configuration = new Configuration({
|
||||||
organization: process.env.OPENAI_ORG,
|
organization: process.env.OPENAI_ORG,
|
||||||
@@ -13,38 +12,21 @@ const configuration = new Configuration({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const openai = new OpenAIApi(configuration);
|
const openai = new OpenAIApi(configuration);
|
||||||
|
*/
|
||||||
|
|
||||||
// Data Structures
|
// Data Structures
|
||||||
var feeds = [];
|
var feeds = [];
|
||||||
let linkFlayerMap = [];
|
let rssFeedMap = [];
|
||||||
let linkFlayerCats = [];
|
let rssFeedCategories = [];
|
||||||
|
|
||||||
//Aitrable Setup
|
|
||||||
var apiKey = process.env.KEY;
|
|
||||||
var userBase = process.env.BASE;
|
|
||||||
var stockKey = process.env.STOCK_KEY;
|
|
||||||
|
|
||||||
// Precess Vars
|
// Precess Vars
|
||||||
var userTable = process.env.DB_TABLE
|
var userTable = process.env.DB_TABLE
|
||||||
token = process.env.TOKEN;
|
|
||||||
|
|
||||||
// Setup Storage handler
|
// Setup Storage handler
|
||||||
var base = new storageHandler.Storage(userTable);
|
var storageSource = new storageHandler.Storage(userTable);
|
||||||
|
|
||||||
//DuckDuckGo related structure
|
|
||||||
let answerData = {
|
|
||||||
text: ``,
|
|
||||||
source: ``
|
|
||||||
}
|
|
||||||
|
|
||||||
//Local DB for quotes
|
|
||||||
const {
|
|
||||||
quotes
|
|
||||||
} = require('./quotes.json');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a new source url to configured Airtable
|
* Adds a new source url to configured storage
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {string} title - Title/Name of the RSS feed.
|
* @param {string} title - Title/Name of the RSS feed.
|
||||||
* @param {string} link - URL of RSS feed.
|
* @param {string} link - URL of RSS feed.
|
||||||
@@ -58,7 +40,7 @@ exports.addSource = function (title, link, category, callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
base.create([{
|
storageSource.create([{
|
||||||
"fields": {
|
"fields": {
|
||||||
"title": title,
|
"title": title,
|
||||||
"link": link,
|
"link": link,
|
||||||
@@ -90,7 +72,7 @@ exports.addSource = function (title, link, category, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a new source url to configured Airtable by title
|
* Deletes a new source url by title
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {string} title - Title/Name of the RSS feed.
|
* @param {string} title - Title/Name of the RSS feed.
|
||||||
*/
|
*/
|
||||||
@@ -101,7 +83,7 @@ exports.deleteSource = function (title, callback) {
|
|||||||
deleteRecord = feeds[i].id;
|
deleteRecord = feeds[i].id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
base.destroy(deleteRecord, function (err, deletedRecord) {
|
storageSource.destroy(deleteRecord, function (err, deletedRecord) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
callback(err, undefined);
|
callback(err, undefined);
|
||||||
@@ -112,17 +94,17 @@ exports.deleteSource = function (title, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a new source url to configured Airtable
|
* Adds a new source url to configured storage
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {string} feedType - Category to select Feed by.
|
* @param {string} feedType - Category to select Feed by.
|
||||||
*/
|
*/
|
||||||
exports.getFeeds = function (feedType) {
|
exports.getFeeds = function (feedType) {
|
||||||
var linkFlayerFilteredMap = [];
|
var linkFlayerFilteredMap = [];
|
||||||
if (feedType == null || feedType == undefined || feedType == "") {
|
if (feedType == null || feedType == undefined || feedType == "") {
|
||||||
return linkFlayerMap;
|
return rssFeedMap;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
linkFlayerMap.forEach(linkFlay => {
|
rssFeedMap.forEach(linkFlay => {
|
||||||
if (linkFlay.category.toLowerCase().indexOf(feedType.toLowerCase()) > -1) {
|
if (linkFlay.category.toLowerCase().indexOf(feedType.toLowerCase()) > -1) {
|
||||||
linkFlayerFilteredMap.push(linkFlay);
|
linkFlayerFilteredMap.push(linkFlay);
|
||||||
}
|
}
|
||||||
@@ -131,12 +113,15 @@ exports.getFeeds = function (feedType) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the RSS feeds
|
||||||
|
*/
|
||||||
exports.loadFeeds = function () {
|
exports.loadFeeds = function () {
|
||||||
feeds = [];
|
feeds = [];
|
||||||
linkFlayerMap = [];
|
rssFeedMap = [];
|
||||||
linkFlayerCats = [];
|
rssFeedCategories = [];
|
||||||
|
|
||||||
base.getAllRecords(function (err, records) {
|
storageSource.getAllRecords(function (err, records) {
|
||||||
records.forEach(function (record) {
|
records.forEach(function (record) {
|
||||||
try {
|
try {
|
||||||
console.log('Retrieved title: ', record.get('title'));
|
console.log('Retrieved title: ', record.get('title'));
|
||||||
@@ -148,9 +133,7 @@ exports.loadFeeds = function () {
|
|||||||
link: `${unescape(record.get('link'))}`,
|
link: `${unescape(record.get('link'))}`,
|
||||||
category: `${unescape(record.get('category'))}`,
|
category: `${unescape(record.get('category'))}`,
|
||||||
id: record.getId()
|
id: record.getId()
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Feed Data:", feedData);
|
|
||||||
|
|
||||||
var foundMatch = false;
|
var foundMatch = false;
|
||||||
feeds.forEach(feedBlock => {
|
feeds.forEach(feedBlock => {
|
||||||
@@ -164,14 +147,14 @@ exports.loadFeeds = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let foundCat = false;
|
let foundCat = false;
|
||||||
linkFlayerCats.forEach(cat => {
|
rssFeedCategories.forEach(cat => {
|
||||||
if (cat == record.get('category')) {
|
if (cat == record.get('category')) {
|
||||||
foundCat = true;
|
foundCat = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!foundCat) {
|
if (!foundCat) {
|
||||||
linkFlayerCats.push(record.get('category'));
|
rssFeedCategories.push(record.get('category'));
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -186,12 +169,12 @@ exports.loadFeeds = function () {
|
|||||||
if (err) {
|
if (err) {
|
||||||
console.log(err + " " + feedBlock.link);
|
console.log(err + " " + feedBlock.link);
|
||||||
//return;
|
//return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (feed != undefined && feed.items != undefined) {
|
if (feed != undefined && feed.items != undefined) {
|
||||||
feed.items.forEach(item => {
|
feed.items.forEach(item => {
|
||||||
var foundFeed = false;
|
var foundFeed = false;
|
||||||
linkFlayerMap.forEach(linkFlay => {
|
rssFeedMap.forEach(linkFlay => {
|
||||||
if (linkFlay.link == item.link) {
|
if (linkFlay.link == item.link) {
|
||||||
foundFeed = true;
|
foundFeed = true;
|
||||||
}
|
}
|
||||||
@@ -203,7 +186,7 @@ exports.loadFeeds = function () {
|
|||||||
link: `${unescape(item.link)}`,
|
link: `${unescape(item.link)}`,
|
||||||
category: `${unescape(feedBlock.category)}`
|
category: `${unescape(feedBlock.category)}`
|
||||||
}
|
}
|
||||||
linkFlayerMap.push(linkData);
|
rssFeedMap.push(linkData);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -224,7 +207,12 @@ exports.loadFeeds = function () {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search a state for any weather alerts
|
||||||
|
*
|
||||||
|
* @param {*} state The state to search for any weather alerts in
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
exports.weatherAlert = async function (state) {
|
exports.weatherAlert = async function (state) {
|
||||||
|
|
||||||
var answerURL = `https://api.weather.gov/alerts/active?area=${state}`;
|
var answerURL = `https://api.weather.gov/alerts/active?area=${state}`;
|
||||||
@@ -245,6 +233,11 @@ exports.weatherAlert = async function (state) {
|
|||||||
return answerData;
|
return answerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a random food recipe
|
||||||
|
*
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
exports.getFood = async function () {
|
exports.getFood = async function () {
|
||||||
|
|
||||||
var answerURL = `https://www.themealdb.com/api/json/v1/1/random.php`;
|
var answerURL = `https://www.themealdb.com/api/json/v1/1/random.php`;
|
||||||
@@ -286,38 +279,12 @@ exports.getFood = async function () {
|
|||||||
return answerData;
|
return answerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.search = async function (question) {
|
/**
|
||||||
|
* Search Urban dictionary for a phrase
|
||||||
var answerURL = `https://api.duckduckgo.com/?q=${question}&format=json&pretty=1`;
|
*
|
||||||
console.log(answerURL);
|
* @param {*} question The phrase to search urban dictionary for
|
||||||
answerData = {
|
* @returns
|
||||||
text: `No answer found try using a simpler search term`,
|
*/
|
||||||
source: ``
|
|
||||||
}
|
|
||||||
await axios.get(answerURL)
|
|
||||||
.then(response => {
|
|
||||||
//console.log(response.data.RelatedTopics[0].Text);
|
|
||||||
//console.log(response.data.RelatedTopics[0].FirstURL);
|
|
||||||
|
|
||||||
if (response.data.Abstract != "") {
|
|
||||||
answerData = {
|
|
||||||
text: `${unescape(response.data.Abstract)}`,
|
|
||||||
source: `${unescape(response.data.AbstractSource)}`
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
answerData = {
|
|
||||||
text: `${unescape(response.data.RelatedTopics[0].Text)}`,
|
|
||||||
source: `${unescape(response.data.RelatedTopics[0].FirstURL)}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return answerData;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
return answerData;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.getSlang = async function (question) {
|
exports.getSlang = async function (question) {
|
||||||
|
|
||||||
var answerURL = `https://api.urbandictionary.com/v0/define?term=${question}`;
|
var answerURL = `https://api.urbandictionary.com/v0/define?term=${question}`;
|
||||||
@@ -345,106 +312,19 @@ exports.getSlang = async function (question) {
|
|||||||
return slangData;
|
return slangData;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getNPM = async function (question) {
|
|
||||||
|
|
||||||
var answerURL = `https://www.npmjs.com/search/suggestions?q=${question}`;
|
|
||||||
console.log(answerURL);
|
|
||||||
let returnData = [];
|
|
||||||
|
|
||||||
await axios.get(answerURL)
|
|
||||||
.then(response => {
|
|
||||||
console.log(response.data);
|
|
||||||
|
|
||||||
if (response.data.length != 0) {
|
|
||||||
response.data.forEach(npmResult => {
|
|
||||||
returnData.push(npmResult);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnData;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
return returnData;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.getCode = async function (question) {
|
|
||||||
|
|
||||||
var answerURL = `https://you.com/api/performSearch?q=${question}&page=1&count=10&safeSearch=Moderate&onShoppingPage=false&mkt=en-US&responseFilter=WebPages,Translations,TimeZone,Computation,RelatedSearches&domain=youcode`;
|
|
||||||
console.log(answerURL);
|
|
||||||
let returnData = [];
|
|
||||||
|
|
||||||
await axios.get(answerURL)
|
|
||||||
.then(response => {
|
|
||||||
console.log(response.data);
|
|
||||||
|
|
||||||
if (response.data.length != 0) {
|
|
||||||
response.data.searchResults.mainline.bing_search_results.forEach(codeResult => {
|
|
||||||
returnData.push(codeResult);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnData;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
return returnData;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.getStock = async function (stock) {
|
|
||||||
|
|
||||||
var answerURL = `https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=${stock}&interval=5min&apikey=${stockKey}`;
|
|
||||||
console.log(answerURL);
|
|
||||||
stockData = {
|
|
||||||
symbol: `Not Found`,
|
|
||||||
open: ``,
|
|
||||||
high: ``,
|
|
||||||
low: ``,
|
|
||||||
price: ``,
|
|
||||||
volume: ``,
|
|
||||||
latest: ``,
|
|
||||||
previous: ``,
|
|
||||||
change: ``,
|
|
||||||
percent: ``
|
|
||||||
}
|
|
||||||
await axios.get(answerURL)
|
|
||||||
.then(response => {
|
|
||||||
//console.log(response.data.list[0]);
|
|
||||||
|
|
||||||
stockData = {
|
|
||||||
symbol: `${unescape(response.data["Global Quote"]['01. symbol'])}`,
|
|
||||||
open: `${unescape(response.data["Global Quote"]['02. open'])}`,
|
|
||||||
high: `${unescape(response.data["Global Quote"]['03. high'])}`,
|
|
||||||
low: `${unescape(response.data["Global Quote"]['04. low'])}`,
|
|
||||||
price: `${unescape(response.data["Global Quote"]['05. price'])}`,
|
|
||||||
volume: `${unescape(response.data["Global Quote"]['06. volume'])}`,
|
|
||||||
latest: `${unescape(response.data["Global Quote"]['07. latest trading day'])}`,
|
|
||||||
previous: `${unescape(response.data["Global Quote"]['08. previous close'])}`,
|
|
||||||
change: `${unescape(response.data["Global Quote"]['09. change'])}`,
|
|
||||||
percent: `${unescape(response.data["Global Quote"]['10. change percent'])}`
|
|
||||||
}
|
|
||||||
|
|
||||||
return stockData;
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
return stockData;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getChat - Returns libFlayer feed sources
|
* Use ChatGPT to generate a response
|
||||||
* @constructor
|
*
|
||||||
|
* @param {*} _prompt The use submitted text prompt
|
||||||
|
* @param {*} param1 Default parameters can be modified
|
||||||
|
* @returns
|
||||||
*/
|
*/
|
||||||
|
exports.getChat = async function (_prompt, { _model = "text-davinci-003", _temperature = 0, _max_tokens = 100 }) {
|
||||||
exports.getChat = async function (question) {
|
|
||||||
const response = await openai.createCompletion({
|
const response = await openai.createCompletion({
|
||||||
model: "text-davinci-003",
|
model: _model,
|
||||||
prompt: question,
|
prompt: _prompt,
|
||||||
temperature: 0,
|
temperature: _temperature,
|
||||||
max_tokens: 100
|
max_tokens: _max_tokens
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -452,9 +332,8 @@ exports.getChat = async function (question) {
|
|||||||
return responseData;
|
return responseData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getSources - Returns libFlayer feed sources
|
* getSources - Get the RSS sources currently in use
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
exports.getSources = function () {
|
exports.getSources = function () {
|
||||||
@@ -462,7 +341,7 @@ exports.getSources = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getQuotes - Returns libFlayer feed quotes
|
* getQuotes - Get a random quote from the local list
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
exports.getQuotes = async function (quote_url) {
|
exports.getQuotes = async function (quote_url) {
|
||||||
@@ -483,17 +362,9 @@ exports.getQuotes = async function (quote_url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getCategories - Returns libFlayer feed categories
|
* getCategories - Returns feed categories
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
exports.getCategories = function () {
|
exports.getCategories = function () {
|
||||||
return linkFlayerCats;
|
return rssFeedCategories;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* sleep - sleep/wait
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
exports.sleep = (ms) => new Promise((resolve) => {
|
|
||||||
setTimeout(resolve, ms);
|
|
||||||
})
|
|
||||||
Reference in New Issue
Block a user