Skip to content

Commit

Permalink
feat: add more events to Effect Queue (#2785)
Browse files Browse the repository at this point in the history
* feat: added new events for queue status and new entry

* feat: added filter option for effect queue name  is or is not

* fix: clean up debug code and error message

* fix(effect-queue-status): fixed return type
  • Loading branch information
alfw authored Sep 12, 2024
1 parent 469a15b commit a30784c
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 2 deletions.
14 changes: 14 additions & 0 deletions src/backend/effects/queues/effect-queue-runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ class EffectQueue {

logger.debug(`Added more effects to queue ${this.id}. Current length=${this._queue.length}`);

eventManager.triggerEvent("firebot", "effect-queue-added", {
effectQueueId: this.id
});

this.sendQueueLengthUpdate();

this.processEffectQueue();
Expand Down Expand Up @@ -169,11 +173,21 @@ class EffectQueue {

pauseQueue() {
logger.debug(`Pausing queue ${this.id}...`);

eventManager.triggerEvent("firebot", "effect-queue-status", {
effectQueueId: this.id
});

this._paused = true;
}

resumeQueue() {
logger.debug(`Resuming queue ${this.id}...`);

eventManager.triggerEvent("firebot", "effect-queue-status", {
effectQueueId: this.id
});

this._paused = false;
this.processEffectQueue();
}
Expand Down
19 changes: 19 additions & 0 deletions src/backend/events/builtin/firebot-event-source.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,25 @@ const firebotEventSource = {
queueName: "Just Chatting"
}
},
{
id: "effect-queue-added",
name: "Effect Queue Added",
description: "When an new entry added to effect queue.",
cached: false,
manualMetadata: {
queueName: "Just Chatting"
}
},
{
id: "effect-queue-status",
name: "Effect Queue Status",
description: "When an effect queue status changes.",
cached: false,
manualMetadata: {
queueName: "Just Chatting",
status: "paused"
}
},
{
id: "before-firebot-closed",
name: "Before Firebot Closed",
Expand Down
1 change: 1 addition & 0 deletions src/backend/events/filters/builtin-filter-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ exports.loadFilters = () => {
'custom-variable-name',
'donation-amount',
'donation-from',
'effect-queue',
'gift-count',
'gift-duration',
'is-anonymous',
Expand Down
46 changes: 46 additions & 0 deletions src/backend/events/filters/builtin/effect-queue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"use strict";

module.exports = {
id: "firebot:effect-queue",
name: "Effect Queue",
description: "Filter to a Effect Queue",
events: [
{ eventSourceId: "firebot", eventId: "effect-queue-added" },
{ eventSourceId: "firebot", eventId: "effect-queue-cleared" },
{ eventSourceId: "firebot", eventId: "effect-queue-status" }
],
comparisonTypes: ["is", "is not"],
valueType: "preset",
presetValues: (effectQueuesService) => {
return effectQueuesService.getEffectQueues().map((c) => ({ value: c.id, display: c.name }));
},
valueIsStillValid: (filterSettings, effectQueuesService) => {
return new Promise((resolve) => {
resolve(effectQueuesService.getEffectQueues().some((c) => c.id === filterSettings.value));
});
},
getSelectedValueDisplay: (filterSettings, effectQueuesService) => {
return new Promise((resolve) => {
resolve(
effectQueuesService.getEffectQueues().find((c) => c.id === filterSettings.value)?.name ??
"Unknown Effect Queue"
);
});
},
predicate: (filterSettings, eventData) => {
const { comparisonType, value } = filterSettings;
const { eventMeta } = eventData;

const actual = eventMeta.effectQueueId;
const expected = value;

switch (comparisonType) {
case "is":
return actual === expected;
case "is not":
return actual !== expected;
default:
return false;
}
}
};
2 changes: 1 addition & 1 deletion src/backend/variables/builtin/metadata/effect-queue-id.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { EffectTrigger } from "../../../../shared/effect-constants";
import { OutputDataType, VariableCategory } from "../../../../shared/variable-constants";

const triggers = {};
triggers[EffectTrigger.EVENT] = ["firebot:effect-queue-cleared"];
triggers[EffectTrigger.EVENT] = ["firebot:effect-queue-cleared", "firebot:effect-queue-added", "firebot:effect-queue-status"];
triggers[EffectTrigger.MANUAL] = true;

const model: ReplaceVariable = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { OutputDataType, VariableCategory } from "../../../../shared/variable-co
import effectQueueManager from "../../../effects/queues/effect-queue-manager";

const triggers = {};
triggers[EffectTrigger.EVENT] = ["firebot:effect-queue-cleared"];
triggers[EffectTrigger.EVENT] = ["firebot:effect-queue-cleared", "firebot:effect-queue-added", "firebot:effect-queue-status"];
triggers[EffectTrigger.MANUAL] = true;

const model: ReplaceVariable = {
Expand Down
26 changes: 26 additions & 0 deletions src/backend/variables/builtin/metadata/effect-queue-status.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { ReplaceVariable } from "../../../../types/variables";
import { EffectTrigger } from "../../../../shared/effect-constants";
import { OutputDataType, VariableCategory } from "../../../../shared/variable-constants";
import effectQueueManager from "../../../effects/queues/effect-queue-manager";

const triggers = {};
triggers[EffectTrigger.EVENT] = ["firebot:effect-queue-cleared", "firebot:effect-queue-added", "firebot:effect-queue-status"];
triggers[EffectTrigger.MANUAL] = true;

const model: ReplaceVariable = {
definition: {
handle: "effectQueueStatus",
description: "The status of the effect queue.",
triggers: triggers,
categories: [VariableCategory.TRIGGER],
possibleDataOutput: [OutputDataType.BOOLEAN, OutputDataType.NULL]
},
evaluator: (trigger) => {
const queueId = trigger?.metadata?.eventData?.effectQueueId;
const effectQueue = effectQueueManager.getItem(queueId);

return effectQueue?.active ?? null;
}
};

export default model;
2 changes: 2 additions & 0 deletions src/backend/variables/builtin/metadata/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import count from './count';
import effectOutput from './effect-output';
import effectQueueId from './effect-queue-id';
import effectQueueName from './effect-queue-name';
import effectQueueStatus from './effect-queue-status';
import overlayInstance from './overlay-instance';
import presetListArg from './preset-list-arg';
import user from './user';
Expand All @@ -26,6 +27,7 @@ export default [
effectOutput,
effectQueueId,
effectQueueName,
effectQueueStatus,
overlayInstance,
presetListArg,
user,
Expand Down

0 comments on commit a30784c

Please sign in to comment.