first commit

This commit is contained in:
peertube
2020-12-09 21:19:58 +01:00
commit da6d35b2e7
17 changed files with 2442 additions and 0 deletions

54
services/discord.js Normal file
View File

@ -0,0 +1,54 @@
/*
SkeptCOM [Discord] | Pour envoyer des notifications sur un serveur Discord
exemple pour injecter depuis un routage :
routage.send({
author: "",
title: "",
url : "",
image: "",
desc: ""
})
*/
// REQUIRE, CONST, VARIABLES
const discordBot = require('../modules/discordBot')
const skeptIO = require('../modules/skeptIO')('discord')
function embed(conf, data) {
return {
embed: {
color: conf.color,
author: {name: data.author},
title: data.title,
url: data.url,
image: {url: data.image },
description: data.desc,
footer: conf.footer
}
}
}
function tinyEmbed(conf, data) {
return {
embed: {
color: conf.color,
author: {name: data.author},
title: data.title,
url: data.url,
thumbnail: {url: data.image},
description: data.desc,
footer: conf.footer
}
}
}
// INIT
skeptIO.receive( obj => {
console.log(` --> [Discord] message from [${obj.from}]`)
if (obj.conf.style === "msg") discordBot.send(obj.conf.channel, obj.data.desc)
if (obj.conf.style === "embed") discordBot.send(obj.conf.channel, embed(obj.conf, obj.data))
if (obj.conf.style === "tinyEmbed") discordBot.send(obj.conf.channel, tinyEmbed(obj.conf, obj.data))
})

35
services/logs.js Normal file
View File

@ -0,0 +1,35 @@
/*
SkeptCOM [logs] | on va log les choses, c'est mieux quand on a un problème ... 'fin, les gens bons le fond souvent ♥
*/
// REQUIRE, CONST, VARIABLES
const dateFormat = require('dateformat')
const fs = require('fs')
const fse = require('fs-extra')
const colors = require('colors')
const path = require('path')
const skepticonf = require('../conf/skepticom.json')
const skeptIO = require('../modules/skeptIO')('logs')
const logConf = {}
// INIT
if (!skepticonf.logs) return console.log(` [ERROR || LOGS] no configuration for logs.js in ./conf/skepticom.json`)
if (skepticonf.logs.path) {
logConf.path = path.resolve(skepticonf.logs.path)
} else {
logConf.path = path.resolve('./_logs')
}
fse.ensureDirSync(logConf.path)
skeptIO.receive( obj => {
let rtn = `[${dateFormat("yyyy-mm-dd HH:MM")}] ${obj.from.replace(skepticonf.pm2.prefix, '')}\n ${JSON.stringify(obj.data)}`
console.log(rtn.magenta)
fs.appendFile(logConf.path + '/' + dateFormat("yyyy-W") + '.log', rtn + '\n', 'utf8', function(err) {
if (err) return console.error(err)
})
})
console.log(` --- [LOGS] Load`)

87
services/rss-skeptikon.js Normal file
View File

@ -0,0 +1,87 @@
/*
SkeptCOM [RSS-Youtube] | Détecte les nouvelles vidéos YT via RSS
*/
// REQUIRE, CONST, VARIABLES
const jsonfile = require('jsonfile')
const Parser = require('rss-parser')
const path = require('path')
const routage = require('../modules/routage')('rss-skeptikon')
let parser = new Parser({
headers: {
Accept: 'application/rss+xml, application/xml',
}
})
const db = require('../db/rss-skeptikon.json')
// FUNCTIONS
// et on output ! YOLO !
function output(data) {
console.log(` --> [RSS-Skeptikon | NV] ${data.author} | ${data.title}`)
if (routage && routage.send) routage.send(data)
}
// bon, on a besoin de recup le RSS, normol
async function getFeed(url) {
return new Promise((resolve, reject) => {
parser.parseURL(url, (err, res) => {
if (err) return reject(err)
resolve(res)
})
})
}
// on filtre un peu, puis en fonction on output
async function parseRSS(feed) {
for (let n in feed.items) {
let i = feed.items.length-n-1 // on check en décroissant
if (feed.items[i].isoDate > db.lastCheck || feed.items[i].isoDate > db.latest) {
db.latest = feed.items[i].isoDate
let id = feed.items[i].link.split('/')[feed.items[i].link.split('/').length-1]
let c = {
author: feed.items[i].creator,
title: feed.items[i].title,
url: feed.items[i].link,
id: id,
image: "https://skeptikon.fr/static/previews/" + id + ".jpg",
desc: feed.items[i].content.slice(0, db.config.sliceDescription) + " [...]",
isoDate: feed.items[i].isoDate
}
output(c)
}
}
}
// on check l'ensemble de feeds
async function checkFeeds(feeds) {
console.log(` --- [RSS-Skeptikon] check @${db.lastCheck}`)
routage.log(`check @${db.lastCheck}`)
let feed = await getFeed(feeds)
await parseRSS(feed)
let dateObj = new Date()
db.lastCheck = dateObj.toISOString()
// et on externalise la nouvelle date. Youpi !
jsonfile.writeFile(path.resolve('./db/rss-skeptikon.json'), db, {spaces: 2}, (err) => {
if (err) console.error(err)
})
}
function rssLoop(time) {
checkFeeds(db.config.urlFeeds)
setTimeout(() => {
rssLoop(time)
}, time)
}
// INIT
console.log(` --- [RSS-Skeptikon] Load`)
routage.log(`Load`)
rssLoop(db.config.timeLoop*60*1000)

91
services/rss-youtube.js Normal file
View File

@ -0,0 +1,91 @@
/*
SkeptCOM [RSS-Youtube] | Détecte les nouvelles vidéos YT via RSS
*/
// REQUIRE, CONST, VARIABLES
const jsonfile = require('jsonfile')
const Parser = require('rss-parser')
const path = require('path')
const routage = require('../modules/routage')('rss-youtube')
let parser = new Parser({
customFields: {
item: [ 'author', 'media:group' ]
}
})
const db = require('../db/rss-youtube.json')
// FUNCTIONS
// et on output ! YOLO !
function output(data) {
console.log(` --> [RSS-Youtube | NV] ${data.author} | ${data.title}`)
if (routage && routage.send) routage.send(data)
}
// bon, on a besoin de recup le RSS, normol
async function getFeed(url) {
return new Promise((resolve, reject) => {
parser.parseURL(url, (err, res) => {
if (err) return reject(err)
resolve(res)
})
})
}
// on filtre un peu, puis en fonction on output
async function parseRSS(feed, owner) {
if (!db.timecode[owner]) db.timecode[owner] = db.timecode.lastCheck
let cLastCheck = db.timecode[owner]
for (let i in feed.items) {
if (feed.items[i].isoDate > db.timecode.lastCheck || feed.items[i].isoDate > cLastCheck) {
if (feed.items[i].isoDate > cLastCheck) cLastCheck = feed.items[i].isoDate
let c = feed.items[i]
c.desc = feed.items[i]['media:group']['media:description'][0].slice(0, db.config.sliceDescription) + " [...]"
c.image = "http://i3.ytimg.com/vi/" + c.id.split(':')[2] + "/maxresdefault.jpg"
c.url = c.link
delete c.link
delete c['media:group']
if (c.isoDate > cLastCheck) cLastCheck = feed.items[i].isoDate
output(c)
}
}
db.timecode[owner] = cLastCheck
}
// on check l'ensemble de feeds
async function checkFeeds(feeds) {
console.log(` --- [RSS-Youtube] check @${db.timecode.lastCheck}`)
routage.log(`check @${db.timecode.lastCheck}`)
for (let i in feeds) {
let feed = await getFeed(db.config.urlFeeds + feeds[i])
try {
await parseRSS(feed, i)
} catch (e) {
console.error("error while parsing feed %s", feed, e);
}
}
let dateObj = new Date()
db.timecode.lastCheck = dateObj.toISOString()
// et on externalise la nouvelle date. Youpi !
jsonfile.writeFile(path.resolve('./db/rss-youtube.json'), db, {spaces: 2}, (err) => {
console.log()
if (err) console.error(err)
})
}
function rssLoop(time) {
checkFeeds(db.feeds)
setTimeout(() => {
rssLoop(time)
}, time)
}
// INIT
console.log(` --- [RSS-Youtube] Load`)
routage.log(`Load`)
rssLoop(db.config.timeLoop*60*1000)