diff --git a/src/backend/channel-rewards/channel-reward-manager.ts b/src/backend/channel-rewards/channel-reward-manager.ts index 1aa4477e3..6dff5878d 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"; @@ -45,6 +46,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", @@ -52,7 +54,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); }); @@ -284,6 +288,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 8f055f92e..f6a1a133a 100644 --- a/src/types/channel-rewards.d.ts +++ b/src/types/channel-rewards.d.ts @@ -15,10 +15,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