diff --git a/src/modules/moderation/ban-all.ts b/src/modules/moderation/ban-all.ts index b28dc90..81fab55 100644 --- a/src/modules/moderation/ban-all.ts +++ b/src/modules/moderation/ban-all.ts @@ -172,7 +172,7 @@ export class BanAllQueue extends Module { public async initiateBanAll(banAll: BanAll, messageId: number) { const allGroups = await api.tg.groups.getAll.query() - const chats = allGroups.map((g) => g.telegramId) + const chats = allGroups.filter((g) => !g.hide).map((g) => g.telegramId) const banType = banAll.type === "BAN" ? "ban" : "unban" await api.tg.auditLog.create @@ -195,6 +195,7 @@ export class BanAllQueue extends Module { children: chats.map((chat) => ({ name: banType, queueName: CONFIG.EXECUTOR_QUEUE, + opts: { continueParentOnFailure: true }, data: { chatId: chat, targetId: banAll.target.id, @@ -208,8 +209,7 @@ export class BanAllQueue extends Module { * Register event listeners when the module is loaded */ override async start() { - // set the listener to update the parent job progress - this.executor.on("completed", async (job) => { + const reportProgress = async (job: BanJob) => { // this listener recomputes the progress for the parent job every time a child job is completed const parentID = job.parent?.id if (!parentID) return @@ -221,6 +221,7 @@ export class BanAllQueue extends Module { ignored: true, unprocessed: true, }) + // get child counts const { failed, ignored, processed, unprocessed } = { failed: 0, @@ -230,13 +231,16 @@ export class BanAllQueue extends Module { ...rawNumbers, } - const successCount = processed - (failed + ignored) - const total = processed + unprocessed await parent.updateProgress({ - jobCount: total, - successCount, - failedCount: failed, + jobCount: processed + unprocessed + ignored + failed, + successCount: processed, + failedCount: failed + ignored, } satisfies BanAllState) + } + + this.executor.on("completed", (job) => reportProgress(job)) + this.executor.on("failed", (job) => { + if (job) void reportProgress(job) }) // throttled call to update the message, to avoid spamming Telegram API @@ -245,8 +249,8 @@ export class BanAllQueue extends Module { void modules .get("tgLogger") .banAllProgress(banAll, messageId) - .catch(() => { - logger.warn("[BanAllQueue] Failed to update ban all progress message") + .catch((error) => { + logger.warn({ error }, "[BanAllQueue] Failed to update ban all progress message") }) }, CONFIG.UPDATE_MESSAGE_THROTTLE_MS)