Get the updates status of cards in a Trello board once a day in Slack
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
let storageKey = `${process.env.BOARD_ID}_trello_dailies__boardStatus`;
let lastBoardStatus = await lib.utils.kv['@0.1.16'].get({
key: storageKey,
defaultValue: {},
});
let boardState = await lib.trello.boards['@0.0.2'].lists.list({
boardNameOrId: `${process.env.BOARD_ID}`,
cards: 'open',
filter: 'open',
});
let longestLabel = 0;
let boardStatus = boardState.reduce((obj, column) => {
obj[column.name] = column.cards.length;
longestLabel = Math.max(longestLabel, column.name.length);
return obj;
}, {});
let updateMessage = [];
for (key in boardStatus) {
let change = lastBoardStatus.hasOwnProperty(key)
? boardStatus[key] - lastBoardStatus[key]
: null;
if (change > 0) {
change = '+' + change;
}
updateMessage.push(
`${key}: ${new Array(longestLabel - key.length).fill(' ').join('')}${
boardStatus[key]
} ${change !== null ? '(' + change + ')' : ''}`
);
}
await Promise.all([
lib.slack.channels['@0.7.3'].messages.create({
channel: `#${process.env.SLACK_CHANNEL}`,
text: [
`*π Daily Tasks Progress Update:*`,
'```',
updateMessage.join('\n'),
'```',
].join('\n'),
}),
lib.utils.kv['@0.1.16'].set({
key: storageKey,
value: boardStatus,
}),
]);
return boardStatus;