'use strict'; const config = require('config'); const snoowrap = require('snoowrap'); const bhttp = require('bhttp'); const reddit = new snoowrap(config.reddit); async function getWekanActorNames() { const wekanLoginRes = await bhttp.post(`${config.wekan.url}/users/login`, { username: config.wekan.username, password: config.wekan.password, }); if (!wekanLoginRes.statusCode === 200) { throw new Error(`Wekan login failed (${wekanLoginRes.statusCode}): ${wekanLoginRes.body}`); } const wekanBoardRes = await bhttp.get(`${config.wekan.url}/api/boards/${config.wekan.boardId}/lists/${config.wekan.listId}/cards`, { headers: { Authorization: `Bearer ${wekanLoginRes.body.token}`, }, }); if (!wekanBoardRes.statusCode === 200) { throw new Error(`Wekan card retrieval failed (${wekanBoardRes.statusCode}): ${wekanBoardRes.body}`); } const actorNames = wekanBoardRes.body.map((card) => { const name = card.title.split(/\s+/).slice(0, 2).join(' '); // allow single name to be delimited return name.slice(0, name.indexOf('.')); ;}); return actorNames; } async function init() { const automodConfig = await reddit.getSubreddit(config.subreddit).getWikiPage('config/automoderator').fetch(); const automodLines = automodConfig.content_md.split('\n'); const actorLineIndex = automodLines.findIndex((line) => line.includes(config.actorCommentKey)) + 1; const wekanActorNames= await getWekanActorNames(); const actorNames = [...config.baseActorNames, ...wekanActorNames]; const newActorLine = `title: ${JSON.stringify(actorNames)}`; automodLines[actorLineIndex] = newActorLine; const newConfig = automodLines.join('\n'); if (config.interval) { const result = await reddit.getSubreddit(config.subreddit).getWikiPage('config/automoderator').edit({ text: newConfig, reason: 'Synced kanban actor names', }); console.log(`${new Date().toISOString()} Sync complete, resyncing in ${config.interval} minutes, set ${newActorLine}`); setTimeout(() => init(), config.interval * 60 * 1000); return; } console.log(`${new Date().toISOString()} Sync complete, set ${newActorLine}`); } init();