From a2e2e015413a24538a90ee599aeb0c3dfe03a0fa Mon Sep 17 00:00:00 2001 From: nuttylmao Date: Sun, 6 Apr 2025 08:55:46 +1000 Subject: [PATCH] Added new widget "Multistream Alerts" --- .../icons/badges/twitch-channel-point.png | Bin 0 -> 55428 bytes .../icons/badges/youtube-broadcaster.svg | 1 + .../icons/badges/youtube-member.svg | 1 + .../icons/badges/youtube-moderator.svg | 1 + .../icons/badges/youtube-verified.svg | 1 + multistream-alerts/icons/platforms/kofi.png | Bin 0 -> 33300 bytes .../icons/platforms/patreon.png | Bin 0 -> 13276 bytes .../icons/platforms/tipeeeStream.png | Bin 0 -> 12366 bytes multistream-alerts/icons/platforms/twitch.png | Bin 0 -> 4015 bytes .../icons/platforms/youtube.png | Bin 0 -> 8618 bytes multistream-alerts/index.html | 28 + multistream-alerts/script.js | 1154 +++++++++++++++++ multistream-alerts/settings/index.html | 64 + multistream-alerts/settings/script.js | 29 + multistream-alerts/settings/settings.json | 359 +++++ multistream-alerts/style.css | 206 +++ 16 files changed, 1844 insertions(+) create mode 100644 multistream-alerts/icons/badges/twitch-channel-point.png create mode 100644 multistream-alerts/icons/badges/youtube-broadcaster.svg create mode 100644 multistream-alerts/icons/badges/youtube-member.svg create mode 100644 multistream-alerts/icons/badges/youtube-moderator.svg create mode 100644 multistream-alerts/icons/badges/youtube-verified.svg create mode 100644 multistream-alerts/icons/platforms/kofi.png create mode 100644 multistream-alerts/icons/platforms/patreon.png create mode 100644 multistream-alerts/icons/platforms/tipeeeStream.png create mode 100644 multistream-alerts/icons/platforms/twitch.png create mode 100644 multistream-alerts/icons/platforms/youtube.png create mode 100644 multistream-alerts/index.html create mode 100644 multistream-alerts/script.js create mode 100644 multistream-alerts/settings/index.html create mode 100644 multistream-alerts/settings/script.js create mode 100644 multistream-alerts/settings/settings.json create mode 100644 multistream-alerts/style.css diff --git a/multistream-alerts/icons/badges/twitch-channel-point.png b/multistream-alerts/icons/badges/twitch-channel-point.png new file mode 100644 index 0000000000000000000000000000000000000000..67d0a3effbfad7d7fe6d0fd9b971360d1eadfccc GIT binary patch literal 55428 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 literal 0 HcmV?d00001 diff --git a/multistream-alerts/icons/platforms/twitch.png b/multistream-alerts/icons/platforms/twitch.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbd6c8480cbd2c59526bb3ef0a4b460308160f3 GIT binary patch literal 4015 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 Q-%<~M%IajrUmn;0A5D{si2wiq literal 0 HcmV?d00001 diff --git a/multistream-alerts/index.html b/multistream-alerts/index.html new file mode 100644 index 0000000..ab66f44 --- /dev/null +++ b/multistream-alerts/index.html @@ -0,0 +1,28 @@ + + + + + + + + + + +

+
+
+ +
+ hotarubi_TA +
+ gifted a Tier 3 sub +
+ to nutty +
+
+
+ + + + + \ No newline at end of file diff --git a/multistream-alerts/script.js b/multistream-alerts/script.js new file mode 100644 index 0000000..654cdf4 --- /dev/null +++ b/multistream-alerts/script.js @@ -0,0 +1,1154 @@ +//////////////// +// PARAMETERS // +//////////////// + +const queryString = window.location.search; +const urlParams = new URLSearchParams(queryString); + +const sbServerAddress = urlParams.get("address") || "127.0.0.1"; +const sbServerPort = urlParams.get("port") || "8080"; +const avatarMap = new Map(); + +const alertBox = document.getElementById('alertBox'); +const avatarElement = document.getElementById('avatar'); +const usernameLabel = document.getElementById('username'); +const descriptionLabel = document.getElementById('description'); +const attributeLabel = document.getElementById('attribute'); + +///////////// +// OPTIONS // +///////////// + +const showPlatform = GetBooleanParam("showPlatform", true); +const showAvatar = GetBooleanParam("showAvatar", true); +const showTimestamps = GetBooleanParam("showTimestamps", true); +const showBadges = GetBooleanParam("showBadges", true); +const showPronouns = GetBooleanParam("showPronouns", true); +const showUsername = GetBooleanParam("showUsername", true); +const showMessage = GetBooleanParam("showMessage", true); +const font = urlParams.get("font") || ""; +const fontSize = urlParams.get("fontSize") || "30"; +const lineSpacing = urlParams.get("lineSpacing") || "1.7"; +const background = urlParams.get("background") || "#000000"; +const opacity = urlParams.get("opacity") || "0.85"; + +const hideAfter = GetIntParam("hideAfter", 0); +const excludeCommands = GetBooleanParam("excludeCommands", true); +const ignoreChatters = urlParams.get("ignoreChatters") || ""; +const scrollDirection = GetIntParam("scrollDirection", 1); +const inlineChat = GetBooleanParam("inlineChat", false); +const imageEmbedPermissionLevel = GetIntParam("imageEmbedPermissionLevel", 20); + +const showTwitchMessages = GetBooleanParam("showTwitchMessages", true); +const showTwitchAnnouncements = GetBooleanParam("showTwitchAnnouncements", true); +const showTwitchSubs = GetBooleanParam("showTwitchSubs", true); +const showTwitchChannelPointRedemptions = GetBooleanParam("showTwitchChannelPointRedemptions", true); +const showTwitchRaids = GetBooleanParam("showTwitchRaids", true); +const showTwitchSharedChat = GetIntParam("showTwitchSharedChat", 2); + +const showYouTubeMessages = GetBooleanParam("showYouTubeMessages", true); +const showYouTubeSuperChats = GetBooleanParam("showYouTubeSuperChats", true); +const showYouTubeSuperStickers = GetBooleanParam("showYouTubeSuperStickers", true); +const showYouTubeMemberships = GetBooleanParam("showYouTubeMemberships", true); + +const showStreamlabsDonations = GetBooleanParam("showStreamlabsDonations", true) +const showStreamElementsTips = GetBooleanParam("showStreamElementsTips", true); +const showPatreonMemberships = GetBooleanParam("showPatreonMemberships", true); +const showKofiDonations = GetBooleanParam("showKofiDonations", true); +const showTipeeeStreamDonations = GetBooleanParam("showTipeeeStreamDonations", true); +const showFourthwallAlerts = GetBooleanParam("showFourthwallAlerts", true); + +const furryMode = GetBooleanParam("furryMode", false); + +// Set fonts for the widget +document.body.style.fontFamily = font; +document.body.style.fontSize = `${fontSize}px`; + +// // Set line spacing +// document.documentElement.style.setProperty('--line-spacing', `${lineSpacing}em`); + +// // Set the background color +// const opacity255 = Math.round(parseFloat(opacity) * 255); +// let hexOpacity = opacity255.toString(16); +// if (hexOpacity.length < 2) { +// hexOpacity = "0" + hexOpacity; +// } +// document.body.style.background = `${background}${hexOpacity}`; + +// // Get a list of chatters to ignore +// const ignoreUserList = ignoreChatters.split(',').map(item => item.trim().toLowerCase()) || []; + +// // Set the scroll direction +// switch (scrollDirection) { +// case 1: +// document.getElementById('messageList').classList.add('normalScrollDirection'); +// break; +// case 2: +// document.getElementById('messageList').classList.add('reverseScrollDirection'); +// break; +// } + + + + +///////////////////////// +// STREAMER.BOT CLIENT // +///////////////////////// + +const client = new StreamerbotClient({ + host: sbServerAddress, + port: sbServerPort, + + onConnect: (data) => { + console.log(`Streamer.bot successfully connected to ${sbServerAddress}:${sbServerPort}`) + console.debug(data); + SetConnectionStatus(true); + }, + + onDisconnect: () => { + console.error(`Streamer.bot disconnected from ${sbServerAddress}:${sbServerPort}`) + SetConnectionStatus(false); + } +}); + +client.on('Twitch.Cheer', (response) => { + console.debug(response.data); + TwitchChatMessage(response.data); +}) + +client.on('Twitch.Sub', (response) => { + console.debug(response.data); + TwitchSub(response.data); +}) + +client.on('Twitch.ReSub', (response) => { + console.debug(response.data); + TwitchResub(response.data); +}) + +client.on('Twitch.GiftSub', (response) => { + console.debug(response.data); + TwitchGiftSub(response.data); +}) + +client.on('Twitch.RewardRedemption', (response) => { + console.debug(response.data); + TwitchRewardRedemption(response.data); +}) + +client.on('Twitch.Raid', (response) => { + console.debug(response.data); + TwitchRaid(response.data); +}) + +client.on('YouTube.SuperChat', (response) => { + console.debug(response.data); + YouTubeSuperChat(response.data); +}) + +client.on('YouTube.SuperSticker', (response) => { + console.debug(response.data); + YouTubeSuperSticker(response.data); +}) + +client.on('YouTube.NewSponsor', (response) => { + console.debug(response.data); + YouTubeNewSponsor(response.data); +}) + +client.on('YouTube.GiftMembershipReceived', (response) => { + console.debug(response.data); + YouTubeGiftMembershipReceived(response.data); +}) + +client.on('Streamlabs.Donation', (response) => { + console.debug(response.data); + StreamlabsDonation(response.data); +}) + +client.on('StreamElements.Tip', (response) => { + console.debug(response.data); + StreamElementsTip(response.data); +}) + +client.on('Patreon.PledgeCreated', (response) => { + console.debug(response.data); + PatreonPledgeCreated(response.data); +}) + +client.on('Kofi.Donation', (response) => { + console.debug(response.data); + KofiDonation(response.data); +}) + +client.on('Kofi.Subscription', (response) => { + console.debug(response.data); + KofiSubscription(response.data); +}) + +client.on('Kofi.Resubscription', (response) => { + console.debug(response.data); + KofiResubscription(response.data); +}) + +client.on('Kofi.ShopOrder', (response) => { + console.debug(response.data); + KofiShopOrder(response.data); +}) + +client.on('TipeeeStream.Donation', (response) => { + console.debug(response.data); + TipeeeStreamDonation(response.data); +}) + +client.on('Fourthwall.OrderPlaced', (response) => { + console.debug(response.data); + FourthwallOrderPlaced(response.data); +}) + +client.on('Fourthwall.Donation', (response) => { + console.debug(response.data); + FourthwallDonation(response.data); +}) + +client.on('Fourthwall.SubscriptionPurchased', (response) => { + console.debug(response.data); + FourthwallSubscriptionPurchased(response.data); +}) + +client.on('Fourthwall.GiftPurchase', (response) => { + console.debug(response.data); + FourthwallGiftPurchase(response.data); +}) + +client.on('Fourthwall.GiftDrawStarted', (response) => { + console.debug(response.data); + FourthwallGiftDrawStarted(response.data); +}) + +client.on('Fourthwall.GiftDrawEnded', (response) => { + console.debug(response.data); + FourthwallGiftDrawEnded(response.data); +}) + + + +/////////////////////// +// MULTICHAT OVERLAY // +/////////////////////// + +async function TwitchSub(data) { + if (!showTwitchSubs) + return; + + // Set the text + const username = data.user.name; + const subTier = data.sub_tier; + const isPrime = data.is_prime; + + // Render avatars + if (showAvatar) { + const avatarURL = await GetAvatar(username); + avatarElement.src = avatarURL; + } + + if (!isPrime) + UpdateAlertBox('twitch', `${username}`, `subscribed with Tier ${subTier.charAt(0)}`); + else + UpdateAlertBox('twitch', `${username}`, `used their Prime Sub`); +} + +async function TwitchResub(data) { + if (!showTwitchSubs) + return; + + // Set the text + const username = data.user.name; + const subTier = data.subTier; + const isPrime = data.isPrime; + const cumulativeMonths = data.cumulativeMonths; + const message = data.text; + + // Render avatars + if (showAvatar) { + const avatarURL = await GetAvatar(username); + avatarElement.src = avatarURL; + } + + if (!isPrime) + UpdateAlertBox( + 'twitch', + `${username}`, + `resubscribed with Tier ${subTier.charAt(0)}`, + `${cumulativeMonths} months`, + message + ); + else + UpdateAlertBox( + 'twitch', + `${username}`, + `used their Prime Sub`, + `${cumulativeMonths} months`, + message + ); + + AddMessageItem(instance, data.messageId); +} + +async function TwitchGiftSub(data) { + if (!showTwitchSubs) + return; + + // Set the text + const username = data.user.name; + const subTier = data.subTier; + const recipient = data.recipient.name; + const cumlativeTotal = data.cumlativeTotal; + + // Render avatars + if (showAvatar) { + const avatarURL = await GetAvatar(username); + avatarElement.src = avatarURL; + } + + let messageText = ''; + if (cumlativeTotal > 0) + messageText = `They've gifted ${cumlativeTotal} subs in total!`; + + UpdateAlertBox( + 'twitch', + `${username}`, + `gifted a Tier ${subTier.charAt(0)} subscription`, + `to ${recipient}`, + messageText + ); +} + +async function TwitchRewardRedemption(data) { + if (!showTwitchChannelPointRedemptions) + return; + + const username = data.user_name; + const rewardName = data.reward.title; + const cost = data.reward.cost; + const userInput = data.user_input; + const channelPointIcon = ``; + + // Render avatars + if (showAvatar) { + const username = data.user_login; + const avatarURL = await GetAvatar(username); + avatarElement.src = avatarURL; + } + + UpdateAlertBox( + 'twitch', + `${username} redeemed`, + `${rewardName} ${channelPointIcon} ${cost}`, + '', + userInput + ); +} + +async function TwitchRaid(data) { + if (!showTwitchRaids) + return; + + // Render avatars + if (showAvatar) { + const username = data.from_broadcaster_user_login; + const avatarURL = await GetAvatar(username); + avatarElement.src = avatarURL; + } + + // Set the text + const username = data.from_broadcaster_user_login; + const viewers = data.viewers; + + UpdateAlertBox( + 'twitch', + `${username}`, + `is raiding with a party of ${viewers}`, + '', + '' + ); +} + +function YouTubeSuperChat(data) { + if (!showYouTubeSuperChats) + return; + + // Render avatars + if (showAvatar) { + avatar.src = data.user.profileImageUrl; + } + + UpdateAlertBox( + 'youtube', + `🪙 ${data.user.name}`, + `sent a Super Chat (${data.amount})`, + '', + data.message + ); +} + +function YouTubeSuperSticker(data) { + if (!showYouTubeSuperStickers) + return; + + // Render avatars + if (showAvatar) { + avatar.src = FindFirstImageUrl(data); + } + + UpdateAlertBox( + 'youtube', + `${data.user.name}`, + `sent a Super Sticker (${data.amount})`, + '', + '' + ); +} + +function YouTubeNewSponsor(data) { + if (!showYouTubeMemberships) + return; + + // Render avatars + if (showAvatar) { + avatar.src = data.user.profileImageUrl; + } + + UpdateAlertBox( + 'youtube', + `⭐ New ${data.levelName}`, + `Welcome ${data.user.name}!`, + '', + '' + ); +} + +function YouTubeGiftMembershipReceived(data) { + if (!showYouTubeMemberships) + return; + + // Render avatars + if (showAvatar) { + avatar.src = data.user.profileImageUrl; + } + + UpdateAlertBox( + 'youtube', + `${data.gifter.name}`, + `gifted a membership`, + `to ${data.user.name} (${data.tier})!`, + '' + ); +} + +async function StreamlabsDonation(data) { + if (!showStreamlabsDonations) + return; + + // Set the text + const donater = data.from; + const formattedAmount = data.formattedAmount; + const currency = data.currency; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'streamlabs', + `${donater}`, + `donated ${currency}${formattedAmount}`, + ``, + message + ); +} + +async function StreamElementsTip(data) { + if (!showStreamElementsTips) + return; + + // Set the text + const donater = data.username; + const formattedAmount = `$${data.amount}`; + const currency = data.currency; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'streamelements', + `${donater}`, + `donated ${currency}${formattedAmount}`, + ``, + message + ); +} + +function KofiDonation(data) { + if (!showKofiDonations) + return; + + // Set the text + const user = data.from; + const amount = data.amount; + const currency = data.currency; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = "icons/platforms/kofi.png"; + } + + if (currency == "USD") + UpdateAlertBox( + 'kofi', + `${user}`, + `donated $${amount}`, + ``, + message + ); + else + UpdateAlertBox( + 'kofi', + `${user}`, + `donated ${currency} ${amount}`, + ``, + message + ); +} + +function KofiSubscription(data) { + if (!showKofiDonations) + return; + + // Set the text + const user = data.from; + const amount = data.amount; + const currency = data.currency; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = "icons/platforms/kofi.png"; + } + + if (currency == "USD") + UpdateAlertBox( + 'kofi', + `${user}`, + `subscribed ($${amount})`, + ``, + message + ); + else + UpdateAlertBox( + 'kofi', + `${user}`, + `subscribed (${currency} ${amount})`, + ``, + message + ); +} + +function KofiResubscription(data) { + if (!showKofiDonations) + return; + + // Set the text + const user = data.from; + const tier = data.tier; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = "icons/platforms/kofi.png"; + } + + UpdateAlertBox( + 'kofi', + `${user}`, + `subscribed (${tier})`, + ``, + message + ); +} + +function KofiShopOrder(data) { + if (!showKofiDonations) + return; + + // Set the text + const user = data.from; + const amount = data.amount; + const currency = data.currency; + const message = data.message; + const itemTotal = data.items.length; + let formattedAmount = ""; + + if (amount == 0) + formattedAmount = "" + else if (currency == "USD") + formattedAmount = `$${amount}`; + else + formattedAmount = `${currency} ${amount}`; + + // Render avatars + if (showAvatar) { + avatar.src = "icons/platforms/kofi.png"; + } + + UpdateAlertBox( + 'kofi', + `${user}`, + `ordered ${itemTotal} item(s) on Ko-fi `, + `${formattedAmount}`, + message + ); +} + +function TipeeeStreamDonation(data) { + if (!showTipeeeStreamDonations) + return; + + // Set the text + const user = data.username; + const amount = data.amount; + const currency = data.currency; + const message = data.message; + + // Render avatars + if (showAvatar) { + avatar.src = "icons/platforms/tipeeeStream.png"; + } + + if (currency == "USD") + UpdateAlertBox( + 'tipeeeStream', + `${user}`, + `donated $${amount}`, + ``, + message + ); + else + UpdateAlertBox( + 'tipeeeStream', + `${user}`, + `donated ${currency} ${amount}`, + ``, + message + ); +} + +function FourthwallOrderPlaced(data) { + if (!showFourthwallAlerts) + return; + + // Set the text + let user = data.username; + const orderTotal = data.total; + const currency = data.currency; + const item = data.variants[0].name; + const itemsOrdered = data.variants.length; + const message = DecodeHTMLString(data.statmessageus); + const itemImageUrl = data.variants[0].image; + + // If there user did not provide a username, just say "Someone" + if (user == undefined) + user = "Someone"; + + // Render avatars + if (showAvatar) { + avatar.src = itemImageUrl; + } + + let attributeText = "" + + // If the user ordered more than one item, write how many items they ordered + if (itemsOrdered > 1) + attributeText += `and ${itemsOrdered - 1} other item(s)!`; + + // If the user spent money, put the order total + if (orderTotal == 0) + attributeText += ``; + else if (currency == "USD") + attributeText += ` ($${orderTotal})`; + else + attributeText += ` (${orderTotal} ${currency})`; + + UpdateAlertBox( + 'fourthwall', + `${user}`, + `ordered ${item}`, + attributeText, + message + ); +} + +function FourthwallDonation(data) { + if (!showFourthwallAlerts) + return; + + // Set the text + let user = data.username; + const amount = data.amount; + const currency = data.currency; + const message = data.message; + + let formattedAmount = ''; + + // If the user spent money, put the order total + if (currency == "USD") + formattedAmount += ` $${amount}`; + else + formattedAmount += ` ${currency} ${amount}`; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'fourthwall', + `${user}`, + `donated ${formattedAmount}`, + '', + message + ); +} + +function FourthwallSubscriptionPurchased(data) { + if (!showFourthwallAlerts) + return; + + // Set the text + let user = data.nickname; + const amount = data.amount; + const currency = data.currency; + + let formattedAmount = ''; + + // If the user spent money, put the order total + if (currency == "USD") + formattedAmount += ` ($${amount})`; + else + formattedAmount += ` (${currency} ${amount})`; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'fourthwall', + `${user}`, + `subscribed ${formattedAmount}`, + '', + '' + ); +} + +function FourthwallGiftPurchase(data) { + console.log(data); + if (!showFourthwallAlerts) + return; + + // Set the text + let user = data.username; + const total = data.total; + const currency = data.currency; + const gifts = data.gifts.length; + const itemName = data.offer.name; + const itemImageUrl = data.offer.imageUrl; + const message = DecodeHTMLString(data.statmessageus); + + let contents = ''; + let attributesText = ''; + + // If there is more than one gifted item, display the number of gifts + if (gifts > 1) + contents += ` ${gifts} x `; + + // The name of the item to be given away + contents += ` ${itemName}`; + + // If the user spent money, put the order total + if (currency == "USD") + attributesText = `$${total}`; + else + attributesText = `${currency}${total}`; + + // Render avatars + if (showAvatar) { + avatar.src = itemImageUrl; + } + + UpdateAlertBox( + 'fourthwall', + `${user}`, + `gifted ${contents}`, + attributesText, + message + ); +} + +function FourthwallGiftDrawStarted(data) { + if (!showFourthwallAlerts) + return; + + // Set the text + const durationSeconds = data.durationSeconds; + const itemName = data.offer.name; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'fourthwall', + `🎁 ${itemName} Giveaway!`, + `Type !join in the next ${durationSeconds} seconds for your chance to win!`, + '', + '' + ); +} + +function FourthwallGiftDrawEnded(data) { + if (!showFourthwallAlerts) + return; + + // Render avatars + if (showAvatar) { + avatar.src = ''; + } + + UpdateAlertBox( + 'fourthwall', + `🥳 GIVEAWAY ENDED 🥳`, + `Congratulations ${GetWinnersList(data.gifts)}!`, + '', + '' + ); +} + + + +////////////////////// +// HELPER FUNCTIONS // +////////////////////// + +function GetBooleanParam(paramName, defaultValue) { + const urlParams = new URLSearchParams(window.location.search); + const paramValue = urlParams.get(paramName); + + if (paramValue === null) { + return defaultValue; // Parameter not found + } + + const lowercaseValue = paramValue.toLowerCase(); // Handle case-insensitivity + + if (lowercaseValue === 'true') { + return true; + } else if (lowercaseValue === 'false') { + return false; + } else { + return paramValue; // Return original string if not 'true' or 'false' + } +} + +function GetIntParam(paramName, defaultValue) { + const urlParams = new URLSearchParams(window.location.search); + const paramValue = urlParams.get(paramName); + + if (paramValue === null) { + return defaultValue; // or undefined, or a default value, depending on your needs + } + + console.log(paramValue); + + const intValue = parseInt(paramValue, 10); // Parse as base 10 integer + + if (isNaN(intValue)) { + return null; // or handle the error in another way, e.g., throw an error + } + + return intValue; +} + +// function GetCurrentTimeFormatted() { +// const now = new Date(); +// let hours = now.getHours(); +// const minutes = String(now.getMinutes()).padStart(2, '0'); +// const ampm = hours >= 12 ? 'PM' : 'AM'; + +// hours = hours % 12; +// hours = hours ? hours : 12; // the hour '0' should be '12' + +// const formattedTime = `${hours}:${minutes} ${ampm}`; +// return formattedTime; +// } + +async function GetAvatar(username) { + if (avatarMap.has(username)) { + console.debug(`Avatar found for ${username}. Retrieving from hash map.`) + return avatarMap.get(username); + } + else { + console.debug(`No avatar found for ${username}. Retrieving from Decapi.`) + let response = await fetch('https://decapi.me/twitch/avatar/' + username); + let data = await response.text() + avatarMap.set(username, data); + return data; + } +} + +// async function GetPronouns(platform, username) { +// const response = await client.getUserPronouns(platform, username); +// const userFound = response.pronoun.userFound; +// const pronouns = `${response.pronoun.pronounSubject}/${response.pronoun.pronounObject}`; + +// if (userFound) +// return `${response.pronoun.pronounSubject}/${response.pronoun.pronounObject}`; +// else +// return ''; +// } + +// function IsImageUrl(url) { +// return url.match(/^http.*\.(jpeg|jpg|gif|png)$/) != null; +// } + +// function IsImageUrl(url) { +// try { +// const { pathname } = new URL(url); +// // Only check the pathname since query parameters are not included in it. +// return /\.(png|jpe?g|webp|gif)$/i.test(pathname); +// } catch (error) { +// // Return false if the URL is invalid. +// return false; +// } +// } + +// function AddMessageItem(element, elementID, platform, userId) { +// // Calculate the height of the div before inserting +// const tempDiv = document.getElementById('IPutThisHereSoICanCalculateHowBigEachMessageIsSupposedToBeBeforeIAddItToTheMessageList'); +// const tempDivTwoElectricBoogaloo = document.createElement('div'); +// tempDivTwoElectricBoogaloo.appendChild(element); +// tempDiv.appendChild(tempDivTwoElectricBoogaloo); + +// setTimeout(function () { +// const calculatedHeight = tempDivTwoElectricBoogaloo.offsetHeight + "px"; + +// // Create a new line item to add to the message list later +// var lineItem = document.createElement('li'); +// lineItem.id = elementID; +// lineItem.dataset.platform = platform; +// lineItem.dataset.userId = userId; + +// // Set scroll direction +// if (scrollDirection == 2) +// lineItem.classList.add('reverseLineItemDirection'); + +// // Move the element from the temp div to the new line item +// lineItem.appendChild(tempDiv.firstElementChild); + +// // Add the line item to the list and animate it +// // We need to manually set the height as straight CSS can't animate on "height: auto" +// messageList.appendChild(lineItem); +// setTimeout(function () { +// lineItem.className = lineItem.className + " show"; +// lineItem.style.maxHeight = calculatedHeight; +// // After it's done animating, remove the height constraint in case the div needs to get bigger +// setTimeout(function () { +// lineItem.style.maxHeight = "none"; +// }, 1000); +// }, 10); + +// // Remove old messages that have gone off screen to save memory +// while (messageList.clientHeight > 5 * window.innerHeight) { +// messageList.removeChild(messageList.firstChild); +// } + +// if (hideAfter > 0) { +// setTimeout(function () { +// lineItem.style.opacity = 0; +// setTimeout(function () { +// messageList.removeChild(lineItem); +// }, 1000); +// }, hideAfter * 1000); +// } + +// }, 200); +// } + +function DecodeHTMLString(html) { + var txt = document.createElement("textarea"); + txt.innerHTML = html; + return txt.value; +} + +// I used Gemini for this shit so if it doesn't work, blame Google +function FindFirstImageUrl(jsonObject) { + if (typeof jsonObject !== 'object' || jsonObject === null) { + return null; // Handle invalid input + } + + function iterate(obj) { + if (Array.isArray(obj)) { + for (const item of obj) { + const result = iterate(item); + if (result) { + return result; + } + } + return null; + } + + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + if (key === 'imageUrl') { + return obj[key]; // Found it! Return the value. + } + + if (typeof obj[key] === 'object' && obj[key] !== null) { + const result = iterate(obj[key]); // Recursive call for nested objects + if (result) { + return result; // Propagate the found value + } + } + } + } + return null; // Key not found in this level + } + + return iterate(jsonObject); +} + +// function IsThisUserAllowedToPostImagesOrNotReturnTrueIfTheyCanReturnFalseIfTheyCannot(targetPermissions, data, platform) { +// return GetPermissionLevel(data, platform) >= targetPermissions; +// } + +// function GetPermissionLevel(data, platform) { +// switch (platform) { +// case 'twitch': +// if (data.message.role >= 4) +// return 40; +// else if (data.message.role >= 3) +// return 30; +// else if (data.message.role >= 2) +// return 20; +// else if (data.message.role >= 2 || data.message.subscriber) +// return 15; +// else +// return 10; +// case 'youtube': +// if (data.user.isOwner) +// return 40; +// else if (data.user.isModerator) +// return 30; +// else if (data.user.isSponsor) +// return 15; +// else +// return 10; +// } +// } + +function GetWinnersList(gifts) { + const winners = gifts.map(gift => gift.winner); + const numWinners = winners.length; + + if (numWinners === 0) { + return ""; + } else if (numWinners === 1) { + return winners[0]; + } else if (numWinners === 2) { + return `${winners[0]} and ${winners[1]}`; + } else { + const lastWinner = winners.pop(); + const secondLastWinner = winners.pop(); + return `${winners.join(", ")}, ${secondLastWinner} and ${lastWinner}`; + } +} + +// function TranslateToFurry(sentence) { +// const words = sentence.toLowerCase().split(/\b/); + +// const furryWords = words.map(word => { +// if (/\w+/.test(word)) { +// let newWord = word; + +// // Common substitutions +// newWord = newWord.replace(/l/g, 'w'); +// newWord = newWord.replace(/r/g, 'w'); +// newWord = newWord.replace(/th/g, 'f'); +// newWord = newWord.replace(/you/g, 'yous'); +// newWord = newWord.replace(/my/g, 'mah'); +// newWord = newWord.replace(/me/g, 'meh'); +// newWord = newWord.replace(/am/g, 'am'); +// newWord = newWord.replace(/is/g, 'is'); +// newWord = newWord.replace(/are/g, 'are'); +// newWord = newWord.replace(/very/g, 'vewy'); +// newWord = newWord.replace(/pretty/g, 'pwetty'); +// newWord = newWord.replace(/little/g, 'wittle'); +// newWord = newWord.replace(/nice/g, 'nyce'); + +// // Random additions +// if (Math.random() < 0.15) { +// newWord += ' nya~'; +// } else if (Math.random() < 0.1) { +// newWord += ' >w<'; +// } else if (Math.random() < 0.05) { +// newWord += ' owo'; +// } + +// return newWord; +// } +// return word; +// }); + +// return furryWords.join(''); +// } + +function UpdateAlertBox(platform, usernameText, descriptionText, attributeText, message) { + // Set the card background colors + alertBox.classList = ''; + alertBox.classList.add(platform); + + usernameLabel.innerHTML = usernameText != null ? usernameText : ''; + descriptionLabel.innerHTML = descriptionText != null ? descriptionText : ''; + attributeLabel.innerHTML = attributeText != null ? attributeText : ''; +} + + +/////////////////////////////////// +// STREAMER.BOT WEBSOCKET STATUS // +/////////////////////////////////// + +// This function sets the visibility of the Streamer.bot status label on the overlay +function SetConnectionStatus(connected) { + let statusContainer = document.getElementById("statusContainer"); + if (connected) { + statusContainer.style.background = "#2FB774"; + statusContainer.innerText = "Connected!"; + statusContainer.style.opacity = 1; + setTimeout(() => { + statusContainer.style.transition = "all 2s ease"; + statusContainer.style.opacity = 0; + }, 10); + } + else { + statusContainer.style.background = "#D12025"; + statusContainer.innerText = "Connecting..."; + statusContainer.style.transition = ""; + statusContainer.style.opacity = 1; + } +} \ No newline at end of file diff --git a/multistream-alerts/settings/index.html b/multistream-alerts/settings/index.html new file mode 100644 index 0000000..7ddcb25 --- /dev/null +++ b/multistream-alerts/settings/index.html @@ -0,0 +1,64 @@ + + + + + + + Settings + + + + + + + +
+ +
+ + + + + + \ No newline at end of file diff --git a/multistream-alerts/settings/script.js b/multistream-alerts/settings/script.js new file mode 100644 index 0000000..45fcbf9 --- /dev/null +++ b/multistream-alerts/settings/script.js @@ -0,0 +1,29 @@ +let settingsContainer = document.getElementById('settings-container'); +settingsContainer.src = `../../.utilities/settings-page-builder?settingsJson=${window.location.href}/settings.json` +console.log(settingsContainer.src); + +function reloadWidget(data) { + let widget = document.getElementById("widget"); + widget.src = `${getParentUrl()}?${data}`; +} + +function getParentUrl() { + const currentUrl = window.location.href; + const urlParts = currentUrl.split('/'); + + // Remove the last part of the URL (the current page/file) + urlParts.pop(); + + // Remove the last part again to go one directory up + urlParts.pop(); + + // Reconstruct the URL + const parentUrl = urlParts.join('/'); + + // Ensure there's a trailing slash if necessary (if it was a directory) + if (urlParts.length > 2 && !parentUrl.endsWith('/')) { + return parentUrl + '/'; + } + + return parentUrl; +} \ No newline at end of file diff --git a/multistream-alerts/settings/settings.json b/multistream-alerts/settings/settings.json new file mode 100644 index 0000000..412d29f --- /dev/null +++ b/multistream-alerts/settings/settings.json @@ -0,0 +1,359 @@ +{ + "settings": [ + { + "id": "showPlatform", + "label": "Show Platform", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showAvatar", + "label": "Show Avatar", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showTimestamps", + "label": "Show Timestamps", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showBadges", + "label": "Show Badges", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showPronouns", + "label": "Show Pronouns", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showUsername", + "label": "Show Username", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "showMessage", + "label": "Show Message", + "description": "Honestly, if you turn this off, you're stupid lmao", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "font", + "label": "Font", + "description": "", + "type": "text", + "defaultValue": "", + "group": "Appearance" + }, + { + "id": "fontSize", + "label": "Font Size", + "description": "", + "type": "number", + "min": 1, + "max": 120, + "defaultValue": 30, + "group": "Appearance" + }, + { + "id": "lineSpacing", + "label": "Line Spacing", + "description": "", + "type": "number", + "min": 0, + "defaultValue": 1.7, + "step": ".1", + "group": "Appearance" + }, + { + "id": "background", + "label": "Background", + "description": "", + "type": "color", + "defaultValue": "#000000", + "group": "Appearance" + }, + { + "id": "opacity", + "label": "Background Opacity", + "description": "", + "type": "number", + "defaultValue": "0.85", + "min": 0, + "max": 1, + "step": ".01", + "group": "Appearance" + }, + { + "id": "hideAfter", + "label": "Hide After", + "description": "Messages fade after X seconds (0 to disable)", + "type": "number", + "min": 0, + "max": 120, + "defaultValue": 0, + "group": "General" + }, + { + "id": "excludeCommands", + "label": "Exclude Commands", + "description": "Hide messages starting with \"!\"", + "type": "checkbox", + "defaultValue": true, + "group": "General" + }, + { + "id": "ignoreChatters", + "label": "Ignore Chatters", + "description": "Ignored chatters will not be shown", + "type": "text", + "defaultValue": "StreamElements,Streamlabs", + "group": "General" + }, + { + "id": "scrollDirection", + "label": "Scroll Direction", + "description": "", + "type": "select", + "options": [ + { + "value": 1, + "label": "Normal" + }, + { + "value": 2, + "label": "Reversed" + } + ], + "defaultValue": 1, + "group": "General" + }, + { + "id": "inlineChat", + "label": "In-line Chat", + "description": "Remove the line space after the username", + "type": "checkbox", + "defaultValue": false, + "group": "General" + }, + { + "id": "imageEmbedPermissionLevel", + "label": "Embed Images", + "description": "Automatically embed images for these users", + "type": "select", + "options": [ + { + "value": 40, + "label": "Broadcaster" + }, + { + "value": 30, + "label": "Mods & Broadcaster" + }, + { + "value": 20, + "label": "VIPs, Mods & Broadcaster" + }, + { + "value": 15, + "label": "Subs, VIPs, Mods & Broadcaster" + }, + { + "value": 10, + "label": "Everyone" + }, + { + "value": 69420, + "label": "Nobody" + } + ], + "defaultValue": 20, + "group": "General" + }, + { + "id": "showTwitchMessages", + "label": "Chat Messages", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showTwitchAnnouncements", + "label": "Announcements", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showTwitchSubs", + "label": "New Subscribers", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showTwitchChannelPointRedemptions", + "label": "Channel Point Redemptions", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showTwitchRaids", + "label": "Raids", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showTwitchSharedChat", + "label": "Shared Chat Messages", + "description": "", + "type": "select", + "options": [ + { + "value": 2, + "label": "Show & Highlight" + }, + { + "value": 1, + "label": "Show but do not highlight" + }, + { + "value": 0, + "label": "Do not show" + } + ], + "defaultValue": 2, + "group": "Which Twitch messages do you want to see?" + }, + { + "id": "showYouTubeMessages", + "label": "Chat Messages", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which YouTube messages do you want to see?" + }, + { + "id": "showYouTubeSuperChats", + "label": "Super Chats", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which YouTube messages do you want to see?" + }, + { + "id": "showYouTubeSuperStickers", + "label": "Super Stickers", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which YouTube messages do you want to see?" + }, + { + "id": "showYouTubeMemberships", + "label": "Memberships", + "description": "", + "type": "checkbox", + "defaultValue": true, + "group": "Which YouTube messages do you want to see?" + }, + { + "id": "showStreamlabsDonations", + "label": "Streamlabs Tips", + "description": "
Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "showStreamElementsTips", + "label": "StreamElements Tips", + "description": "Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "showPatreonMemberships", + "label": "Patreon Memberships", + "description": "Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "showKofiDonations", + "label": "Ko-fi Donations", + "description": "Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "showTipeeeStreamDonations", + "label": "TipeeeStream Donations", + "description": "Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "showFourthwallAlerts", + "label": "Fourthwall Alerts", + "description": "Click to connect", + "type": "checkbox", + "defaultValue": true, + "group": "Which donation messages do you want to see?" + }, + { + "id": "furryMode", + "label": "Furry Mode", + "description": "Meow", + "type": "checkbox", + "defaultValue": false, + "group": "Very Important Stuff" + }, + { + "id": "address", + "label": "Address", + "description": "Streamer.bot Websocket Server Address", + "type": "text", + "defaultValue": "127.0.0.1", + "group": "Advanced" + }, + { + "id": "port", + "label": "Port", + "description": "Streamer.bot Websocket Server Port", + "type": "text", + "defaultValue": "8080", + "group": "Advanced" + } + ] +} \ No newline at end of file diff --git a/multistream-alerts/style.css b/multistream-alerts/style.css new file mode 100644 index 0000000..ba631f5 --- /dev/null +++ b/multistream-alerts/style.css @@ -0,0 +1,206 @@ +* { + margin: 0; + padding: 0; + --margin: 40px; + /* --border-radius: 20px; */ + font-size: 30px; + /* --line-spacing: 1.7em; */ +} + +body { + overflow: hidden; +} + +html { + width: 100vw; + height: 100vh; + scroll-behavior: smooth; + /* background: #000000d9; */ + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; + color: white; + text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); + overflow-wrap: break-word; +} + +#statusContainer { + font-weight: 500; + font-size: 30px; + text-align: center; + background-color: #D12025; + color: white; + padding: 10px; + border-radius: 10px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +#mainContainer { + display: block; + position: absolute; + width: 100%; + padding: var(--margin); + box-sizing: border-box; +} + +#alertBox { + display: flex; + padding: 0.5em; + border-radius: 0.75em; + filter: drop-shadow(15px 15px 7px rgba(0, 0, 0, 1)); + position: relative; + align-items: center; + overflow: hidden; + /* text-align: center; */ +} + +/* #alertBox::before { + content: ""; + position: absolute; + top: -50px; + right: -50px; + bottom: -50px; + left: -50px; + background-image: url('https://static-cdn.jtvnw.net/jtv_user_pictures/272e643e-4d43-415f-9ee1-18916e825411-profile_image-300x300.png'); + background-color: rgba(0, 0, 0, 0.6); + background-size: cover; + background-position: center; + background-blend-mode: multiply; + filter: blur(25px); + z-index: -1; +} */ + +#avatar { + display: inline; + max-width: 100%; + height: 4em; + filter: drop-shadow(0px 0px 7px rgba(0, 0, 0, 0.5)); + object-fit: cover; + margin-right: 0.75em; +} + +#contents { + flex-grow: 1; +} + +#username { + font-size: 1.2em; + font-weight: 600; +} + +#description { + font-size: 1em; + font-weight: 400; +} + +#attribute { + font-size: 0.8em; + font-weight: 400; +} + +.profilePic { + border-radius: 50%; +} + +.square { + border-radius: 0.5em; +} + +/*****************/ +/** CARD COLORS **/ +/*****************/ + +.announcementBlue { + background: linear-gradient(#03d3d7BF, #8d49feBF) !important; +} + +.announcementGreen { + background: linear-gradient(#01da86BF, #55bee4BF) !important; +} + +.announcementOrange { + background: linear-gradient(#feb419BF, #e1df00BF) !important; +} + +.announcementPurple { + background: linear-gradient(#9548ffBF, #fc74e6BF) !important; +} + +.twitch { + background: linear-gradient(#6d5ca1bf, #9146ffBF) !important; +} + +.youtube { + background: linear-gradient(#FF6C60BF, #FF0707BF) !important; +} + +.streamlabs { + background: linear-gradient(#73dabbbf, #397765bf) !important; +} + +.streamelements { + background: linear-gradient(#263b8abf, #0a112abf) !important; +} + +.patreon { + background: linear-gradient(#c76633bf, #fd5e0abf) !important; +} + +.kofi { + background: linear-gradient(#54c7eebf, #08c2ffbf) !important; +} + +.tipeeeStream { + background: linear-gradient(#120e23bf, #5d192abf) !important; +} + +.fourthwall { + background: linear-gradient(#466edbbf, #1c56f5bf) !important; +} + +.blank { + background: #adadad00 !important; +} + +.highlightMessage { + background: #adadad46; +} + +/****************/ +/** ANIMATIONS **/ +/****************/ + +.statusConnected { + animation-name: statusConnected; + animation-duration: 2s; + animation-fill-mode: forwards; +} + +.statusDisconnected { + animation-name: statusDisconnected; + animation-duration: 0.5s; + animation-fill-mode: forwards; +} + +@keyframes statusConnected { + 0% { + opacity: 1; + background-color: #2FB774; + } + + 100% { + opacity: 0; + background-color: #2FB774; + } +} + +@keyframes statusDisconnected { + 0% { + background-color: #D12025; + } + + 100% { + background-color: #D12025; + } +} \ No newline at end of file

IU}=X8jP}^4dI)s^Ic(UlXszaZ-X^C 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 \ No newline at end of file diff --git a/multistream-alerts/icons/badges/youtube-member.svg b/multistream-alerts/icons/badges/youtube-member.svg new file mode 100644 index 0000000..12720b9 --- /dev/null +++ b/multistream-alerts/icons/badges/youtube-member.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/multistream-alerts/icons/badges/youtube-moderator.svg b/multistream-alerts/icons/badges/youtube-moderator.svg new file mode 100644 index 0000000..45b2718 --- /dev/null +++ b/multistream-alerts/icons/badges/youtube-moderator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/multistream-alerts/icons/badges/youtube-verified.svg b/multistream-alerts/icons/badges/youtube-verified.svg new file mode 100644 index 0000000..5e85909 --- /dev/null +++ b/multistream-alerts/icons/badges/youtube-verified.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/multistream-alerts/icons/platforms/kofi.png b/multistream-alerts/icons/platforms/kofi.png new file mode 100644 index 0000000000000000000000000000000000000000..8812cacdcbcc8ff6cb9c19f500b3661a2e41be9a GIT binary patch literal 33300 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 literal 0 HcmV?d00001 diff --git a/multistream-alerts/icons/platforms/patreon.png b/multistream-alerts/icons/platforms/patreon.png new file mode 100644 index 0000000000000000000000000000000000000000..22c97486cbf001513caccbc6c91286c4656e284f GIT binary patch literal 13276 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