Skip to content

Commit

Permalink
Merge pull request #1159 from crowbartools/v5
Browse files Browse the repository at this point in the history
V5.38.1
  • Loading branch information
ebiggz committed May 10, 2021
2 parents 417bd6a + 6da19a0 commit eb5ce6f
Show file tree
Hide file tree
Showing 16 changed files with 142 additions and 64 deletions.
31 changes: 11 additions & 20 deletions backend/chat/chat-listeners/twitch-chat-listeners.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const chatHelpers = require("../chat-helpers");
const activeUserHandler = require("./active-user-handler");
const accountAccess = require("../../common/account-access");
const chatModerationManager = require("../moderation/chat-moderation-manager");
const twitchEventsHandler = require("../../events/twitch-events");

const events = require("events");

Expand Down Expand Up @@ -53,17 +54,15 @@ exports.setupChatListeners = (streamerChatClient) => {

activeUserHandler.addActiveUser(msg.userInfo, true);

const viewerArrivedListener = require("../../events/twitch-events/viewer-arrived");
viewerArrivedListener.triggerViewerArrived(msg.userInfo.displayName);
twitchEventsHandler.viewerArrived.triggerViewerArrived(msg.userInfo.displayName);

const { streamer, bot } = accountAccess.getAccounts();
if (user !== streamer.username && user !== bot.username) {
const timerManager = require("../../timers/timer-manager");
timerManager.incrementChatLineCounters();
}

const chatMessageListener = require("../../events/twitch-events/chat-message");
chatMessageListener.triggerChatMessage(firebotChatMessage);
twitchEventsHandler.chatMessage.triggerChatMessage(firebotChatMessage);
});

streamerChatClient.onWhisper(async (_user, messageText, msg) => {
Expand All @@ -78,49 +77,41 @@ exports.setupChatListeners = (streamerChatClient) => {
const firebotChatMessage = await chatHelpers.buildFirebotChatMessage(msg, messageText, false, true);
frontendCommunicator.send("twitch:chat:message", firebotChatMessage);

const chatMessageListener = require("../../events/twitch-events/chat-message");
chatMessageListener.triggerChatMessage(firebotChatMessage);
twitchEventsHandler.chatMessage.triggerChatMessage(firebotChatMessage);

const viewerArrivedListener = require("../../events/twitch-events/viewer-arrived");
viewerArrivedListener.triggerViewerArrived(msg.userInfo.displayName);
twitchEventsHandler.viewerArrived.triggerViewerArrived(msg.userInfo.displayName);
});

streamerChatClient.onMessageRemove((_channel, messageId) => {
frontendCommunicator.send("twitch:chat:message:deleted", messageId);
});

streamerChatClient.onHosted((_, byChannel, auto, viewers) => {
const hostListener = require("../../events/twitch-events/host");
hostListener.triggerHost(byChannel, auto, viewers);
twitchEventsHandler.host.triggerHost(byChannel, auto, viewers);
const logger = require("../../logwrapper");
logger.debug(`Host triggered by ${byChannel}. Is auto: ${auto}`);
});

streamerChatClient.onSubGift((_channel, _user, giftSubInfo, msg) => {
const giftSubListener = require("../../events/twitch-events/gift-sub");
giftSubListener.triggerSubGift(giftSubInfo.gifterDisplayName,
twitchEventsHandler.giftSub.triggerSubGift(giftSubInfo.gifterDisplayName,
giftSubInfo.displayName, giftSubInfo.plan, giftSubInfo.planName,
giftSubInfo.giftDuration);
});

streamerChatClient.onCommunitySub((_channel, _user, subInfo, msg) => {
const giftSubListener = require("../../events/twitch-events/gift-sub");
giftSubListener.triggerCommunitySubGift(subInfo.gifterDisplayName,
twitchEventsHandler.giftSub.triggerCommunitySubGift(subInfo.gifterDisplayName,
subInfo.plan, subInfo.count);
});

streamerChatClient.onRaid((_channel, _username, raidInfo) => {
const raidListener = require("../../events/twitch-events/raid");
raidListener.triggerRaid(raidInfo.displayName, raidInfo.viewerCount);
twitchEventsHandler.raid.triggerRaid(raidInfo.displayName, raidInfo.viewerCount);
});

streamerChatClient.onBan((_, username) => {
const bannedListener = require("../../events/twitch-events/viewer-banned");
bannedListener.triggerBanned(username);
twitchEventsHandler.viewerBanned.triggerBanned(username);
});

streamerChatClient.onTimeout((_, username, duration) => {
const timeoutListener = require("../../events/twitch-events/viewer-timeout");
timeoutListener.triggerTimeout(username, duration);
twitchEventsHandler.viewerTimeout.triggerTimeout(username, duration);
});
};
4 changes: 2 additions & 2 deletions backend/chat/twitch-chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ frontendCommunicator.on("send-chat-message", async sendData => {
let firebotMessage = await chatHelpers.buildFirebotChatMessageFromText(message);
commandHandler.handleChatMessage(firebotMessage);

const chatMessageListener = require("../events/twitch-events/chat-message");
chatMessageListener.triggerChatMessage(firebotMessage);
const twitchEventsHandler = require("../events/twitch-events");
twitchEventsHandler.chatMessage.triggerChatMessage(firebotMessage);
}

twitchChat.sendChatMessage(message, null, accountType);
Expand Down
15 changes: 9 additions & 6 deletions backend/cloud-sync/profile-sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,29 @@ const quoteList = require("./sync-handlers/quotes-list");
const { settings } = require("../common/settings-access");

async function syncProfileData(profileSyncData) {
let streamerUsername = accountAccess.getAccounts().streamer.username;
let commands = await commandList.getCommandListForSync(profileSyncData.username, profileSyncData.userRoles);
let quotes = await quoteList.getQuoteListForSync();
const streamerUsername = accountAccess.getAccounts().streamer.username;
const commands = await commandList.getCommandListForSync(profileSyncData.username, profileSyncData.userRoles);
const quotes = await quoteList.getQuoteListForSync();

let completeSyncJSON = {
const variableManager = require("../variables/replace-variable-manager");

const completeSyncJSON = {
'owner': streamerUsername,
'chatter': profileSyncData.username,
'profilePage': profileSyncData.profilePage,
'commands': commands,
'variables': variableManager.getReplaceVariables().map(v => v.definition),
'quotes': quotes,
'allowQuoteCSVDownloads': settings.getAllowQuoteCSVDownloads()
};

let binId = await cloudSync.sync(completeSyncJSON);
const binId = await cloudSync.sync(completeSyncJSON);

if (binId != null) {
return binId;
}

logger.error('Cloud Sync: Unable to get binId from bytebin for quotes list.');
logger.error('Cloud Sync: Unable to get binId from bytebin for profile data.');
return null;
}

Expand Down
14 changes: 14 additions & 0 deletions backend/events/twitch-events.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"use strict";

exports.chatMessage = require('./twitch-events/chat-message');
exports.cheer = require('./twitch-events/cheer');
exports.follow = require('./twitch-events/follow');
exports.giftSub = require('./twitch-events/gift-sub');
exports.host = require('./twitch-events/host');
exports.raid = require('./twitch-events/raid');
exports.rewardRedemption = require('./twitch-events/reward-redemption');
exports.sub = require('./twitch-events/sub');
exports.viewerArrived = require('./twitch-events/viewer-arrived');
exports.viewerBanned = require('./twitch-events/viewer-banned');
exports.viewerTimeout = require('./twitch-events/viewer-timeout');
exports.whisper = require('./twitch-events/whisper');
1 change: 1 addition & 0 deletions backend/events/twitch-events/reward-redemption.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ exports.handleRewardRedemption = (redemptionMessage) => {
rewardId: redemptionMessage.rewardId,
rewardImage: imageUrl,
rewardName: redemptionMessage.rewardName,
rewardDescription: redemptionMessage.rewardPrompt,
rewardCost: redemptionMessage.rewardCost
};

Expand Down
14 changes: 10 additions & 4 deletions backend/events/twitch-events/sub.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,23 @@ function getSubType (subPlan) {
return "Tier 3";
}
}

/**
*
* @param {import("twitch-pubsub-client").PubSubSubscriptionMessage} subInfo
*/
exports.triggerSub = (subInfo) => {
const subType = getSubType(subInfo.subPlan);
const totalMonths = subInfo.months != null ? subInfo.months : 1;
const streak = subInfo.streakMonths != null ? subInfo.streakMonths : 1;
const isPrime = subInfo.subPlan === "Prime";

eventManager.triggerEvent("twitch", "sub", {
username: subInfo.userDisplayName,
subPlan: subInfo.subPlan,
subType: subType,
totalMonths: subInfo.months,
streak: subInfo.streakMonths,
isPrime: subInfo.subPlan === "Prime",
totalMonths: totalMonths,
streak: streak,
isPrime: isPrime,
isResub: subInfo.isResub
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const eventSourceDefinition = {
activityFeed: {
icon: "fad fa-money-bill",
getMessage: (eventData) => {
return `**${eventData.username}** donated **$${eventData.dononationAmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
return `**${eventData.from}** donated **$${eventData.dononationAmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const eventSourceDefinition = {
activityFeed: {
icon: "fad fa-money-bill",
getMessage: (eventData) => {
return `**${eventData.username}** donated **${eventData.formattedDonationAmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
return `**${eventData.from}** donated **${eventData.formattedDonationAmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
}
}
},
Expand All @@ -36,7 +36,7 @@ const eventSourceDefinition = {
activityFeed: {
icon: "fad fa-money-bill",
getMessage: (eventData) => {
return `**${eventData.username}** donated **${eventData.formattedDonationAmount}** to ExtraLife${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
return `**${eventData.from}** donated **${eventData.formattedDonationAmount}** to ExtraLife${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const eventSourceDefinition = {
activityFeed: {
icon: "fad fa-money-bill",
getMessage: (eventData) => {
return `**${eventData.username}** donated **${eventData.formattedDonationAmmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
return `**${eventData.from}** donated **${eventData.formattedDonationAmmount}**${eventData.donationMessage && !!eventData.donationMessage.length ? `: *${eventData.donationMessage}*` : ''}`;
}
}
},
Expand Down
4 changes: 2 additions & 2 deletions backend/twitch-api/follow-poll.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const accountAccess = require("../common/account-access");

const twitchApi = require("./client");

const followEvent = require("../events/twitch-events/follow");
const twitchEventsHandler = require("../events/twitch-events");

let followPollIntervalId;
let lastUserId;
Expand Down Expand Up @@ -43,7 +43,7 @@ exports.startFollowPoll = () => {
}

if (follow.userId !== lastUserId) {
followEvent.triggerFollow(follow.userDisplayName, follow.userId);
twitchEventsHandler.follow.triggerFollow(follow.userDisplayName, follow.userId);
} else {
break;
}
Expand Down
15 changes: 6 additions & 9 deletions backend/twitch-api/pubsub/pubsub-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,31 +75,28 @@ async function createClient() {
}

try {
const rewardRedemptionHandler =
require("../../events/twitch-events/reward-redemption");
const twitchEventsHandler = require('../../events/twitch-events');

const redemptionListener = await pubSubClient.onRedemption(streamer.userId,
(message) => {
rewardRedemptionHandler.handleRewardRedemption(message);
twitchEventsHandler.rewardRedemption.handleRewardRedemption(message);
});

listeners.push(redemptionListener);

const whisperListener = await pubSubClient.onWhisper(streamer.userId, (message) => {
const whisperListener = require("../../events/twitch-events/whisper");
whisperListener.triggerWhisper(message.senderName, message.text);
twitchEventsHandler.whisper.triggerWhisper(message.senderName, message.text);
});
listeners.push(whisperListener);

const bitsListener = await pubSubClient.onBits(streamer.userId, (event) => {
const cheerListener = require("../../events/twitch-events/cheer");
cheerListener.triggerCheer(event.userName, event.isAnonymous, event.bits, event.totalBits, event.message);
twitchEventsHandler.cheer.triggerCheer(event.userName, event.isAnonymous, event.bits, event.totalBits, event.message);
});
listeners.push(bitsListener);

const subsListener = await pubSubClient.onSubscription(streamer.userId, (subInfo) => {
if (!subInfo.isGift) {
const subsHandler = require("../../events/twitch-events/sub");
subsHandler.triggerSub(subInfo);
twitchEventsHandler.sub.triggerSub(subInfo);
}
});
listeners.push(subsListener);
Expand Down
1 change: 1 addition & 0 deletions backend/variables/builtin-variable-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ exports.loadReplaceVariables = () => {
'read-file',
'regexExec',
'regexTest',
'reward-description',
'reward-cost',
'reward-image-url',
'reward-message',
Expand Down
29 changes: 29 additions & 0 deletions backend/variables/builtin/reward-description.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"use strict";

const {
EffectTrigger
} = require("../../effects/models/effectModels");

const { OutputDataType, VariableCategory } = require("../../../shared/variable-constants");

let triggers = {};
triggers[EffectTrigger.EVENT] = ["twitch:channel-reward-redemption"];
triggers[EffectTrigger.CHANNEL_REWARD] = true;
triggers[EffectTrigger.MANUAL] = true;

const model = {
definition: {
handle: "rewardDescription",
description: "The description of the reward",
triggers: triggers,
categories: [VariableCategory.COMMON],
possibleDataOutput: [OutputDataType.TEXT]
},
evaluator: (trigger) => {
return trigger.metadata.eventData ?
trigger.metadata.eventData.rewardDescription :
trigger.metadata.rewardDescription;
}
};

module.exports = model;
1 change: 1 addition & 0 deletions backend/variables/builtin/user-exists.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const { OutputDataType, VariableCategory } = require("../../../shared/variable-c
const model = {
definition: {
handle: "userExists",
usage: "userExists[username]",
description: "Outputs 'true' if a user exists in Firebot's database, 'false' if not",
categories: [VariableCategory.ADVANCED],
possibleDataOutput: [OutputDataType.TEXT]
Expand Down

0 comments on commit eb5ce6f

Please sign in to comment.