From bced83db5b79ccdd833a2fd24dbc922826f1761e Mon Sep 17 00:00:00 2001 From: nuttylmao Date: Thu, 17 Apr 2025 04:48:14 +1000 Subject: [PATCH] Minor format changes + initial settings page --- multistream-alerts/index.html | 11 +- multistream-alerts/script.js | 74 ++++- multistream-alerts/settings/settings.json | 338 +++++----------------- multistream-alerts/style.css | 99 ++++++- 4 files changed, 233 insertions(+), 289 deletions(-) diff --git a/multistream-alerts/index.html b/multistream-alerts/index.html index ab16a0f..3e6224c 100644 --- a/multistream-alerts/index.html +++ b/multistream-alerts/index.html @@ -21,8 +21,15 @@ to nutty -
- I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum +
+
+ + +
+
+ + I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum I drink cum +
diff --git a/multistream-alerts/script.js b/multistream-alerts/script.js index 861c3f3..8d1dcbb 100644 --- a/multistream-alerts/script.js +++ b/multistream-alerts/script.js @@ -11,10 +11,14 @@ const avatarMap = new Map(); const alertBox = document.getElementById('alertBox'); const avatarElement = document.getElementById('avatar'); +const avatarSmallElement = document.getElementById('avatarButItsSmallerThanTheOneFromBeforeForPrettinessPurposes'); const usernameLabel = document.getElementById('username'); +const usernameTheSecondLabel = document.getElementById('usernameTheSecond'); const descriptionLabel = document.getElementById('description'); const attributeLabel = document.getElementById('attribute'); const theContentThatShowsFirstInsteadOfSecond = document.getElementById('theContentThatShowsFirstInsteadOfSecond'); +const theContentThatShowsLastInsteadOfFirst = document.getElementById('theContentThatShowsLastInsteadOfFirst'); + const messageLabel = document.getElementById('message'); let widgetLocked = false; // Needed to lock animation from overlapping @@ -63,7 +67,7 @@ const showKofiDonations = GetBooleanParam("showKofiDonations", true); const showTipeeeStreamDonations = GetBooleanParam("showTipeeeStreamDonations", true); const showFourthwallAlerts = GetBooleanParam("showFourthwallAlerts", true); -const animationSpeed = GetIntParam("showTwitchSharedChat", 8000); +const animationSpeed = GetIntParam("animationSpeed", 8000); const furryMode = GetBooleanParam("furryMode", false); @@ -257,9 +261,25 @@ async function TwitchSub(data) { const avatarURL = await GetAvatar(username); if (!isPrime) - UpdateAlertBox('twitch', avatarURL, `${username}`, `subscribed with Tier ${subTier.charAt(0)}`); + UpdateAlertBox( + 'twitch', + avatarURL, + `${username}`, + `subscribed with Tier ${subTier.charAt(0)}`, + '', + username, + '' + ); else - UpdateAlertBox('twitch', avatarURL, `${username}`, `used their Prime Sub`); + UpdateAlertBox( + 'twitch', + avatarURL, + `${username}`, + `used their Prime Sub`, + '', + username, + '' + ); } async function TwitchResub(data) { @@ -283,6 +303,7 @@ async function TwitchResub(data) { `${username}`, `resubscribed with Tier ${subTier.charAt(0)}`, `${cumulativeMonths} months`, + username, message ); else @@ -292,6 +313,7 @@ async function TwitchResub(data) { `${username}`, `used their Prime Sub`, `${cumulativeMonths} months`, + username, message ); } @@ -319,6 +341,7 @@ async function TwitchGiftSub(data) { `${username}`, `gifted a Tier ${subTier.charAt(0)} subscription`, `to ${recipient}`, + username, messageText ); } @@ -342,6 +365,7 @@ async function TwitchRewardRedemption(data) { `${username} redeemed`, `${rewardName} ${channelPointIcon} ${cost}`, '', + username, userInput ); } @@ -363,6 +387,7 @@ async function TwitchRaid(data) { `${username}`, `is raiding with a party of ${viewers}`, '', + username, '' ); } @@ -377,9 +402,10 @@ function YouTubeSuperChat(data) { UpdateAlertBox( 'youtube', avatarURL, - `🪙 ${data.user.name}`, + `${data.user.name}`, `sent a Super Chat (${data.amount})`, '', + data.user.name, data.message ); } @@ -397,6 +423,7 @@ function YouTubeSuperSticker(data) { `${data.user.name}`, `sent a Super Sticker (${data.amount})`, '', + data.user.name, '' ); } @@ -414,6 +441,7 @@ function YouTubeNewSponsor(data) { `⭐ New ${data.levelName}`, `Welcome ${data.user.name}!`, '', + data.user.name, '' ); } @@ -431,6 +459,7 @@ function YouTubeGiftMembershipReceived(data) { `${data.gifter.name}`, `gifted a membership`, `to ${data.user.name} (${data.tier})!`, + data.gifter.name, '' ); } @@ -451,6 +480,7 @@ async function StreamlabsDonation(data) { `${donater}`, `donated ${currency}${formattedAmount}`, ``, + donater, message ); } @@ -471,6 +501,7 @@ async function StreamElementsTip(data) { `${donater}`, `donated ${currency}${formattedAmount}`, ``, + donater, message ); } @@ -492,6 +523,7 @@ function PatreonPledgeCreated(data) { `${user}`, `joined Patreon ($${amount})`, ``, + user, `` ); } @@ -516,6 +548,7 @@ function KofiDonation(data) { `${user}`, `donated $${amount}`, ``, + user, message ); else @@ -524,6 +557,7 @@ function KofiDonation(data) { `${user}`, `donated ${currency} ${amount}`, ``, + user, message ); } @@ -548,6 +582,7 @@ function KofiSubscription(data) { `${user}`, `subscribed ($${amount})`, ``, + user, message ); else @@ -556,6 +591,7 @@ function KofiSubscription(data) { `${user}`, `subscribed (${currency} ${amount})`, ``, + user, message ); } @@ -578,6 +614,7 @@ function KofiResubscription(data) { `${user}`, `subscribed (${tier})`, ``, + user, message ); } @@ -610,6 +647,7 @@ function KofiShopOrder(data) { `${user}`, `ordered ${itemTotal} item(s) on Ko-fi `, `${formattedAmount}`, + user, message ); } @@ -634,6 +672,7 @@ function TipeeeStreamDonation(data) { `${user}`, `donated $${amount}`, ``, + user, message ); else @@ -643,6 +682,7 @@ function TipeeeStreamDonation(data) { `${user}`, `donated ${currency} ${amount}`, ``, + user, message ); } @@ -684,6 +724,7 @@ function FourthwallOrderPlaced(data) { `${user}`, `ordered ${item}`, attributeText, + user, message ); } @@ -712,6 +753,7 @@ function FourthwallDonation(data) { `${user}`, `donated ${formattedAmount}`, '', + user, message ); } @@ -739,6 +781,7 @@ function FourthwallSubscriptionPurchased(data) { `${user}`, `subscribed ${formattedAmount}`, '', + user, '' ); } @@ -779,6 +822,7 @@ function FourthwallGiftPurchase(data) { `${user}`, `gifted ${contents}`, attributesText, + user, message ); } @@ -797,6 +841,7 @@ function FourthwallGiftDrawStarted(data) { `🎁 ${itemName} Giveaway!`, `Type !join in the next ${durationSeconds} seconds for your chance to win!`, '', + '', '' ); } @@ -815,6 +860,7 @@ function FourthwallGiftDrawEnded(data) { `🥳 GIVEAWAY ENDED 🥳`, `Congratulations ${GetWinnersList(data.gifts)}!`, '', + '', '' ); } @@ -1096,12 +1142,12 @@ function GetWinnersList(gifts) { // return furryWords.join(''); // } -function UpdateAlertBox(platform, avatarURL, usernameText, descriptionText, attributeText, message) { +function UpdateAlertBox(platform, avatarURL, headerText, descriptionText, attributeText, username, message) { // Check if the widget is in the middle of an animation // If any alerts are requested while the animation is playing, it should be added to the alert queue if (widgetLocked) { console.debug("Animation is progress, added alert to queue"); - let data = { platform: platform, avatarURL: avatarURL, usernameText: usernameText, descriptionText: descriptionText, attributeText: attributeText, message: message }; + let data = { platform: platform, avatarURL: avatarURL, headerText: headerText, descriptionText: descriptionText, attributeText: attributeText, message: message }; alertQueue.push(data); return; } @@ -1116,14 +1162,16 @@ function UpdateAlertBox(platform, avatarURL, usernameText, descriptionText, attr // Render avatars if (showAvatar) { avatarElement.src = avatarURL; + avatarSmallElement.src = avatarURL; } // Set labels - usernameLabel.innerHTML = usernameText != null ? usernameText : ''; + usernameLabel.innerHTML = headerText != null ? headerText : ''; + usernameTheSecondLabel.innerHTML = username != null ? username : ''; descriptionLabel.innerHTML = descriptionText != null ? descriptionText : ''; attributeLabel.innerHTML = attributeText != null ? attributeText : ''; messageLabel.innerHTML = message != null ? `${message}` : ''; - messageLabel.style.opacity = 0; + theContentThatShowsLastInsteadOfFirst.style.opacity = 0; alertBox.style.height = theContentThatShowsFirstInsteadOfSecond.offsetHeight + 40 + "px"; alertBox.style.animation = 'slideInFromTop 0.5s ease-out forwards'; @@ -1133,13 +1181,11 @@ function UpdateAlertBox(platform, avatarURL, usernameText, descriptionText, attr // (3) Calculate the height of message label // (4) Set the height of alertBox // (a) Add in the CSS animation when this is working - setTimeout(() => { - alertBox.style.transition = 'all 0.5s ease-in-out'; - alertBox.style.height = messageLabel.offsetHeight + 40 + "px"; + alertBox.style.height = theContentThatShowsLastInsteadOfFirst.offsetHeight + 40 + "px"; theContentThatShowsFirstInsteadOfSecond.style.opacity = 0; - messageLabel.style.opacity = 1; + theContentThatShowsLastInsteadOfFirst.style.opacity = 1; setTimeout(() => { alertBox.style.animation = 'slideBackUp 0.5s ease-out forwards'; @@ -1147,13 +1193,13 @@ function UpdateAlertBox(platform, avatarURL, usernameText, descriptionText, attr setTimeout(() => { alertBox.style.transition = ''; theContentThatShowsFirstInsteadOfSecond.style.opacity = 1; - messageLabel.style.opacity = 0; + theContentThatShowsLastInsteadOfFirst.style.opacity = 0; alertBox.style.height = '0px'; widgetLocked = false; if (alertQueue.length > 0) { console.debug("Pulling next alert from the queue"); let data = alertQueue.shift(); - UpdateAlertBox(data.platform, data.avatarURL, data.usernameText, data.descriptionText, data.attributeText, data.message) + UpdateAlertBox(data.platform, data.avatarURL, data.headerText, data.descriptionText, data.attributeText, data.message) } }, 1000); }, messageLabel.innerText.trim() != '' ? animationSpeed : 0); diff --git a/multistream-alerts/settings/settings.json b/multistream-alerts/settings/settings.json index 412d29f..e31e2a5 100644 --- a/multistream-alerts/settings/settings.json +++ b/multistream-alerts/settings/settings.json @@ -1,13 +1,5 @@ { "settings": [ - { - "id": "showPlatform", - "label": "Show Platform", - "description": "", - "type": "checkbox", - "defaultValue": true, - "group": "Appearance" - }, { "id": "showAvatar", "label": "Show Avatar", @@ -16,46 +8,6 @@ "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", @@ -75,13 +27,19 @@ "group": "Appearance" }, { - "id": "lineSpacing", - "label": "Line Spacing", + "id": "showAvatar", + "label": "Show Avatar", "description": "", - "type": "number", - "min": 0, - "defaultValue": 1.7, - "step": ".1", + "type": "checkbox", + "defaultValue": true, + "group": "Appearance" + }, + { + "id": "useCustomBackground", + "label": "Use Custom Background", + "description": "", + "type": "checkbox", + "defaultValue": true, "group": "Appearance" }, { @@ -106,254 +64,90 @@ { "id": "hideAfter", "label": "Hide After", - "description": "Messages fade after X seconds (0 to disable)", + "description": "Alerts will show for X seconds", "type": "number", - "min": 0, + "min": 1, "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", + "id": "showAnimation", + "label": "Show Animation", "description": "", "type": "select", "options": [ { - "value": 1, - "label": "Normal" + "value": "fade-in", + "label": "Fade In" }, { - "value": 2, - "label": "Reversed" + "value": "slide-from-top", + "label": "Slide From Top" + }, + { + "value": "slide-from-bottom", + "label": "Slide From Bottom" + }, + { + "value": "slide-from-left", + "label": "Slide From Left" + }, + { + "value": "slide-from-right", + "label": "Slide From Right" } ], - "defaultValue": 1, + "defaultValue": "fade-in", "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", + "id": "hideAnimation", + "label": "Hide Animation", "description": "", "type": "select", "options": [ { - "value": 2, - "label": "Show & Highlight" + "value": "fade-out", + "label": "Fade Out" }, { - "value": 1, - "label": "Show but do not highlight" + "value": "slide-top", + "label": "Slide Top" }, { - "value": 0, - "label": "Do not show" + "value": "slide-bottom", + "label": "Slide Bottom" + }, + { + "value": "slide-left", + "label": "Slide Left" + }, + { + "value": "slide-right", + "label": "Slide Right" } ], - "defaultValue": 2, - "group": "Which Twitch messages do you want to see?" + "defaultValue": "fade-in", + "group": "General" }, { - "id": "showYouTubeMessages", - "label": "Chat Messages", + "id": "alignment", + "label": "Alignment", "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" + "type": "select", + "options": [ + { + "value": "align-to-bottom", + "label": "Align To Bottom" + }, + { + "value": "align-to-top", + "label": "Align To Top" + } + ], + "defaultValue": "align-to-bottom", + "group": "General" } ] } \ No newline at end of file diff --git a/multistream-alerts/style.css b/multistream-alerts/style.css index 7f6cb8b..0a31fed 100644 --- a/multistream-alerts/style.css +++ b/multistream-alerts/style.css @@ -40,6 +40,7 @@ html { display: block; position: absolute; width: 100%; + height: 100%; padding: calc(2 * var(--margin)); box-sizing: border-box; } @@ -84,6 +85,17 @@ html { transition: inherit; } +#theContentThatShowsLastInsteadOfFirst { + position: absolute; + display: block; + align-items: center; + z-index: 0; + position: absolute; + left: var(--margin); + top: var(--margin); + transition: inherit; +} + #avatar { display: inline; max-width: 100%; @@ -93,6 +105,15 @@ html { margin-right: 0.75em; } +#avatarButItsSmallerThanTheOneFromBeforeForPrettinessPurposes { + display: inline; + max-width: 100%; + height: 2em; + filter: drop-shadow(0px 0px 7px rgba(0, 0, 0, 0.5)); + object-fit: cover; + margin-right: 0.75em; +} + #contents { flex-grow: 1; } @@ -102,6 +123,11 @@ html { font-weight: 600; } +#usernameTheSecond { + font-size: 1em; + font-weight: 600; +} + #description { font-size: 1em; font-weight: 400; @@ -121,7 +147,6 @@ html { } #message { - position: absolute; width: calc(100% - 2 * var(--margin)); z-index: 0; left: var(--margin); @@ -154,6 +179,78 @@ html { } } +@keyframes slideInFromBottom { + 0% { + transform: translateY(100%); + opacity: 0; + } + + 100% { + transform: translateY(0); + opacity: 1; + } +} + +@keyframes slideBackDown { + 0% { + transform: translateY(0); + opacity: 1; + } + + 100% { + transform: translateY(100%); + opacity: 0; + } +} + +@keyframes slideInFromLeft { + 0% { + transform: translateX(-100%); + opacity: 0; + } + + 100% { + transform: translateX(0); + opacity: 1; + } +} + +@keyframes slideBackLeft { + 0% { + transform: translateX(0); + opacity: 1; + } + + 100% { + transform: translateX(-100%); + opacity: 0; + } +} + +@keyframes slideInFromRight { + 0% { + transform: translateX(100%); + opacity: 0; + } + + 100% { + transform: translateX(0); + opacity: 1; + } +} + +@keyframes slideBackRight { + 0% { + transform: translateX(0); + opacity: 1; + } + + 100% { + transform: translateX(100%); + opacity: 0; + } +} + /*****************/ /** CARD COLORS **/ /*****************/