1st commit Discord Bot
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
node_modules/
|
||||
18
commands/add.js
Normal file
18
commands/add.js
Normal 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
18
commands/get.js
Normal 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
9
commands/help.js
Normal 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
7
commands/ping.js
Normal file
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
name: 'ping',
|
||||
description: 'Ping!',
|
||||
execute(message) {
|
||||
message.channel.send('Pong.');
|
||||
}
|
||||
};
|
||||
29
commands/search.js
Normal file
29
commands/search.js
Normal 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
17
commands/sources.js
Normal 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
14
commands/update.js
Normal 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
4
config.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"prefix": "!",
|
||||
"token": ""
|
||||
}
|
||||
15
feeds.json
Normal file
15
feeds.json
Normal 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
39
index.js
Normal 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
48
libFlayer.js
Normal 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
140
package-lock.json
generated
Normal 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
16
package.json
Normal 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"
|
||||
}
|
||||
Reference in New Issue
Block a user