Browse Source

Hash turndowned text directly

ghorsington 5 years ago
parent
commit
b358fda83c
1 changed files with 32 additions and 24 deletions
  1. 32 24
      commands/rss_checker.js

+ 32 - 24
commands/rss_checker.js

@@ -38,9 +38,9 @@ async function checkFeeds() {
         let feed = await parser.parseURL(feedEntry.url);
         if(feed.items.length == 0)
             continue;
-        let printableItems = feed.items.filter(i => i.isoDate > feedEntry.lastUpdate).sort((a, b) => a.isoDate.localeCompare(b.isoDate));
+        let printableItems = feed.items.sort((a, b) => a.isoDate.localeCompare(b.isoDate));
         if(printableItems.length > 0) {
-            printableItems.forEach(item => {
+            for(let item of printableItems) {
                 let itemID = getThreadId(item.guid);
 
                 let contents = item[feedEntry.contentElement];
@@ -50,30 +50,32 @@ async function checkFeeds() {
                     link: item.link,
                     creator: item.creator,
                     contents: contents,
-                    hash: sha1(contents),
+                    hash: null,
                     messageId: null,
                     verifyMessageId: null
                 };
 
+                itemObj.contents = newsToString(itemObj);
+                itemObj.hash = sha1(itemObj.contents);
+
                 if(oldNews.has(itemObj.id).value()){
                     let data = oldNews.get(itemObj.id).value();
                     // Old type, don't care
                     if(data === true)
-                        return;
+                        continue;
 
                     // Add message ID to mark for edit
                     if(data.hash != itemObj.hash)
                         itemObj.messageId = data.messageId;
                     else 
-                        return;
+                        continue;
                 }
 
                 if(!shouldVerify())
-                    sendNews(itemObj);
+                    await sendNews(itemObj);
                 else
-                    addVerifyMessage(itemObj);
-
-            });
+                    await addVerifyMessage(itemObj);
+            }
             let lastUpdateDate = printableItems[printableItems.length - 1].isoDate;
             console.log(`Setting last update marker on ${feedEntry.url} to ${lastUpdateDate}`);
             db.get("rssFeeds").find({ url: feedEntry.url}).assign({lastUpdate: lastUpdateDate}).write();
@@ -84,7 +86,7 @@ async function checkFeeds() {
 function initPendingReactors() {
     let verifyChannel = client.channels.get(verifyChannelID);
     db.get("newsCache").forOwn(async i => {
-        let m = await verifyChannel.fetchMessage(i.verifyMessageId);
+        let m = await tryFetchMessage(verifyChannel, i.verifyChannelID);
         let collector = m.createReactionCollector(isVerifyReaction, { maxEmojis: 1 });
         collector.on("collect", collectReaction)
         reactionCollectors[m.id] = collector;
@@ -95,6 +97,7 @@ function initPendingReactors() {
 async function addVerifyMessage(item) {
     let verifyChannel = client.channels.get(verifyChannelID);
     let cache = db.get("newsCache");
+    let oldNews = db.get("postedNewsGuids");
     let postedNews = db.get("postedNewsGuids");
     let process = "🆕 ADD";
 
@@ -103,7 +106,7 @@ async function addVerifyMessage(item) {
 
     if(cache.has(item.id).value()) {
         let oldItem = cache.get(item.id).value();
-        let oldMessage = await verifyChannel.fetchMessage(oldItem.verifyMessageId);
+        let oldMessage = await tryFetchMessage(verifyChannel, oldItem.verifyMessageId);
         if(oldMessage)
             await oldMessage.delete();
     }
@@ -111,7 +114,7 @@ async function addVerifyMessage(item) {
     let newMessage = await verifyChannel.send(`[${process}]
 Post ID: **${item.id}**
 
-${newsToString(item)}
+${item.contents}
         
 React with ✅ (approve) or ❌ (deny).`
 );
@@ -126,11 +129,15 @@ React with ✅ (approve) or ❌ (deny).`
     verifyMessageIdToPostId[newMessage.id] = item.id;
     item.verifyMessageId = newMessage.id;
     cache.set(item.id, item).write();
+
+    oldNews.set(item.id, {
+        hash: item.hash,
+        messageId: null
+    }).write();
 }
 
 function collectReaction(reaction, collector) {
     let cache = db.get("newsCache");
-    let oldNews = db.get("postedNewsGuids");
     let m = reaction.message;
     collector.stop();
     delete reactionCollectors[m.id];
@@ -141,11 +148,6 @@ function collectReaction(reaction, collector) {
 
     if(reaction.emoji.name == "✅")
         sendNews(item);
-    else
-        oldNews.set(item.id, {
-            hash: item.hash,
-            messageId: null
-        }).write();
 }
 
 async function sendNews(item) {
@@ -163,24 +165,30 @@ function isVerifyReaction(reaction, user) {
     return (reaction.emoji.name == "✅" || reaction.emoji.name == "❌") && !user.bot;
 }
 
+async function tryFetchMessage(channel, messageId) {
+    try {
+        return await channel.fetchMessage(messageId);
+    }catch(error){
+        return null;
+    }
+}
+
 function shouldVerify() {
     return verifyChannelID != "";
 }
 
 async function postNewsItem(channel, item) {
-    let newsText = newsToString(item);
-
     let ch = client.channels.get(channel);
 
     if(item.messageId) {
-        let message = await ch.fetchMessage(item.messageId);
+        let message = await tryFetchMessage(ch, item.messageId);
         if(message)
-            return await message.edit(newsText);
+            return await message.edit(item.contents);
         else 
-            return await ch.send(newsText);
+            return await ch.send(item.contents);
     } 
     else 
-        return await ch.send(newsText);
+        return await ch.send(item.contents);
 }
 
 function newsToString(item) {