moving to airtable design
This commit is contained in:
@@ -5,17 +5,23 @@ module.exports = {
|
|||||||
description: 'Add RSS Source',
|
description: 'Add RSS Source',
|
||||||
execute(message,args) {
|
execute(message,args) {
|
||||||
|
|
||||||
if (args.length < 2) {
|
if (args.length < 3) {
|
||||||
message.reply(`Please use in !add [title] [https://domain.com/feed.xml] format`);
|
message.reply(`Please use in !add [title] [https://domain.com/feed.xml] [category] format`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var title = args[0];
|
var title = args[0];
|
||||||
var link = args[1];
|
var link = args[1];
|
||||||
|
var category = args[2];
|
||||||
|
|
||||||
libFlayer.addSource(title,link);
|
var result = libFlayer.addSource(title,link,category);
|
||||||
message.reply(`Adding ${title} to the list of RSS sources`);
|
if (result) {
|
||||||
var sources = libFlayer.getSources();
|
message.reply(`Adding ${title} to the list of RSS sources`);
|
||||||
libFlayer.writeFeed(sources);
|
} else {
|
||||||
|
message.reply(`${title} already exists in the list of RSS sources`);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sources = libFlayer.getSources();
|
||||||
|
//libFlayer.getConfig();
|
||||||
libFlayer.loadFeeds();
|
libFlayer.loadFeeds();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ module.exports = {
|
|||||||
name: 'update',
|
name: 'update',
|
||||||
description: 'Get RSS Source Link',
|
description: 'Get RSS Source Link',
|
||||||
execute(message, args) {
|
execute(message, args) {
|
||||||
|
|
||||||
message.reply(`Updating Sources`);
|
message.reply(`Updating Sources`);
|
||||||
|
libFlayer.getConfig();
|
||||||
|
message.reply(`Loading Feeds from Sources`);
|
||||||
libFlayer.loadFeeds();
|
libFlayer.loadFeeds();
|
||||||
feedArray = libFlayer.getFeeds();
|
feedArray = libFlayer.getFeeds();
|
||||||
message.reply(`Sources Updated`);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
3
index.js
3
index.js
@@ -2,6 +2,7 @@ const fs = require('fs');
|
|||||||
const { prefix } = require('./config.json');
|
const { prefix } = require('./config.json');
|
||||||
require('dotenv').config();
|
require('dotenv').config();
|
||||||
token = process.env.TOKEN;
|
token = process.env.TOKEN;
|
||||||
|
|
||||||
const { quotes } = require('./quotes.json');
|
const { quotes } = require('./quotes.json');
|
||||||
const Discord = require('discord.js');
|
const Discord = require('discord.js');
|
||||||
const client = new Discord.Client();
|
const client = new Discord.Client();
|
||||||
@@ -30,7 +31,7 @@ server.all("/",(req, res) => {
|
|||||||
function keepAlive() {
|
function keepAlive() {
|
||||||
server.listen(PORT, () => {
|
server.listen(PORT, () => {
|
||||||
console.log("Keep Alive Server Running");
|
console.log("Keep Alive Server Running");
|
||||||
|
libFlayer.getConfig();
|
||||||
libFlayer.loadFeeds();
|
libFlayer.loadFeeds();
|
||||||
libFlayer.feedArray = libFlayer.getFeeds();
|
libFlayer.feedArray = libFlayer.getFeeds();
|
||||||
})
|
})
|
||||||
|
|||||||
117
libFlayer.js
117
libFlayer.js
@@ -1,32 +1,84 @@
|
|||||||
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();
|
||||||
let feeds = require('./feeds.json');
|
|
||||||
|
var feeds = [];
|
||||||
var jsonfile = require('jsonfile');
|
var jsonfile = require('jsonfile');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var file = ('./feeds.json');
|
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 linkFlayerMap = [];
|
||||||
let answerData = {
|
let answerData = {
|
||||||
text: ``,
|
text: ``,
|
||||||
source: ``
|
source: ``
|
||||||
}
|
}
|
||||||
|
|
||||||
const { quotes } = require('./quotes.json');
|
const { quotes } = require('./quotes.json');
|
||||||
|
|
||||||
exports.addSource = function(title,source){
|
exports.addSource = function(title,link,category){
|
||||||
var linkData = {
|
|
||||||
title: `${title}`,
|
|
||||||
link: `${source}`
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<feeds.length; i++){
|
for (i=0; i<feeds.length; i++){
|
||||||
if (feeds[i].link == source){
|
if (feeds[i].link == link){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
feeds.push(linkData);
|
|
||||||
|
base(userTable).create([
|
||||||
|
{
|
||||||
|
"fields": {
|
||||||
|
"title": title,
|
||||||
|
"link": link,
|
||||||
|
"category": category
|
||||||
|
}
|
||||||
|
}
|
||||||
|
], function(err, record) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(record.getId());
|
||||||
|
|
||||||
|
var linkData = {
|
||||||
|
title: `${title}`,
|
||||||
|
link: `${link}`,
|
||||||
|
category: `${category}`,
|
||||||
|
id: record.getId()
|
||||||
|
}
|
||||||
|
|
||||||
|
feeds.push(linkData);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exports.deleteSource = function(title) {
|
||||||
|
var deleteRecord = "";
|
||||||
|
for (i=0; i<feeds.length; i++){
|
||||||
|
if (feeds[i].title == title){
|
||||||
|
deleteRecord = feeds[i].id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
base(userTable).destroy(deleteRecord, function(err, deletedRecord) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(deletedRecord.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
exports.sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); })
|
exports.sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); })
|
||||||
|
|
||||||
exports.loadFeeds = function() {
|
exports.loadFeeds = function() {
|
||||||
@@ -39,9 +91,10 @@ exports.loadFeeds = function() {
|
|||||||
feed.items.forEach(item => {
|
feed.items.forEach(item => {
|
||||||
|
|
||||||
var linkData = {
|
var linkData = {
|
||||||
title: `${unescape(item.title)}`,
|
title: `${item.title}`,
|
||||||
link: `${unescape(item.link)}`,
|
link: `${item.link}`,
|
||||||
category: `${unescape(feedBlock.category)}`
|
category: `${feedBlock.category}`,
|
||||||
|
id: record.getId()
|
||||||
}
|
}
|
||||||
linkFlayerMap.push(linkData);
|
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) {
|
exports.getFeeds = function (feedType) {
|
||||||
var linkFlayerFilteredMap = [];
|
var linkFlayerFilteredMap = [];
|
||||||
if (feedType == null || feedType == undefined || feedType == "") {
|
if (feedType == null || feedType == undefined || feedType == "") {
|
||||||
@@ -86,6 +127,32 @@ exports.getQuotes = function () {
|
|||||||
return quotes;
|
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) {
|
exports.getAnswer = async function (question) {
|
||||||
|
|
||||||
var answerURL = `https://api.duckduckgo.com/?q=${question}&format=json&pretty=1`;
|
var answerURL = `https://api.duckduckgo.com/?q=${question}&format=json&pretty=1`;
|
||||||
@@ -112,4 +179,6 @@ exports.getAnswer = async function (question) {
|
|||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
return answerData;
|
return answerData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.getConfig();
|
||||||
58
package-lock.json
generated
58
package-lock.json
generated
@@ -9,6 +9,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"airtable": "^0.11.1",
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
"discord.js": "^12.5.1",
|
"discord.js": "^12.5.1",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
@@ -36,6 +37,11 @@
|
|||||||
"node": ">= 6"
|
"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": {
|
"node_modules/abort-controller": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||||
@@ -47,6 +53,11 @@
|
|||||||
"node": ">=6.5"
|
"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": {
|
"node_modules/accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||||
@@ -59,6 +70,21 @@
|
|||||||
"node": ">= 0.6"
|
"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": {
|
"node_modules/array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
@@ -399,6 +425,11 @@
|
|||||||
"graceful-fs": "^4.1.6"
|
"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": {
|
"node_modules/media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
@@ -760,6 +791,11 @@
|
|||||||
"mime-types": "^2.1.12"
|
"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": {
|
"abort-controller": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
||||||
@@ -768,6 +804,11 @@
|
|||||||
"event-target-shim": "^5.0.0"
|
"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": {
|
"accepts": {
|
||||||
"version": "1.3.7",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
|
||||||
@@ -777,6 +818,18 @@
|
|||||||
"negotiator": "0.6.2"
|
"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": {
|
"array-flatten": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
@@ -1037,6 +1090,11 @@
|
|||||||
"universalify": "^2.0.0"
|
"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": {
|
"media-typer": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"description": "Discord RSS News Bot",
|
"description": "Discord RSS News Bot",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"airtable": "^0.11.1",
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
"discord.js": "^12.5.1",
|
"discord.js": "^12.5.1",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user