diff --git a/commands/add.js b/commands/add.js index e1ccebc..fba4cba 100644 --- a/commands/add.js +++ b/commands/add.js @@ -13,8 +13,8 @@ module.exports = { var link = args[1]; libFlayer.addSource(title,link); - message.reply( - `Adding ${title} to the list of RSS sources`); + message.reply(`Adding ${title} to the list of RSS sources`); + libFlayer.writeFeed(); libFlayer.loadFeeds(); }, diff --git a/commands/help.js b/commands/help.js index e994ab5..1a34d1e 100644 --- a/commands/help.js +++ b/commands/help.js @@ -7,11 +7,11 @@ module.exports = { message.reply( `!help - Lists the available commands **!search** - Searches the RSS Sources: *!search google* - **!get**- Retrieves Search By Index: *!get 25* + **!get** - Retrieves Search By Index: *!get 25* **!add** - Add a new RSS Source Feed dynamically: *!add http://www.engadget.com/rss.xml* **!update** - Updates all current RSS Feeds: *!update* - **!quote** - Selects a random quote: *!update* - **!exit** - Force kills bot: *!exit* + **!quote** - Selects a random quote: *!quote* + **!random** - Selects a random article: *!random* ` ); } diff --git a/commands/random.js b/commands/random.js new file mode 100644 index 0000000..2ed8033 --- /dev/null +++ b/commands/random.js @@ -0,0 +1,16 @@ + +var libFlayer = require("../libFlayer.js"); + +module.exports = { + name: 'random', + description: 'Random', + async execute(message) { + message.reply( + `Selecting a random article...` + ); + var i = Math.floor(Math.random() * (max - min + 1) + min ); + var feedArray = libFlayer.getFeeds(); + message.reply(`Retrieving: [Link](${feedArray[i].link})`); + } +}; + diff --git a/feeds2.json b/feeds2.json new file mode 100644 index 0000000..eea50f5 --- /dev/null +++ b/feeds2.json @@ -0,0 +1,34 @@ +[ + { + "title": "CNN Top Stories", + "link": "http://rss.cnn.com/rss/cnn_topstories.rss" + }, + { + "title": "Reddit Front Page", + "link": "http://www.reddit.com/.rss" + }, + { + "title": "Arstechnica", + "link": "http://feeds.arstechnica.com/arstechnica/index" + }, + { + "title": "TechCrunchGadgets", + "link": "https://techcrunch.com/gadgets/feed/" + }, + { + "title": "BusinessInsider", + "link": "https://markets.businessinsider.com/rss/news" + }, + { + "title": "TheGuardian", + "link": "https://www.theguardian.com/world/rss" + }, + { + "title": "Yahoo", + "link": "https://news.google.com/news/rss" + }, + { + "title": "CBSWorldNews", + "link": "https://www.cbsnews.com/latest/rss/world" + } +] \ No newline at end of file diff --git a/libFlayer.js b/libFlayer.js index fe9e887..05f77e9 100644 --- a/libFlayer.js +++ b/libFlayer.js @@ -1,8 +1,9 @@ let Parser = require('rss-parser'); let parser = new Parser(); let feeds = require('./feeds.json'); - - +var jsonfile = require('jsonfile'); +var fs = require('fs'); +var file = ('./feeds.json'); let linkFlayerMap = []; const { quotes } = require('./quotes.json'); @@ -13,6 +14,7 @@ exports.addSource = function(title,source){ link: `${source}` } feeds.push(linkData); + } exports.sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); }) @@ -38,6 +40,18 @@ 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 () { return linkFlayerMap; } diff --git a/package-lock.json b/package-lock.json index 42a420d..25531cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,8 @@ "discord.js": "^12.5.1", "dotenv": "^10.0.0", "express": "^4.17.1", + "fs": "^0.0.1-security", + "jsonfile": "^6.1.0", "rss-parser": "^3.12.0" } }, @@ -308,6 +310,17 @@ "node": ">= 0.6" } }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "optional": true + }, "node_modules/http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -347,6 +360,17 @@ "node": ">= 0.10" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -619,6 +643,14 @@ "node": ">= 0.6" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -914,6 +946,17 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "optional": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -944,6 +987,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1142,6 +1194,11 @@ "mime-types": "~2.1.24" } }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 390fe24..f64da34 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ "discord.js": "^12.5.1", "dotenv": "^10.0.0", "express": "^4.17.1", + "fs": "^0.0.1-security", + "jsonfile": "^6.1.0", "rss-parser": "^3.12.0" }, "scripts": {