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