Integrate rss bot with camo

This commit is contained in:
benji7425 2017-12-07 01:35:00 +00:00
parent 72b7db32ab
commit 52e3399b75
9 changed files with 895 additions and 76 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
update.sh
guilds.json
guilds-data/*
token.json*
log

View File

@ -2,9 +2,8 @@ const Core = require("../../discord-bot-core");
const GetUrls = require("get-urls");
const FeedRead = require("feed-read");
const FeedData = require("../models/feed-data.js");
const GuildData = require("../models/guild-data.js");
// @ts-ignore
const Config = require("../config.json");
const ShortID = require("shortid");
module.exports = new Core.Command({
name: "add-feed",
@ -22,7 +21,8 @@ function invoke({ message, params, guildData, client }) {
return Promise.reject("Please provide both a channel and an RSS feed URL. You can optionally @mention a role also.");
const role = message.mentions.roles.first(),
feedData = new FeedData({
feedData = FeedData.create({
feedID: ShortID.generate(),
url: feedUrl,
channelID: channel.id,
roleID: role ? role.id : null,
@ -30,7 +30,7 @@ function invoke({ message, params, guildData, client }) {
});
return new Promise((resolve, reject) => {
FeedRead(feedUrl, (err, articles) => {
FeedRead(feedUrl, err => {
if (err)
return reject(`Unable to add the feed due to the following error:\n${err.message}`);

View File

@ -9,7 +9,7 @@ module.exports = new Core.Command({
});
function invoke({ message, params, guildData, client }) {
const idx = guildData.feeds.findIndex(feed => feed.id === params[0]);
const idx = guildData.feeds.findIndex(feed => feed.feedID === params[0]);
if (!Number.isInteger(idx))
return Promise.reject("Can't find feed with id " + params[0]);

View File

@ -19,5 +19,5 @@ function invoke({ message, params, guildData, client }) {
let responseStr = guildData.feeds.map(f => f.toString()).slice(startIdx, endIdx).join("\n");
if (guildData.feeds.length > endIdx)
responseStr += `Use *view-feeds ${startIdx + 2}* to view more`;
return Promise.resolve(responseStr);
return Promise.resolve(responseStr || "No feeds configured");
}

View File

@ -14,61 +14,38 @@ client.on("beforeLogin", () => {
});
client.on("ready", () => {
doUpgradeJSON();
parseLinksInGuilds()
.then(() => checkFeedsInGuilds());
});
client.on("message", message => {
if (message.channel.type !== "text" || !message.member)
return;
client.on("message", message => {
if (message.channel.type !== "text" || !message.member)
return;
client.guildDataModel.findOne({ guildID: message.guild.id })
.then(guildData => {
if (guildData)
guildData.feeds.forEach(feedData => {
if (message.channel.id === feedData.channelID)
feedData.cachedLinks.push(...GetUrls(message.content));
});
});
const guildData = client.guildsData[message.guild.id];
if (guildData)
guildData.feeds.forEach(feedData => {
if (message.channel.id === feedData.channelID)
feedData.cachedLinks.push(...GetUrls(message.content));
});
});
});
client.bootstrap();
//INTERNAL FUNCTIONS//
function checkFeedsInGuilds() {
client.guilds.forEach(guild => {
const guildData = client.guildsData[guild.id];
if (guildData)
guildData.checkFeeds(guild);
});
client.guildDataModel.find().then(guildDatas =>
guildDatas.forEach(guildData =>
guildData.checkFeeds(client.guilds.get(guildData.guildID))));
}
function parseLinksInGuilds() {
const promises = [];
for (let guildId of client.guilds.keys()) {
const guildData = client.guildsData[guildId];
if (guildData)
promises.push(guildData.cachePastPostedLinks(client.guilds.get(guildId)));
}
client.guildDataModel.find().then(guildDatas =>
guildDatas.forEach(guildData => promises.push(guildData.cachePastPostedLinks(client.guilds.get(guildData.guildID)))));
return Promise.all(promises);
}
function doUpgradeJSON() {
Object.keys(client.guildsData).forEach(id => {
const guild = client.guilds.get(id);
if (!guild)
return;
client.guildsData[id].feeds.forEach(feed => {
if (feed.roleName) {
feed.roleID = client.guilds.get(id).roles.find(x => x.name.toLowerCase() === feed.roleName.toLowerCase()).id;
delete feed.roleName;
}
if (feed.channelName) {
feed.channelID = client.guilds.get(id).channels.find(x => x.name.toLowerCase() === feed.channelName.toLowerCase()).id;
delete feed.channelName;
}
});
});
}

View File

@ -1,36 +1,33 @@
const DiscordUtil = require("../../discord-bot-core").util;
// @ts-ignore
const Camo = require("camo");
const Config = require("../config.json");
const Dns = require("dns"); //for host resolution checking
const Url = require("url"); //for url parsing
const FeedRead = require("feed-read"); //for extracing new links from RSS feeds
const GetUrls = require("get-urls"); //for extracting urls from messages
const ShortID = require("shortid"); //to provide ids for each feed, allowing guilds to remove them
module.exports = class FeedData {
constructor({ id = null, url, channelID, roleID, cachedLinks = null, maxCacheSize, roleName = undefined, channelName = undefined }) {
this.id = id || ShortID.generate();
this.url = url;
this.channelID = channelID;
this.roleID = roleID;
this.cachedLinks = cachedLinks || [];
this.maxCacheSize = maxCacheSize || 10;
module.exports = class FeedData extends Camo.EmbeddedDocument {
constructor() {
super();
//these two are actually deprecated, but need to be here for compatibility with old data files to be upgraded
this.roleName = roleName;
this.channelName = channelName;
this.feedID = String;
this.url = String;
this.channelID = String;
this.roleID = String;
this.cachedLinks = [String];
this.maxCacheSize = Number;
}
this.cachedLinks.push = (...elements) => {
Array.prototype.push.apply(
this.cachedLinks,
elements
.map(el => normaliseUrl(el))
.filter(el => !this.cachedLinks.includes(el))
);
cache(...elements) {
Array.prototype.push.apply(
this.cachedLinks,
elements
.map(el => normaliseUrl(el))
.filter(el => !this.cachedLinks.includes(el))
);
//seeing as new links come in at the end of the array, we need to remove the old links from the beginning
this.cachedLinks.splice(0, this.cachedLinks.length - this.maxCacheSize);
};
//seeing as new links come in at the end of the array, we need to remove the old links from the beginning
this.cachedLinks.splice(0, this.cachedLinks.length - this.maxCacheSize);
}
updatePastPostedLinks(guild) {

View File

@ -3,9 +3,10 @@ const Core = require("../../discord-bot-core");
const FeedData = require("./feed-data.js");
module.exports = class GuildData extends Core.BaseGuildData {
constructor({ id, feeds = [] }) {
super(id);
this.feeds = feeds.map(feed => new FeedData(feed));
constructor() {
super();
this.feeds = [FeedData];
}
cachePastPostedLinks(guild) {

843
package-lock.json generated Normal file
View File

@ -0,0 +1,843 @@
{
"name": "discord-bot-rss-feed",
"version": "3.1.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"acorn": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
"integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=",
"optional": true
},
"ajv": {
"version": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz",
"integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=",
"requires": {
"co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"fast-deep-equal": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
"json-schema-traverse": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"
}
},
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"optional": true
},
"asn1": {
"version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
},
"assert-plus": {
"version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"ast-types": {
"version": "0.8.15",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
"integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI=",
"optional": true
},
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
"optional": true
},
"async-limiter": {
"version": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
"integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg="
},
"asynckit": {
"version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"base62": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=",
"optional": true
},
"bcrypt-pbkdf": {
"version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"optional": true,
"requires": {
"tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
},
"dependencies": {
"tweetnacl": {
"version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"optional": true
}
}
},
"binary-search-tree": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz",
"integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=",
"optional": true,
"requires": {
"underscore": "1.4.4"
},
"dependencies": {
"underscore": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
"optional": true
}
}
},
"boom": {
"version": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"requires": {
"hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz"
}
},
"bson": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/bson/-/bson-0.4.23.tgz",
"integrity": "sha1-5louPHUH/63kEJvHV1p25Q+NqRU=",
"optional": true
},
"camo": {
"version": "git+https://github.com/scottwrobinson/camo.git#3acde553b37ec7d2161a20424fa1975243f96179",
"requires": {
"depd": "1.1.0",
"lodash": "3.9.3",
"mongodb": "2.0.42",
"nedb": "1.8.0"
}
},
"caseless": {
"version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"co": {
"version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
},
"combined-stream": {
"version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"requires": {
"delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
}
},
"core-util-is": {
"version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cryptiles": {
"version": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"requires": {
"boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz"
},
"dependencies": {
"boom": {
"version": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=",
"requires": {
"hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz"
}
}
}
},
"dashdash": {
"version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
}
},
"delayed-stream": {
"version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"depd": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
"integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
},
"discord.js": {
"version": "https://registry.npmjs.org/discord.js/-/discord.js-11.2.0.tgz",
"integrity": "sha1-qt3iuGtpuQUWa4O8Sc/ENSOOGus=",
"requires": {
"long": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
"prism-media": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.1.tgz",
"snekfetch": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.3.0.tgz",
"tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz",
"ws": "https://registry.npmjs.org/ws/-/ws-3.2.0.tgz"
}
},
"ecc-jsbn": {
"version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"optional": true,
"requires": {
"jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
}
},
"es3ify": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
"integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E=",
"optional": true,
"requires": {
"esprima-fb": "3001.1.0-dev-harmony-fb",
"jstransform": "3.0.0",
"through": "2.3.8"
}
},
"es6-promise": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.1.1.tgz",
"integrity": "sha1-A+jzxyl5KOVHjWqx0GQyUVB73t0=",
"optional": true
},
"esmangle-evaluator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
"integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY=",
"optional": true
},
"esprima-fb": {
"version": "3001.1.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
"integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
},
"extend": {
"version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extsprintf": {
"version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"falafel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"optional": true,
"requires": {
"acorn": "1.2.2",
"foreach": "2.0.5",
"isarray": "0.0.1",
"object-keys": "1.0.11"
}
},
"fast-deep-equal": {
"version": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
"integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
},
"feed-read": {
"version": "https://registry.npmjs.org/feed-read/-/feed-read-0.0.1.tgz",
"integrity": "sha1-LaOTTX8Vu9vldNysVAOCHkFhY4s=",
"requires": {
"request": "https://registry.npmjs.org/request/-/request-2.82.0.tgz",
"sax": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
"underscore": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"
}
},
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
"optional": true
},
"forever-agent": {
"version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
"integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
"requires": {
"asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz"
}
},
"get-urls": {
"version": "https://registry.npmjs.org/get-urls/-/get-urls-7.0.0.tgz",
"integrity": "sha1-xICtx9TGzFy7ZLUxgj3GO5nsHlo=",
"requires": {
"normalize-url": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
"url-regex": "https://registry.npmjs.org/url-regex/-/url-regex-4.1.1.tgz"
}
},
"getpass": {
"version": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
}
},
"graceful-fs": {
"version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"optional": true
},
"har-schema": {
"version": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"requires": {
"ajv": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz",
"har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
}
},
"hawk": {
"version": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=",
"requires": {
"boom": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"sntp": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz"
}
},
"hoek": {
"version": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0="
},
"http-signature": {
"version": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz"
}
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"optional": true
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"inline-process-browser": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
"integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=",
"optional": true,
"requires": {
"falafel": "1.2.0",
"through2": "0.6.5"
}
},
"ip-regex": {
"version": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
"integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0="
},
"is-plain-obj": {
"version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
},
"is-typedarray": {
"version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"isstream": {
"version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
"json-schema": {
"version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
},
"json-stable-stringify": {
"version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
"integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"requires": {
"jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
}
},
"json-stringify-safe": {
"version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonfile": {
"version": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
"integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
"requires": {
"graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz"
}
},
"jsonify": {
"version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
},
"jsprim": {
"version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"verror": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
}
},
"jstransform": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
"integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=",
"optional": true,
"requires": {
"base62": "0.1.1",
"esprima-fb": "3001.1.0-dev-harmony-fb",
"source-map": "0.1.31"
}
},
"kerberos": {
"version": "0.0.23",
"resolved": "https://registry.npmjs.org/kerberos/-/kerberos-0.0.23.tgz",
"integrity": "sha1-aqRq/bl4bGkZOIzFtAjwEscfD9E=",
"optional": true,
"requires": {
"nan": "2.5.1"
}
},
"lie": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
"integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o=",
"optional": true,
"requires": {
"es3ify": "0.1.4",
"immediate": "3.0.6",
"inline-process-browser": "1.0.0",
"unreachable-branch-transform": "0.3.0"
}
},
"localforage": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.5.5.tgz",
"integrity": "sha1-VfwcOoikf2f1+sbxIxsl/xNVZCM=",
"optional": true,
"requires": {
"lie": "3.0.2"
}
},
"lodash": {
"version": "3.9.3",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.9.3.tgz",
"integrity": "sha1-AVnoaDL+/8bWHYUrEqlTuZSWvTI="
},
"long": {
"version": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
"integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
},
"mime-db": {
"version": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
},
"mime-types": {
"version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
"requires": {
"mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"optional": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"mongodb": {
"version": "2.0.42",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.0.42.tgz",
"integrity": "sha1-G614E9ByXOLjvVQYDzH67dJNnlM=",
"optional": true,
"requires": {
"es6-promise": "2.1.1",
"mongodb-core": "1.2.10",
"readable-stream": "1.0.31"
}
},
"mongodb-core": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-1.2.10.tgz",
"integrity": "sha1-7OFyAb05WmR/uY9Ivo+64Vvgr9k=",
"optional": true,
"requires": {
"bson": "0.4.23",
"kerberos": "0.0.23"
}
},
"nan": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.5.1.tgz",
"integrity": "sha1-1bAWkSUzJql6K77p5hxV2NYDUeI=",
"optional": true
},
"nedb": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz",
"integrity": "sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=",
"optional": true,
"requires": {
"async": "0.2.10",
"binary-search-tree": "0.2.5",
"localforage": "1.5.5",
"mkdirp": "0.5.1",
"underscore": "1.4.4"
},
"dependencies": {
"underscore": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=",
"optional": true
}
}
},
"normalize-url": {
"version": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
"integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
"requires": {
"object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"prepend-http": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"query-string": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
"sort-keys": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz"
}
},
"oauth-sign": {
"version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
},
"object-assign": {
"version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"optional": true
},
"performance-now": {
"version": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"prepend-http": {
"version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
},
"prism-media": {
"version": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.1.tgz",
"integrity": "sha1-o0JcnKvVDRxsAuVDlBoRiVZnvRA="
},
"private": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"optional": true
},
"punycode": {
"version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
"qs": {
"version": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg="
},
"query-string": {
"version": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
"integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
"requires": {
"object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"strict-uri-encode": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz"
}
},
"readable-stream": {
"version": "1.0.31",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz",
"integrity": "sha1-jyUC4LyeOw2huUUgqrtOJgPsr64=",
"optional": true,
"requires": {
"core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
},
"recast": {
"version": "0.10.43",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
"integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
"optional": true,
"requires": {
"ast-types": "0.8.15",
"esprima-fb": "15001.1001.0-dev-harmony-fb",
"private": "0.1.8",
"source-map": "0.5.7"
},
"dependencies": {
"esprima-fb": {
"version": "15001.1001.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
"integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=",
"optional": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"optional": true
}
}
},
"request": {
"version": "https://registry.npmjs.org/request/-/request-2.82.0.tgz",
"integrity": "sha1-K6ipLNesRWYOorEKU65nzSR1Fuo=",
"requires": {
"aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
"caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"form-data": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
"har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"hawk": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
"oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
"safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
"tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"uuid": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz"
}
},
"safe-buffer": {
"version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
},
"sax": {
"version": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
"integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0="
},
"shortid": {
"version": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz",
"integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE="
},
"snekfetch": {
"version": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.3.0.tgz",
"integrity": "sha1-l6oNedWSDxjCbUyKf92+kSBa0Po="
},
"sntp": {
"version": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz",
"integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=",
"requires": {
"hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz"
}
},
"sort-keys": {
"version": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
"integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
"requires": {
"is-plain-obj": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz"
}
},
"source-map": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
"integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE=",
"optional": true,
"requires": {
"amdefine": "1.0.1"
}
},
"sshpk": {
"version": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
"integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
"requires": {
"asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
"dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
},
"dependencies": {
"tweetnacl": {
"version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"optional": true
}
}
},
"strict-uri-encode": {
"version": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"stringstream": {
"version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg="
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"optional": true
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
},
"dependencies": {
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"inherits": "2.0.3",
"isarray": "0.0.1",
"string_decoder": "0.10.31"
}
}
}
},
"tlds": {
"version": "https://registry.npmjs.org/tlds/-/tlds-1.196.0.tgz",
"integrity": "sha1-SddN29H53zAjizv+9N+Chitbu0g="
},
"tough-cookie": {
"version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
"integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
"requires": {
"punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
}
},
"tunnel-agent": {
"version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
}
},
"tweetnacl": {
"version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz",
"integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins="
},
"ultron": {
"version": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
"integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
},
"underscore": {
"version": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
"unreachable-branch-transform": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
"integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=",
"optional": true,
"requires": {
"esmangle-evaluator": "1.0.1",
"recast": "0.10.43",
"through2": "0.6.5"
}
},
"url-regex": {
"version": "https://registry.npmjs.org/url-regex/-/url-regex-4.1.1.tgz",
"integrity": "sha1-pWF7IuFeJtrFfOdMP1IIi83+yZU=",
"requires": {
"ip-regex": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
"tlds": "https://registry.npmjs.org/tlds/-/tlds-1.196.0.tgz"
}
},
"uuid": {
"version": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ="
},
"verror": {
"version": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
}
},
"ws": {
"version": "https://registry.npmjs.org/ws/-/ws-3.2.0.tgz",
"integrity": "sha1-1dPWsRr/cec/gI9AzGnVK7bUoYU=",
"requires": {
"async-limiter": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
"safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"ultron": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz"
}
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
}
}
}

View File

@ -6,6 +6,7 @@
"start": "node app/index.js token.json guilds.json --max-old-space-size=64 --name=rss-feed"
},
"dependencies": {
"camo": "git+https://github.com/scottwrobinson/camo.git",
"discord.js": "11.2.0",
"feed-read": "0.0.1",
"get-urls": "7.0.0",
@ -25,4 +26,4 @@
},
"homepage": "https://github.com/benji7425/discord-bot-rss-feed#readme",
"description": ""
}
}