From 1812e12bbadc1536417da0a3aa5822fe357930dc Mon Sep 17 00:00:00 2001 From: codehdn Date: Thu, 2 May 2024 00:26:28 -0500 Subject: [PATCH] feat: mark channel point redemption users as active --- .../channel-rewards/channel-reward-manager.ts | 15 ++++++++++++++- src/backend/events/activity-feed-manager.js | 4 +++- src/types/channel-rewards.d.ts | 4 +++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/backend/channel-rewards/channel-reward-manager.ts b/src/backend/channel-rewards/channel-reward-manager.ts index f1bee5012..ebb935159 100644 --- a/src/backend/channel-rewards/channel-reward-manager.ts +++ b/src/backend/channel-rewards/channel-reward-manager.ts @@ -4,6 +4,7 @@ import accountAccess from "../common/account-access"; import profileManager from "../common/profile-manager"; import frontendCommunicator from "../common/frontend-communicator"; import twitchApi from "../twitch-api/api"; +import activeUserHandler from "../chat/chat-listeners/active-user-handler" import { CustomReward, RewardRedemption, RewardRedemptionsApprovalRequest } from "../twitch-api/resource/channel-rewards"; import { EffectTrigger } from "../../shared/effect-constants"; import { RewardRedemptionMetadata, SavedChannelReward } from "../../types/channel-rewards"; @@ -44,6 +45,7 @@ class ChannelRewardManager { const accountAccess = require("../common/account-access"); + // Manually triggered by streamer, must pass in userId and userDisplayName can be falsy this.triggerChannelReward(channelRewardId, { messageText: "Testing reward", redemptionId: "test-redemption-id", @@ -51,7 +53,9 @@ class ChannelRewardManager { rewardCost: savedReward.twitchData.cost, rewardImage: savedReward.twitchData.image ? savedReward.twitchData.image.url4x : savedReward.twitchData.defaultImage.url4x, rewardName: savedReward.twitchData.title, - username: accountAccess.getAccounts().streamer.displayName + username: accountAccess.getAccounts().streamer.displayName, + userId: "", + userDisplayName: "" }, true); }); @@ -261,6 +265,15 @@ class ChannelRewardManager { async triggerChannelReward(rewardId: string, metadata: RewardRedemptionMetadata, manual = false): Promise { const savedReward = this.channelRewards[rewardId]; + if (metadata.username && metadata.userId && metadata.userDisplayName) { + /* + If all user data is present mark user as active + handles use from src/backend/events/twitch-events/reward-redemption.ts + the two other uses of triggerChannel reward do not have this data and are initiated by the streamer + retrigger-event and manually-trigger-reward and as such should not set a user as active + */ + await activeUserHandler.addActiveUser({userName: metadata.username, userId: metadata.userId, displayName: metadata.userDisplayName}, true); + } if (savedReward == null || savedReward.effects == null || savedReward.effects.list == null) { return; } diff --git a/src/backend/events/activity-feed-manager.js b/src/backend/events/activity-feed-manager.js index 23e4d3434..1de6dd738 100644 --- a/src/backend/events/activity-feed-manager.js +++ b/src/backend/events/activity-feed-manager.js @@ -73,7 +73,9 @@ frontendCommunicator.on("retrigger-event", (activityId) => { } if (activity.eventId === "channel-reward-redemption") { - rewardManager.triggerChannelReward(activity.metadata.rewardId, activity.metadata); + // Manually triggered by streamer, must pass in userId and userDisplayName can be falsy + const metadata = {userId: "", userDisplayName: "", ...activity.metadata }; + rewardManager.triggerChannelReward(activity.metadata.rewardId, metadata); } eventManager.triggerEvent(activity.sourceId, activity.eventId, diff --git a/src/types/channel-rewards.d.ts b/src/types/channel-rewards.d.ts index 15b950226..f8936bf06 100644 --- a/src/types/channel-rewards.d.ts +++ b/src/types/channel-rewards.d.ts @@ -13,10 +13,12 @@ export type SavedChannelReward = { export type RewardRedemptionMetadata = { username: string, + userId: string, + userDisplayName: string, messageText: string, redemptionId: string, rewardId: string, rewardImage: string, rewardName: string, - rewardCost: number + rewardCost: number, }; \ No newline at end of file