First commit
This commit is contained in:
87
src/index.ts
Normal file
87
src/index.ts
Normal file
@ -0,0 +1,87 @@
|
||||
require('https').globalAgent.options.ca = require('ssl-root-cas/latest').create();
|
||||
require('ssl-root-cas').inject();
|
||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
||||
|
||||
import * as dotenv from "dotenv";
|
||||
dotenv.config();
|
||||
import rss from "rss-parser";
|
||||
const parser = new rss();
|
||||
|
||||
import fetch from "node-fetch";
|
||||
import { createHash } from "crypto";
|
||||
import low from "lowdb";
|
||||
import FileSync from "lowdb/adapters/FileSync";
|
||||
|
||||
const adapter = new FileSync<{ test }>("db.json");
|
||||
const db = low(adapter);
|
||||
db.defaults({});
|
||||
import { createTransport } from "nodemailer";
|
||||
|
||||
let transporter = createTransport({
|
||||
host: process.env.MAIL_SERVER,
|
||||
port: 587,
|
||||
secure: false, // true for 465, false for other ports
|
||||
auth: {
|
||||
user: process.env.MAIL_USERNAME,
|
||||
pass: process.env.MAIL_PASSWORD
|
||||
}
|
||||
});
|
||||
|
||||
interface Feed {
|
||||
title: string;
|
||||
language: string;
|
||||
description: string;
|
||||
copyright: string;
|
||||
|
||||
items: FeedItem[];
|
||||
}
|
||||
|
||||
interface FeedItem {
|
||||
title: string;
|
||||
link: string;
|
||||
content: string,
|
||||
contentSnippet: string;
|
||||
guid: string;
|
||||
}
|
||||
|
||||
function calculateHash(item: FeedItem) {
|
||||
let hash = createHash("sha512");
|
||||
hash.update(item.content + item.guid + item.title);
|
||||
return hash.digest("hex");
|
||||
}
|
||||
|
||||
async function check() {
|
||||
try {
|
||||
let data = await fetch(process.env.FEEd).then(res => res.text());
|
||||
console.log("Received Data");
|
||||
let feed: Feed = await parser.parseString(data).catch(console.error);
|
||||
//Check for new entries
|
||||
let items = feed.items.filter(item => {
|
||||
return db.get(calculateHash(item)).value() !== true;
|
||||
})
|
||||
for (let item of items) {
|
||||
await sendFeed(feed, item).catch(console.error)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function sendFeed(feed: Feed, item: FeedItem) {
|
||||
console.log("Sending Mail!")
|
||||
let mailOptions = {
|
||||
from: process.env.MAIL_SENDER,
|
||||
to: process.env.MAIL_RECEIVER,
|
||||
subject: '[OSPLUS_UPDATE] ' + unescape(item.title),
|
||||
text: item.contentSnippet,
|
||||
html: item.content
|
||||
};
|
||||
|
||||
let info = await transporter.sendMail(mailOptions);
|
||||
console.log('Message sent: %s', info.messageId);
|
||||
db.set(calculateHash(item), true).write();
|
||||
}
|
||||
|
||||
setInterval(() => check(), 1000 * 60 * 60 * 12);
|
||||
check();
|
Reference in New Issue
Block a user