Files
chatrd/js/fourthwall/module.js
2025-05-14 17:58:19 -03:00

289 lines
6.9 KiB
JavaScript

const showShopifyOrders = getURLParam("showShopifyOrders", true);
const shopifyMessageHandlers = {
'Shopify.OrderPaid': (response) => {
console.debug('Shopify Order Paid', response.data);
//shopifyOrderPaidMessage(response.data);
},
};
for (const [event, handler] of Object.entries(shopifyMessageHandlers)) {
streamerBotClient.on(event, handler);
}
async function shopifyOrderPaidMessage(data) {
if (showShopifyOrders == false) return;
const {
username : userName,
amount,
currency,
message: text
} = data;
const userID = createRandomString(40);
const messageID = createRandomString(40);
var money = formatCurrency(amount,currency);
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.donation({
money: money,
message: text
}),
]);
const classes = '';
const messageData = {
classes: classes,
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function fourthwallOrderMessage(data) {
if (showFourthwallOrders == false) return;
const username = data.username;
const total = data.total;
const currency = data.currency;
const item = data.variants[0].name;
const itemsQuantity = data.variants.length;
const text = stripStringFromHtml(data.statmessageus);
const imageUrl = data.variants[0].image;
const userID = createRandomString(40);
const messageID = createRandomString(40);
var userName = '';
if (username == undefined) { userName = currentLang.fourthwall.someone(); }
else { userName = username; }
var money = '';
if (total == 0) { money = 0; }
else { money = formatCurrency(total,currency); }
var fourthWallImage = '';
if (showFourthwallShowImage == true) {
fourthWallImage = imageUrl
}
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.order({
money: money,
firstItem: item,
items: itemsQuantity,
message: text,
image: fourthWallImage
}),
]);
const classes = ['order'];
if (showFourthwallBigImage == true) {
classes.push('giantimage');
}
const messageData = {
classes: classes.join(' '),
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function fourthwallSubMessage(data) {
if (showFourthwallSubscriptions == false) return;
const {
nickname : userName,
amount,
currency
} = data;
const userID = createRandomString(40);
const messageID = createRandomString(40);
var money = formatCurrency(amount,currency);
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.donation({
money: money
}),
]);
const classes = '';
const messageData = {
classes: classes,
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function fourthwallGiftMessage(data) {
if (showFourthwallGiftPurchase == false) return;
const userName = data.username;
const total = data.total;
const currency = data.currency;
const gifts = data.gifts.length;
const item = data.offer.name;
const imageUrl = data.offer.imageUrl;
const text = stripStringFromHtml(data.statmessageus);
const userID = createRandomString(40);
const messageID = createRandomString(40);
var money = '';
if (total == 0) { money = 0; }
else { money = formatCurrency(total,currency); }
var fourthWallImage = '';
if (showFourthwallShowGiftImage == true) {
fourthWallImage = imageUrl
}
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.gift({
money: money,
firstItem: item,
items: gifts,
message: text,
image: fourthWallImage
}),
]);
const classes = ['gift'];
if (showFourthwallBigGiftImage == true) {
classes.push('giantimage');
}
const messageData = {
classes: classes.join(' '),
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function fourthwallGiftDrawStartMessage(data) {
if (showFourthwallGiftDraw == false) return;
const {
offer: {
name: itemName
},
durationSeconds
} = data;
const userID = createRandomString(40);
const messageID = createRandomString(40);
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.drawstart({
gift: itemName,
command: fourthWallGiftDrawCommand
}),
]);
const classes = '';
const messageData = {
classes: classes,
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function fourthwallGiftDrawEndMessage(data) {
if (showFourthwallGiftDraw == false) return;
const {
data: {
gifts
}
} = data;
const userID = createRandomString(40);
const messageID = createRandomString(40);
const [avatar, message] = await Promise.all([
'',
currentLang.fourthwall.drawend({
winners: getWinnersList(gifts)
}),
]);
const classes = '';
const messageData = {
classes: classes,
avatar,
badges: '',
userName,
color: '#FFF',
message,
reply: '',
};
addEventToChat(userID, messageID, 'fourthwall', messageData);
}
async function getWinnersList(gifts) {
const winners = gifts.map(gift => gift.winner).filter(Boolean); // Remove null/undefined
const numWinners = winners.length;
if (numWinners === 0) { return ""; }
if (numWinners === 1) { return winners[0]; }
if (numWinners === 2) { return `${winners[0]} and ${winners[1]}`; }
// For 3 or more, use the Oxford comma style: A, B, and C
const allButLast = winners.slice(0, -1).join(", ");
const lastWinner = winners[winners.length - 1];
return `${allButLast}, and ${lastWinner}`;
}