From 69c869a6931c7c05d231bdb9dedacb4d1c115ae7 Mon Sep 17 00:00:00 2001 From: Ladd Hoffman Date: Fri, 3 May 2024 13:19:20 -0500 Subject: [PATCH] pause matrix outbound queue until target room id is set --- .../{rollup.js => rollup/index.js} | 16 +++++----- backend/src/matrix-bot/index.js | 4 +-- backend/src/matrix-bot/outbound-queue.js | 29 ++++++++++--------- 3 files changed, 25 insertions(+), 24 deletions(-) rename backend/src/event-handlers/{rollup.js => rollup/index.js} (97%) diff --git a/backend/src/event-handlers/rollup.js b/backend/src/event-handlers/rollup/index.js similarity index 97% rename from backend/src/event-handlers/rollup.js rename to backend/src/event-handlers/rollup/index.js index 1382584..39cdd29 100644 --- a/backend/src/event-handlers/rollup.js +++ b/backend/src/event-handlers/rollup/index.js @@ -2,16 +2,16 @@ const Promise = require('bluebird'); const { v4: uuidv4 } = require('uuid'); const { isEqual } = require('lodash'); -const { registerDecider } = require('./validation-pools'); -const { registerMatrixEventHandler, sendMatrixEvent, sendMatrixText } = require('../matrix-bot'); -const { matrixPools, matrixUserToAuthorAddress, applicationData } = require('../util/db'); +const { registerDecider } = require('../validation-pools'); +const { registerMatrixEventHandler, sendMatrixEvent, sendMatrixText } = require('../../matrix-bot'); +const { matrixPools, matrixUserToAuthorAddress, applicationData } = require('../../util/db'); const { rollup, wallet, work2, dao, -} = require('../util/contracts'); -const read = require('../util/forum/read'); -const write = require('../util/forum/write'); -const addPostWithRetry = require('../util/add-post-with-retry'); -const callWithRetry = require('../util/call-contract-method-with-retry'); +} = require('../../util/contracts'); +const read = require('../../util/forum/read'); +const write = require('../../util/forum/write'); +const addPostWithRetry = require('../../util/add-post-with-retry'); +const callWithRetry = require('../../util/call-contract-method-with-retry'); const { ROLLUP_BATCH_SIZE, diff --git a/backend/src/matrix-bot/index.js b/backend/src/matrix-bot/index.js index cd25da0..297d34c 100644 --- a/backend/src/matrix-bot/index.js +++ b/backend/src/matrix-bot/index.js @@ -23,7 +23,7 @@ const matrixClient = new MatrixClient( ); let joinedRooms; -const { startOutboundQueue, sendMatrixEvent, sendMatrixText } = require('./outbound-queue'); +const { initializeOutboundQueue, sendMatrixEvent, sendMatrixText } = require('./outbound-queue'); const start = async () => { // Automatically join a room to which we are invited @@ -35,7 +35,7 @@ const start = async () => { matrixClient.start().then(() => { console.log('Matrix bot started!'); // Start the outbound queue - startOutboundQueue(matrixClient); + initializeOutboundQueue(matrixClient); }); }; diff --git a/backend/src/matrix-bot/outbound-queue.js b/backend/src/matrix-bot/outbound-queue.js index 90195b4..0d0864f 100644 --- a/backend/src/matrix-bot/outbound-queue.js +++ b/backend/src/matrix-bot/outbound-queue.js @@ -5,17 +5,7 @@ const { applicationData } = require('../util/db'); let matrixClient; let targetRoomId; -const setTargetRoomId = async (roomId) => { - targetRoomId = roomId; - console.log('target room ID:', targetRoomId); - await applicationData.put('targetRoomId', targetRoomId); -}; - const processOutboundQueue = async ({ type, ...args }) => { - if (!targetRoomId) { - console.log('targetRoomId not set, cannot deliver message'); - return; - } switch (type) { case 'MatrixEvent': { const { eventType, content, onSend } = args; @@ -34,10 +24,19 @@ const processOutboundQueue = async ({ type, ...args }) => { }; const outboundQueue = fastq(processOutboundQueue, 1); -// Pause until matrixClient is set +// Pause outbound queue until matrixClient and targetRoomId are set outboundQueue.pause(); -const startOutboundQueue = async (matrixClient_) => { +const setTargetRoomId = async (roomId) => { + targetRoomId = roomId; + console.log('target room ID:', targetRoomId); + await applicationData.put('targetRoomId', targetRoomId); + if (matrixClient) { + outboundQueue.resume(); + } +}; + +const initializeOutboundQueue = async (matrixClient_) => { matrixClient = matrixClient_; try { targetRoomId = await applicationData.get('targetRoomId'); @@ -46,7 +45,9 @@ const startOutboundQueue = async (matrixClient_) => { // No target room set console.warn('target room ID is not set -- will not be able to send messages until it is set. Use !target '); } - outboundQueue.resume(); + if (targetRoomId) { + outboundQueue.resume(); + } }; const sendMatrixEvent = async (eventType, content) => new Promise((resolve) => { @@ -73,7 +74,7 @@ const sendMatrixText = async (text) => new Promise((resolve) => { module.exports = { setTargetRoomId, outboundQueue, - startOutboundQueue, + initializeOutboundQueue, sendMatrixEvent, sendMatrixText, };