Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/backend/channel-rewards/channel-reward-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -45,14 +46,17 @@ 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",
rewardId: savedReward.id,
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);
});

Expand Down Expand Up @@ -284,6 +288,15 @@ class ChannelRewardManager {

async triggerChannelReward(rewardId: string, metadata: RewardRedemptionMetadata, manual = false): Promise<boolean | void> {
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;
}
Expand Down
4 changes: 3 additions & 1 deletion src/backend/events/activity-feed-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion src/types/channel-rewards.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};