const cron = require('cron') const DB = require('./libs/database') const fbParser = require('./libs/facebook-pageparse') const { pushMessage } = require('./libs/line-message') new cron.CronJob({ // eslint-disable-line cronTime: '00 */2 * * * *', onTick: async () => { console.log('run cron') let db = await DB.connect() let text = `select "id" as page, "lastpost" as post from "public"."facebook_page"` let res = await db.query({ text }) console.log('rows length :::: ', res.rowCount) if (res.rows.legnth === 0) return res.rows.forEach(t => { runCheckPage(t) }) db.release() }, runOnInit: true, start: true, timeZone: 'Asia/Taipei' }) const runCheckPage = async function (t) { let db = await DB.connect() fbParser.getLastPost(t.page) .then(async (data) => { let n = Math.floor(Date.now() / 1000) if (t.post === data.id || data.time < (n - 10 * 60)) { return } t.post = data.id try { let text = `update "public"."facebook_page" set "lastpost" = $1, "mtime" = now() where "id" = $2` let values = [data.id, t.page] await db.query({ text, values }) } catch (err) { console.log(err) } let rt = null try { let text = `select rt."facebook" as page, rt."tmpl" as tmpl, rt."line" as group from "public"."line_fb_rt" rt left join "public"."line_group" line on line."id" = rt."line" where line."notify" = true and rt."facebook" = $1` let values = [t.page] rt = await db.query({ text, values }) } catch (err) { console.log(err) } if (rt === null || rt.rowCount === 0) { return } for (let i in rt.rows) { let tmp = rt.rows[i] let msg = tmp.tmpl || '' if (typeof msg !== 'string' || msg.trim().length === 0) { msg = `${data.txt}\n${data.link}` } else { msg = msg.replace(/{link}/, data.link).replace(/{txt}/, data.txt).replace(/\\n/, '\n') } pushMessage(tmp.group, msg).then(() => {}).catch(() => {}) } }) .then(() => { db.release() }) .catch(() => { db.release() }) } // register twitch streaming webhook new cron.CronJob({ //eslint-disable-line cronTime: '00 00 0,6,12,18 * * *', onTick: async () => { }, runOnInit: true, start: true, timeZone: 'Asia/Taipei' })