|
@@ -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) {
|