1st commit Discord Bot

This commit is contained in:
johnfacey
2021-03-18 13:16:42 -05:00
commit 9ce9e994dc
14 changed files with 375 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
node_modules/

18
commands/add.js Normal file
View File

@@ -0,0 +1,18 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'add',
description: 'Add RSS Source',
execute(message,args) {
if (args.length < 2) {
message.reply(`Please use in !get [number] format`);
return;
}
var command = args[0];
var param1 = args[1];
libFlayer.addSource(param1);
libFlayer.loadFeeds();
},
};

18
commands/get.js Normal file
View File

@@ -0,0 +1,18 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'get',
description: 'Get RSS Source Link',
execute(message, args) {
if (args.length < 1) {
message.reply(`Please use in !get [number] format`);
return;
}
var search = args[0];
var feedArray = libFlayer.getFeeds();
message.reply(`Retrieving: [Link](${feedArray[search].link})`);
}
};

9
commands/help.js Normal file
View File

@@ -0,0 +1,9 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'help',
description: 'Help',
execute(message) {
message.reply('For a list of available commands type !commands');
}
};

7
commands/ping.js Normal file
View File

@@ -0,0 +1,7 @@
module.exports = {
name: 'ping',
description: 'Ping!',
execute(message) {
message.channel.send('Pong.');
}
};

29
commands/search.js Normal file
View File

@@ -0,0 +1,29 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'search',
description: 'Search RSS Sources',
execute(message, args) {
if (args.length < 1) {
message.reply(`Missing arguments`);
return;
}
var search = args[0];
message.reply('Searching for: ' + search);
let i = 0;
var feedArray = libFlayer.getFeeds();
feedArray.forEach(linkFlay => {
if (linkFlay.title.toLowerCase().indexOf(search.toLowerCase()) > -1) {
console.log(linkFlay.title);
message.reply(`Use !get ${i} to view: ${linkFlay.title}`);
}
i++;
});
}
};

17
commands/sources.js Normal file
View File

@@ -0,0 +1,17 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'sources',
description: 'List RSS Sources',
execute(message, args) {
var command = args[0];
var search = args[1];
var sourceArray = libFlayer.getSources();
sourceArray.forEach(source => {
message.reply(`[${source.title}](${source.link})`);
});
}
};

14
commands/update.js Normal file
View File

@@ -0,0 +1,14 @@
var libFlayer = require("../libFlayer.js");
module.exports = {
name: 'update',
description: 'Get RSS Source Link',
execute(message, args) {
message.reply(`Updating Sources`);
libFlayer.loadFeeds();
feedArray = libFlayer.getFeeds();
message.reply(`Sources Updated`);
}
};

4
config.json Normal file
View File

@@ -0,0 +1,4 @@
{
"prefix": "!",
"token": ""
}

15
feeds.json Normal file
View File

@@ -0,0 +1,15 @@
[
{
"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"
}
]

39
index.js Normal file
View File

@@ -0,0 +1,39 @@
const fs = require('fs');
const { prefix, token } = require('./config.json');
const Discord = require('discord.js');
const client = new Discord.Client();
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
client.commands.set(command.name, command);
}
var libFlayer = require("./libFlayer.js");
let linkFlayerMap = [];
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (!client.commands.has(command)) return;
try {
client.commands.get(command).execute(message, args);
} catch (error) {
console.error(error);
message.reply('there was an error trying to execute that command!');
}
});
console.log("Link Flayer Bot Activating");
client.login(token);
libFlayer.loadFeeds();

48
libFlayer.js Normal file
View File

@@ -0,0 +1,48 @@
let Parser = require('rss-parser');
let parser = new Parser();
let feeds = require('./feeds.json');
let linkFlayerMap = [];
exports.addSource = function(source){
var linkData = {
title: `${source}`,
link: `${source}`
}
feeds.push(linkData);
}
exports.loadFeeds = function() {
linkFlayerMap = [];
feeds.forEach(feedBlock => {
(async () => {
const feed = parser.parseURL(feedBlock.link, function(err, feed) {
if (err) throw err;
console.log(feed.title);
feed.items.forEach(item => {
var linkData = {
title: `${unescape(item.title)}`,
link: `${unescape(item.link)}`
}
linkFlayerMap.push(linkData);
});
})
})().then();
});
}
exports.getFeeds = function () {
return linkFlayerMap;
}
exports.getSources = function () {
return feeds;
}

140
package-lock.json generated Normal file
View File

@@ -0,0 +1,140 @@
{
"name": "discord-bot",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@discordjs/collection": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz",
"integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ=="
},
"@discordjs/form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
"integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"requires": {
"event-target-shim": "^5.0.0"
}
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"discord.js": {
"version": "12.5.1",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.1.tgz",
"integrity": "sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==",
"requires": {
"@discordjs/collection": "^0.1.6",
"@discordjs/form-data": "^3.0.1",
"abort-controller": "^3.0.0",
"node-fetch": "^2.6.1",
"prism-media": "^1.2.2",
"setimmediate": "^1.0.5",
"tweetnacl": "^1.0.3",
"ws": "^7.3.1"
}
},
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
},
"event-target-shim": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
"mime-db": {
"version": "1.46.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
},
"mime-types": {
"version": "2.1.29",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
"requires": {
"mime-db": "1.46.0"
}
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"prism-media": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.8.tgz",
"integrity": "sha512-bJ8J9PKpUdG6GmtnlaPSi2cMdGDLsS9o4iOlOncJasku73uJucgcN9Yr7/jlENqfh7hoR6LDqPr17JEzp6srjg=="
},
"rss-parser": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.12.0.tgz",
"integrity": "sha512-aqD3E8iavcCdkhVxNDIdg1nkBI17jgqF+9OqPS1orwNaOgySdpvq6B+DoONLhzjzwV8mWg37sb60e4bmLK117A==",
"requires": {
"entities": "^2.0.3",
"xml2js": "^0.4.19"
}
},
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
"tweetnacl": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
"ws": {
"version": "7.4.4",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
"integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw=="
},
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
"integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
"integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
}
}
}

16
package.json Normal file
View File

@@ -0,0 +1,16 @@
{
"name": "discord-bot",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"discord.js": "^12.5.1",
"rss-parser": "^3.12.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}