Rename libFlayer to libCore

This commit is contained in:
Logan Cusano
2023-02-24 20:20:34 -05:00
parent 2465c3ce2f
commit 893221424f

View File

@@ -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);
})