added support for multiple count-to-a-million channels at once

This commit is contained in:
Avi 2020-10-14 04:21:07 +00:00
parent 6d02676b77
commit e6c91a6619

View file

@ -3,8 +3,9 @@ const { App } = require("@slack/bolt");
const keep_alive = require('./keep_alive.js') const keep_alive = require('./keep_alive.js')
const schedule = require('node-schedule'); const schedule = require('node-schedule');
const moment = require('moment'); const moment = require('moment');
const main = "CDJMS683D";
const thread = "C01BZ7V0207";
const token = process.env.SLACK_BOT_TOKEN; const token = process.env.SLACK_BOT_TOKEN;
const channel = "CDJMS683D";
const Airtable = require('airtable'); const Airtable = require('airtable');
Airtable.configure({ Airtable.configure({
endpointUrl: 'https://api.airtable.com', endpointUrl: 'https://api.airtable.com',
@ -62,11 +63,15 @@ async function fetchOldest(id) {
async function publishMessage(id, text) { async function publishMessage(id, text) {
try { try {
const result = await app.client.chat.postMessage({ let options = {
token: token, token: token,
channel: id, channel: id,
text: text text: text
}); }
if (id == "CDJMS683D") {
options['thread_ts'] = 1602496865003000
}
const result = await app.client.chat.postMessage(options);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
@ -106,7 +111,7 @@ function findMean(arr) {
} }
async function addData(db, object) { async function addData(db, object) {
base(db).create(object, function(err, record){ base(db).create(object, function(err, record) {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
@ -115,30 +120,35 @@ async function addData(db, object) {
}) })
} }
async function getStats() { async function getStats(id) {
try { try {
let obj = await base('stats').find('rec2XI8QAsPr7EMVB'); if (id == "CDJMS683D") {
let obj = await base('stats').find('rec2XI8QAsPr7EMVB');
} else if (id == "C01BZ7V0207") {
let obj = await base('thread stats').find('recBljY8vBdaNK8kq');
}
return { return {
id: obj.id, id: obj.id,
fields: obj.fields, fields: obj.fields,
}; };
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} }
} }
async function report() { async function report(channel) {
let oldest = await fetchOldest(channel); let oldest = await fetchOldest(channel);
let latest = await fetchLatest(channel); let latest = await fetchLatest(channel);
let diff = latest - oldest; let diff = latest - oldest;
// addData('increase', { let db = channel == "CDJMS683D" ? 'increase' : 'thread';
// "Date": moment().subtract(1, "days").format("YYYY-MM-DD"), addData(db, {
// "increase": diff, "Date": moment().subtract(1, "days").format("YYYY-MM-DD"),
// "stats": [ "increase": diff,
// "rec2XI8QAsPr7EMVB" "stats": [
// ] "rec2XI8QAsPr7EMVB"
// }) ]
let newStats = await getStats(); });
let newStats = await getStats(channel);
averageSpeed = newStats.fields.average.toFixed(3); averageSpeed = newStats.fields.average.toFixed(3);
let thousandsGoal = Math.ceil(latest / 1000) * 1000; let thousandsGoal = Math.ceil(latest / 1000) * 1000;
let thousandsTime = predictTime(thousandsGoal, latest); let thousandsTime = predictTime(thousandsGoal, latest);
@ -205,9 +215,10 @@ app.event('message', async (body) => {
// Start your app // Start your app
try { try {
await app.start(process.env.PORT || 3000); await app.start(process.env.PORT || 3000);
let j = schedule.scheduleJob('0 0 * * *', report); // */15 * * * * * for debugging, 0 0 * * * actual let j = schedule.scheduleJob('0 0 * * *', () => { report(main) }); // */15 * * * * * for debugging, 0 0 * * * actual
publishMessage('C017W4PHYKS', 'running every midnight!') let k = schedule.scheduleJob('0 0 * * *', () => { report(thread) });
} catch (error) { } catch (error) {
console.error(error); console.error(error);
publishMessage('C017W4PHYKS', error)
} }
})(); })();