From 54f76edca6c20da4bafed23cb015dffa7b06095b Mon Sep 17 00:00:00 2001 From: Andreas Aronsson Date: Sat, 15 Jun 2024 09:08:08 +0200 Subject: [PATCH] Fix system action event reward toggling and user input event triggering --- app/src/Server/Runners/Action/ActionSystemRunner.ts | 9 ++++++++- app/src/Shared/Objects/Data/DataUtils.ts | 5 ++++- app/src/Shared/Utils/Utils.ts | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/Server/Runners/Action/ActionSystemRunner.ts b/app/src/Server/Runners/Action/ActionSystemRunner.ts index 0998e306..68b6489a 100644 --- a/app/src/Server/Runners/Action/ActionSystemRunner.ts +++ b/app/src/Server/Runners/Action/ActionSystemRunner.ts @@ -24,6 +24,8 @@ export default class ActionSystemRunner extends AbstractActionRunner { const interval = clone.trigger.interval let delay = 0 + // region Trigger + // Trigger System Actions const systemActions = ArrayUtils.getAsType(clone.trigger.systemActionEntries, clone.trigger.systemActionEntries_use, index) for(const systemAction of systemActions) { @@ -109,6 +111,9 @@ export default class ActionSystemRunner extends AbstractActionRunner { new ActionHandler(userEventEntry.dataSingle.key).call(user).then() } } + // endregion + + // region Toggle // Toggle Rewards const rewardStates = clone.toggle.rewardStates @@ -118,7 +123,7 @@ export default class ActionSystemRunner extends AbstractActionRunner { const eventEntry = DataUtils.ensureItem(eventStates.event) const event = eventEntry?.dataSingle.filledData if(event) { - const rewards = DataUtils.ensureDataArray(event.triggers).filter(trigger => trigger.__getClass() == TriggerReward.name) as TriggerReward[] + const rewards = DataUtils.ensureDataArray(event.triggers) as TriggerReward[] for(const reward of rewards) { const rewardID = DataUtils.ensureItem(reward.rewardID) if(rewardID) { @@ -134,6 +139,8 @@ export default class ActionSystemRunner extends AbstractActionRunner { // Toggle the rewards on Twitch await TwitchHelixHelper.toggleRewards(rewardStates) + + // endregion } } } diff --git a/app/src/Shared/Objects/Data/DataUtils.ts b/app/src/Shared/Objects/Data/DataUtils.ts index 6687302f..25f8cbec 100644 --- a/app/src/Shared/Objects/Data/DataUtils.ts +++ b/app/src/Shared/Objects/Data/DataUtils.ts @@ -2,6 +2,7 @@ import AbstractData, {DataEntries, DataRefValues} from './AbstractData.js' import DataMap from './DataMap.js' import {IDictionary, INumberDictionary, IStringDictionary} from '../../Interfaces/igeneral.js' import {IDataBaseItem} from '../../Helpers/DataBaseHelper.js' +import Utils from '../../../Shared/Utils/Utils.js' export default class DataUtils { // region Referencing @@ -186,7 +187,9 @@ export default class DataUtils { else return entries } static ensureItemDictionary(entries: INumberDictionary|DataEntries): DataEntries|undefined { - if(entries.constructor.name !== DataEntries.name) return undefined + const keys = Object.keys(entries) + const matchKeys = Object.keys(new DataEntries()) + if(!Utils.containsAll(keys, matchKeys)) return undefined else return entries as DataEntries } // endregion diff --git a/app/src/Shared/Utils/Utils.ts b/app/src/Shared/Utils/Utils.ts index 4d324422..6410496a 100644 --- a/app/src/Shared/Utils/Utils.ts +++ b/app/src/Shared/Utils/Utils.ts @@ -250,6 +250,16 @@ export default class Utils { return JSON.parse(JSON.stringify(data)) as Type } + /** + * Checks if all the needles exist in the haystack. + * @param haystack + * @param needles + */ + static containsAll(needles: any[], haystack: any[]): boolean { + const haystackSet = new Set(haystack) + return needles.every(item => haystackSet.has(item)) + } + /** * Splits a Steam app key into parts and returns the parsed number * @param appId