Refactored link detection and standardisation

This commit is contained in:
benji7425 2016-12-30 14:54:10 +00:00
parent 5d1d43fd56
commit 463b177a2e
1 changed files with 21 additions and 12 deletions

View File

@ -57,12 +57,13 @@ var DiscordClient = {
}); });
}, },
onMessage: function (user, userID, channelID, message) { onMessage: function (user, userID, channelID, message) {
//check if the message contains a link, in the right channel, and not the latest link from the rss feed //check if the message is in the right channel, contains a link, and is not the latest link from the rss feed
if (channelID === Config.channelID && Links.regExp.test(message) && (message !== Links.latestFromFeed)) { if (channelID === Config.channelID && Links.messageContainsLink(message) && (message !== Links.latestFromFeed)) {
Log.event("Detected posted link in this message: " + message, "Discord.io"); Log.event("Detected posted link in this message: " + message, "Discord.io");
//detect the url inside the string, and cache it
//extract the url from the string, and cache it
Uri.withinString(message, function (url) { Uri.withinString(message, function (url) {
Links.cache(url); Links.cache(Links.standardise(link));
return url; return url;
}); });
} }
@ -119,14 +120,20 @@ var YouTube = {
}; };
var Links = { var Links = {
regExp: new RegExp(["http", "https", "www"].join("|")), standardise: function (link) {
//cheaty way to get around http and https not matching
return link.replace("https://", "http://");
},
messageContainsLink: function (message) {
var messageLower = message.toLowerCase();
return messageLower.includes("http") || messageLower.includes("https") || messageLower.includes("www");
},
cached: [], cached: [],
latestFromFeed: "", latestFromFeed: "",
cache: function (link) { cache: function (link) {
//cheaty way to get around http and https not matching link = Links.standardise(link);
link = link.replace("https://", "http://");
if(Config.youtubeMode && link.includes(YouTube.url.full)){ if (Config.youtubeMode && link.includes(YouTube.url.full)) {
link = YouTube.url.convertFullToShare(link); link = YouTube.url.convertFullToShare(link);
} }
@ -140,7 +147,9 @@ var Links = {
Links.cached.shift(); Links.cached.shift();
}, },
checkCache: function (link) { checkCache: function (link) {
if (Config.youtubeMode && link.includes(link)) { link = Links.standardise(link);
if (Config.youtubeMode && link.includes(YouTube.url.full)) {
return Links.cached.includes(YouTube.url.convertFullToShare(link)); return Links.cached.includes(YouTube.url.convertFullToShare(link));
} }
return Links.cached.includes(link); return Links.cached.includes(link);
@ -149,7 +158,7 @@ var Links = {
if (err) Log.error("FEED ERROR: Error reading RSS feed.", err); if (err) Log.error("FEED ERROR: Error reading RSS feed.", err);
else { else {
//get the latest link and check if it has already been posted and cached //get the latest link and check if it has already been posted and cached
var latestLink = articles[0].link.replace("https", "http"); var latestLink = Links.standardise(articles[0].link);
//check whether the latest link out the feed exists in our cache //check whether the latest link out the feed exists in our cache
if (!Links.checkCache(latestLink)) { if (!Links.checkCache(latestLink)) {
@ -194,13 +203,13 @@ var Feed = {
checkAndPost: function () { checkAndPost: function () {
//check that we have an internet connection (well not exactly - check that we have a connection to the host of the feedUrl) //check that we have an internet connection (well not exactly - check that we have a connection to the host of the feedUrl)
Dns.resolve(Feed.urlObj.host, function (err) { Dns.resolve(Feed.urlObj.host, function (err) {
if (err) Log.error("CONNECTION ERROR: Cannot resolve host (you are probably not connected to the internet)", err); if (err) Log.error("CONNECTION ERROR: Cannot resolve host.", err);
else FeedRead(Config.feedUrl, Links.validateAndPost); else FeedRead(Config.feedUrl, Links.validateAndPost);
}); });
} }
}; };
//IIFE to kickstart the bot when the app loads //IIFE to kickstart the bot when the app loads
(function(){ (function () {
DiscordClient.startup(); DiscordClient.startup();
})(); })();