From e85d5644d4708c59d82a815d5ff2ef58e2f754d5 Mon Sep 17 00:00:00 2001 From: John Facey Date: Fri, 24 Dec 2021 01:20:45 -0600 Subject: [PATCH] moving to airtable design --- commands/add.js | 18 ++++--- commands/update.js | 4 +- index.js | 3 +- libFlayer.js | 117 +++++++++++++++++++++++++++++++++++---------- package-lock.json | 58 ++++++++++++++++++++++ package.json | 1 + 6 files changed, 168 insertions(+), 33 deletions(-) diff --git a/commands/add.js b/commands/add.js index 1b7f477..c50fb16 100644 --- a/commands/add.js +++ b/commands/add.js @@ -5,17 +5,23 @@ module.exports = { description: 'Add RSS Source', execute(message,args) { - if (args.length < 2) { - message.reply(`Please use in !add [title] [https://domain.com/feed.xml] format`); + if (args.length < 3) { + message.reply(`Please use in !add [title] [https://domain.com/feed.xml] [category] format`); return; } var title = args[0]; var link = args[1]; + var category = args[2]; - libFlayer.addSource(title,link); - message.reply(`Adding ${title} to the list of RSS sources`); - var sources = libFlayer.getSources(); - libFlayer.writeFeed(sources); + var result = libFlayer.addSource(title,link,category); + if (result) { + message.reply(`Adding ${title} to the list of RSS sources`); + } else { + message.reply(`${title} already exists in the list of RSS sources`); + } + + var sources = libFlayer.getSources(); + //libFlayer.getConfig(); libFlayer.loadFeeds(); } diff --git a/commands/update.js b/commands/update.js index 49d0139..66d6d44 100644 --- a/commands/update.js +++ b/commands/update.js @@ -4,11 +4,11 @@ module.exports = { name: 'update', description: 'Get RSS Source Link', execute(message, args) { - message.reply(`Updating Sources`); + libFlayer.getConfig(); + message.reply(`Loading Feeds from Sources`); libFlayer.loadFeeds(); feedArray = libFlayer.getFeeds(); - message.reply(`Sources Updated`); } }; \ No newline at end of file diff --git a/index.js b/index.js index 0d9bd21..f79a903 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,7 @@ const fs = require('fs'); const { prefix } = require('./config.json'); require('dotenv').config(); token = process.env.TOKEN; + const { quotes } = require('./quotes.json'); const Discord = require('discord.js'); const client = new Discord.Client(); @@ -30,7 +31,7 @@ server.all("/",(req, res) => { function keepAlive() { server.listen(PORT, () => { console.log("Keep Alive Server Running"); - + libFlayer.getConfig(); libFlayer.loadFeeds(); libFlayer.feedArray = libFlayer.getFeeds(); }) diff --git a/libFlayer.js b/libFlayer.js index ea8e798..bfb4e1c 100644 --- a/libFlayer.js +++ b/libFlayer.js @@ -1,32 +1,84 @@ let Parser = require('rss-parser'); const axios = require('axios'); let parser = new Parser(); -let feeds = require('./feeds.json'); + +var feeds = []; var jsonfile = require('jsonfile'); var fs = require('fs'); var file = ('./feeds.json'); +var Airtable = require('airtable'); + +var apiKey=process.env.KEY; +var userBase=process.env.BASE; +var userTable =process.env.TABLE + +token = process.env.TOKEN; +var base = new Airtable({apiKey: apiKey}).base(userBase); + let linkFlayerMap = []; let answerData = { text: ``, source: `` } + const { quotes } = require('./quotes.json'); -exports.addSource = function(title,source){ - var linkData = { - title: `${title}`, - link: `${source}` - } +exports.addSource = function(title,link,category){ for (i=0; i new Promise((resolve) => { setTimeout(resolve, ms); }) exports.loadFeeds = function() { @@ -39,9 +91,10 @@ exports.loadFeeds = function() { feed.items.forEach(item => { var linkData = { - title: `${unescape(item.title)}`, - link: `${unescape(item.link)}`, - category: `${unescape(feedBlock.category)}` + title: `${item.title}`, + link: `${item.link}`, + category: `${feedBlock.category}`, + id: record.getId() } linkFlayerMap.push(linkData); }); @@ -51,18 +104,6 @@ exports.loadFeeds = function() { } - -exports.writeFeed = function (feeds) { - - jsonfile.writeFile(file, feeds, function (err) { - if (err != null) { - console.error(err); - } - }); - - console.log("saving feeds.json"); - -}; exports.getFeeds = function (feedType) { var linkFlayerFilteredMap = []; if (feedType == null || feedType == undefined || feedType == "") { @@ -86,6 +127,32 @@ exports.getQuotes = function () { return quotes; } +exports.getConfig = function() { + feeds = []; + base(userTable) + .select().eachPage(function page(records, fetchNextPage) { + + records.forEach(function(record) { + console.log('Retrieved title: ', record.get('title')); + console.log('Retrieved link:', record.get('link')); + console.log('Retrieved category:', record.get('category')); + + var linkData = { + title: `${record.get('title')}`, + link: `${record.get('link')}`, + category: `${record.get('category')}` + } + + feeds.push(linkData); + + }); + return; + //fetchNextPage(); + }, function done(error) { + console.log(error); + }); +} + exports.getAnswer = async function (question) { var answerURL = `https://api.duckduckgo.com/?q=${question}&format=json&pretty=1`; @@ -112,4 +179,6 @@ exports.getAnswer = async function (question) { console.log(error); }); return answerData; -} \ No newline at end of file +} + +this.getConfig(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c5e2d8d..bc9318a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "airtable": "^0.11.1", "axios": "^0.24.0", "discord.js": "^12.5.1", "dotenv": "^10.0.0", @@ -36,6 +37,11 @@ "node": ">= 6" } }, + "node_modules/@types/node": { + "version": "14.18.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.2.tgz", + "integrity": "sha512-fqtSN5xn/bBzDxMT77C1rJg6CsH/R49E7qsGuvdPJa20HtV5zSTuLJPNfnlyVH3wauKnkHdLggTVkOW/xP9oQg==" + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -47,6 +53,11 @@ "node": ">=6.5" } }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -59,6 +70,21 @@ "node": ">= 0.6" } }, + "node_modules/airtable": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/airtable/-/airtable-0.11.1.tgz", + "integrity": "sha512-33zBuUDhLl+FWWAFxFjS1a+vJr/b+UK//EV943nuiimChWph6YykQjYPmu/GucQ30g7mgaqq+98uPD4rfDHOgg==", + "dependencies": { + "@types/node": ">=8.0.0 <15", + "abort-controller": "^3.0.0", + "abortcontroller-polyfill": "^1.4.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -399,6 +425,11 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -760,6 +791,11 @@ "mime-types": "^2.1.12" } }, + "@types/node": { + "version": "14.18.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.2.tgz", + "integrity": "sha512-fqtSN5xn/bBzDxMT77C1rJg6CsH/R49E7qsGuvdPJa20HtV5zSTuLJPNfnlyVH3wauKnkHdLggTVkOW/xP9oQg==" + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -768,6 +804,11 @@ "event-target-shim": "^5.0.0" } }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -777,6 +818,18 @@ "negotiator": "0.6.2" } }, + "airtable": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/airtable/-/airtable-0.11.1.tgz", + "integrity": "sha512-33zBuUDhLl+FWWAFxFjS1a+vJr/b+UK//EV943nuiimChWph6YykQjYPmu/GucQ30g7mgaqq+98uPD4rfDHOgg==", + "requires": { + "@types/node": ">=8.0.0 <15", + "abort-controller": "^3.0.0", + "abortcontroller-polyfill": "^1.4.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.1" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1037,6 +1090,11 @@ "universalify": "^2.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index 8e8b948..8dca05a 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "Discord RSS News Bot", "main": "index.js", "dependencies": { + "airtable": "^0.11.1", "axios": "^0.24.0", "discord.js": "^12.5.1", "dotenv": "^10.0.0",