git commit -m "Adding the initial files"

This commit is contained in:
Maulerant 2024-05-20 02:45:57 -07:00
parent 624b21bded
commit e8fd275db3
7 changed files with 689 additions and 0 deletions

1
Bloody Chat (Data).txt Normal file
View File

@ -0,0 +1 @@
{"testMessage":"Test Message","showTopDegrade":"none","showBottonDegrade":"none","msgBorderColorUser":"nao","msgBorderColor":"rgba(1, 1, 1, 0)","msgBackgroundColor":"rgb(0, 0, 0)","badgeBackgroundColor":"rgba(255, 254, 254, 0)","msgBorderPaddingX":5,"msgBorderPaddingY":10,"backgroundColor":"rgba(1, 1, 1, 0)","carimboHora":"nao","font":"Montserrat","messageColor":"#ffffff","userColor":"#fff","usernameFontSize":"500","textShadow":"rgb(0, 0, 0) 0px 0px 0px","badgeSize":25,"usernameSize":20,"messageFontSize":"900","emoteSize":30,"alignMessages":"position: absolute","hideCommands":"true","messagesLimit":0,"hideAfter":0,"ignoredUsers":"StreamElements,StreamLabs,NightBot","animationIn":"fadeIn","animationOut":"fadeOutDownBig","widgetName":"Bloody Chat","widgetAuthor":"doublerainbowoverlay","messageSize":20,"fontSize":"400"}

302
Bloody Chat (Fields).txt Normal file
View File

@ -0,0 +1,302 @@
{
"testMessage": {
"type": "button",
"label": "Test Message",
"value": "Test Message",
"group": "Test"
},
"showTopDegrade": {
"label": "Show Upper Gradient:",
"type": "dropdown",
"value": "inline-block",
"options": {
"none": "No",
"inline-block": "Yes"
},
"group": "Customization"
},
"showBottonDegrade": {
"label": "Show Botton Gradient:",
"type": "dropdown",
"value": "inline-block",
"options": {
"none": "No",
"inline-block": "Yes"
},
"group": "Customization"
},
"msgBorderColorUser": {
"label": "Border Color Based on User:",
"type": "dropdown",
"value": "nao",
"options": {
"nao": "No",
"sim": "Yes"
},
"group": "Customization"
},
"msgBorderColor": {
"type": "colorpicker",
"label": "Message Border Color:",
"value": "#ffd539",
"group": "Customization"
},
"msgBorderPaddingX": {
"type": "slider",
"label": "Border Padding Size (X Axis):",
"value": 8,
"min": 2,
"max": 24,
"step": 1,
"group": "Font"
},
"msgBorderPaddingY": {
"type": "slider",
"label": "Border Padding Size (Y Axis):",
"value": 8,
"min": 2,
"max": 24,
"step": 1,
"group": "Font"
},
"msgBackgroundColor": {
"type": "colorpicker",
"label": "Message Background Color:",
"value": "rgba(0,0,0,0)",
"group": "Customization"
},
"badgeBackgroundColor": {
"type": "colorpicker",
"label": "Badge Background Color:",
"value": "rgba(0,0,0,0)",
"group": "Customization"
},
"backgroundColor": {
"type": "colorpicker",
"label": "Chat Background Color:",
"value": "rgba(17,11,44,1)",
"group": "Customization"
},
"carimboHora": {
"label": "Show Time Date Stamp:",
"type": "dropdown",
"value": "nao",
"options": {
"nao": "No",
"sim": "Yes"
},
"group": "Customization"
},
"font": {
"type": "googleFont",
"label": "Font:",
"value": "Roboto",
"group": "Font"
},
"messageColor": {
"type": "colorpicker",
"label": "Message Color:",
"value": "#fff",
"group": "Font"
},
"userColor": {
"type": "colorpicker",
"label": "User Color:",
"value": "#fff",
"group": "Font"
},
"fontSize": {
"label": "Font Size:",
"type": "dropdown",
"value": "700",
"options": {
"100": "Fine (100)",
"300": "Soft (300)",
"400": "Regular (400)",
"500": "Medium (500)",
"700": "Bold (700)",
"900": "Bold Black (900)"
},
"group": "Font"
},
"textShadow": {
"type": "text",
"label": "Text Shadow:",
"value": "rgb(0, 0, 0) 0px 0px 0px",
"group": "Font"
},
"badgeSize": {
"type": "slider",
"label": "Badges Size:",
"value": 24,
"min": 16,
"max": 36,
"step": 1,
"group": "Font"
},
"usernameSize": {
"type": "slider",
"label": "Username Size:",
"value": 24,
"min": 16,
"max": 30,
"step": 1,
"group": "Font"
},
"messageSize": {
"type": "slider",
"label": "Message Size:",
"value": 24,
"min": 16,
"max": 30,
"step": 1,
"group": "Font"
},
"emoteSize": {
"type": "slider",
"label": "Emotes Size:",
"value": 24,
"min": 16,
"max": 60,
"step": 1,
"group": "Font"
},
"alignMessages": {
"label": "Messages Direction:",
"type": "dropdown",
"value": "position: absolute",
"options": {
"display: block": "Up to Down",
"position: absolute": "Down to Up"
},
"group": "Configurations"
},
"hideCommands": {
"label": "Ignore Commands:",
"type": "dropdown",
"group": "Configurations",
"value": "true",
"options": {
"true": "Yes",
"false": "No"
},
"group": "Configurations"
},
"messagesLimit":{
"type": "slider",
"label": "Messages Limit:",
"value": 0,
"min": 0,
"max": 50,
"step": 1,
"group": "Configurations"
},
"hideAfter": {
"type": "slider",
"label": "Remove msg (0 to disable):",
"value": 0,
"min": 0,
"max": 60,
"step": 1,
"group": "Configurations"
},
"ignoredUsers": {
"label": "Ignored Users (by commas):",
"type": "text",
"value": "StreamElements,StreamLabs,NightBot",
"group": "Configurations"
},
"animationIn": {
"type": "dropdown",
"label": "In Animation:",
"value": "bounceInUp",
"options": {
"none": "None",
"bounceIn": "bounceIn",
"bounceInDown": "bounceInDown",
"bounceInLeft": "bounceInLeft",
"bounceInRight": "bounceInRight",
"bounceInUp": "bounceInUp",
"fadeIn": "fadeIn",
"fadeInDown": "fadeInDown",
"fadeInDownBig": "fadeInDownBig",
"fadeInLeft": "fadeInLeft",
"fadeInLeftBig": "fadeInLeftBig",
"fadeInRight": "fadeInRight",
"fadeInRightBig": "fadeInRightBig",
"fadeInUp": "fadeInUp",
"fadeInUpBig": "fadeInUpBig",
"flipInX": "flipInX",
"flipInY": "flipInY",
"lightSpeedIn": "lightSpeedIn",
"rotateIn": "rotateIn",
"rotateInDownLeft": "rotateInDownLeft",
"rotateInDownRight": "rotateInDownRight",
"rotateInUpLeft": "rotateInUpLeft",
"rotateInUpRight": "rotateInUpRight",
"slideInUp": "slideInUp",
"slideInDown": "slideInDown",
"slideInLeft": "slideInLeft",
"slideInRight": "slideInRight",
"zoomIn": "zoomIn",
"zoomInDown": "zoomInDown",
"zoomInLeft": "zoomInLeft",
"zoomInRight": "zoomInRight",
"zoomInUp": "zoomInUp",
"jackInTheBox": "jackInTheBox",
"rollIn": "rollIn"
},
"group": "Configurations"
},
"animationOut": {
"type": "dropdown",
"label": "Out Animation:",
"value": "none",
"options": {
"none": "None",
"bounceOut": "bounceOut",
"bounceOutDown": "bounceOutDown",
"bounceOutLeft": "bounceOutLeft",
"bounceOutRight": "bounceOutRight",
"bounceOutUp": "bounceOutUp",
"fadeOut": "fadeOut",
"fadeOutDown": "fadeOutDown",
"fadeOutDownBig": "fadeOutDownBig",
"fadeOutLeft": "fadeOutLeft",
"fadeOutLeftBig": "fadeOutLeftBig",
"fadeOutRight": "fadeOutRight",
"fadeOutRightBig": "fadeOutRightBig",
"fadeOutUp": "fadeOutUp",
"fadeOutUpBig": "fadeOutUpBig",
"flipOutX": "flipOutX",
"flipOutY": "flipOutY",
"lightSpeedOut": "lightSpeedOut",
"rotateOut": "rotateOut",
"rotateOutDownLeft": "rotateOutDownLeft",
"rotateOutDownRight": "rotateOutDownRight",
"rotateOutUpLeft": "rotateOutUpLeft",
"rotateOutUpRight": "rotateOutUpRight",
"slideOutUp": "slideOutUp",
"slideOutDown": "slideOutDown",
"slideOutLeft": "slideOutLeft",
"slideOutRight": "slideOutRight",
"zoomOut": "zoomOut",
"zoomOutDown": "zoomOutDown",
"zoomOutLeft": "zoomOutLeft",
"zoomOutRight": "zoomOutRight",
"zoomOutUp": "zoomOutUp",
"rollOut": "rollOut"
},
"group": "Configurations"
},
"widgetName": {
"type": "hidden",
"value": "Custom Chat",
"group": "Configurations"
},
"widgetAuthor": {
"type": "hidden",
"value": "OVERKLOC",
"group": "Configurations"
}
}

70
Bloody Chat.css Normal file
View File

@ -0,0 +1,70 @@
@import url(https://fonts.googleapis.com/css?family={{font}}:{{fontSize}});
@import url('https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css');
* { box-sizing: border-box; }
html, body { height: 100%; overflow: hidden; }
body { background: {{backgroundColor}} !important; line-height: 1.5em; }
.top-degrade {display: {{showTopDegrade}}; position: absolute; width: 100%; height: 50px; top: 0; left: 0;
background: rgb(17,11,44);
background: linear-gradient(180deg, rgba(17,11,44,1) 0%, rgba(17,11,44,0) 100%); z-index: 2;}
.bottom-degrade {display: {{showBottonDegrade}}; position: absolute; width: 100%; height: 25px;
bottom: 0; left: 0; background: rgb(17,11,44);
background: linear-gradient(180deg, rgba(17,11,44,0) 0%, rgba(17,11,44,1) 100%); z-index: 2;}
#log>div { position: relative; padding-top: 22px; margin-bottom: 60px; }
.colon { display: none; }
.action { font-style: italic; }
#log { {{alignMessages}}; box-sizing: border-box; width: 100%; bottom: 0; left: 0; padding: 10px 10px; }
#log>div.deleted { visibility: hidden; }
/* ===== BLOOD ===== */
#log .message .container-message:before {
content: "";
display: block;
position: absolute;
top: 0px;
right: 0px;
width: 200px;
height: 100px;
background-image: url('https://i.gifer.com/5362.gif');
background-size: cover;
border-radius: 5%;
z-index: 3;
}
/* ===== USERNAME ===== */
#log .meta {position: absolute; top: -30px; left: 0px; padding: 7px 12px; line-height: 15px;
border-radius: 20px; z-index: 1;
font-family: {{font}}; font-size: {{usernameSize}}px; font-weight: {{fontSize}};}
#log .meta .name {float: left; line-height: 21px; color: {{userColor}};}
/* ===== USERNAME2 ===== */
#log .meta1 {position: absolute; top: -30px; left: 0px; padding: 0px 12px; line-height: 0px;
border-radius: 20px; z-index: 0;
font-family: {{font}}; font-size: {{usernameSize}}px; font-weight: {{fontSize}}; background-color: {{badgeBackgroundColor}}; }
#log .meta1 .badges {float: right; margin-left: 30px; margin-top: 0px; margin-bottom: 6px;}
#log .meta1 .badges > img { width: {{badgeSize}}px; height: {{badgeSize}}px; margin-right: 1px; border-radius: 20px; }
#log .meta1 .badges > img:last-child {margin-right: 0;}
#log .meta1 .name {float: left; line-height: 21px; color: {{userColor}};}
/* ===== USERMESSAGE ===== */
#log .message {position: relative; min-height: 20px;}
#log .message .container-message {color: {{messageColor}}; background: {{msgBackgroundColor}};
text-shadow:{{textShadow}}; padding: {{msgBorderPaddingY}}px {{msgBorderPaddingX}}px;
border-radius: 10px 10px 10px 10px; display: inline-block;
font-family: {{font}}; font-size: {{messageSize}}px; font-weight: {{fontSize}}; word-break: break-word; width: 100%;}
#log .message .container-message .emote { height: {{emoteSize}}px; vertical-align: middle; }
#log .message .container-message .time { float: right; padding: 10px 0px 0px 0px; }

6
Bloody Chat.html Normal file
View File

@ -0,0 +1,6 @@
<script src="//cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.12.0/js/md5.min.js"></script>
<div class="top-degrade"></div>
<div id="log"></div>
<div class="bottom-degrade"></div>

310
Bloody Chat.js Normal file
View File

@ -0,0 +1,310 @@
let totalMessages = 0, messagesLimit = 0, channelName, provider, addition, removeSelector;
let hideCommands = "true";
let messageSize = 24;
let hideAfter = 60;
let ignoredUsers = [];
let animationIn = 'bounceIn';
let animationOut = 'bounceOut';
let borderMessage = '#000000';
let carimboHora = "nao";
window.addEventListener("onEventReceived", function (obj) {
// Deletar mensagens
if (obj.detail.listener === "delete-message") {
const msgId = obj.detail.event.msgId;
$(`.message-row[data-id=${msgId}]`).remove();
return;
} else if (obj.detail.listener === "delete-messages") {
const userId = obj.detail.event.userId;
$(`.message-row[data-from=${userId}]`).remove();
return;
}
// Testar chat
if (obj.detail.event.listener === "widget-button") {
if (obj.detail.event.field === "testMessage") {
let emulated = new CustomEvent("onEventReceived", {
detail: {
listener: "message",
event: {
service: "twitch",
data: {
time: Date.now(),
tags: {
"badge-info": "",
badges: "moderator/1,partner/1",
color: "#5B99FF",
"display-name": "StreamElements",
emotes: "25:46-50",
flags: "",
id: "43285909-412c-4eee-b80d-89f72ba53142",
mod: "1",
"room-id": "85827806",
subscriber: "0",
"tmi-sent-ts": "1579444549265",
turbo: "0",
"user-id": "100135110",
"user-type": "mod",
},
nick: channelName,
userId: "100135110",
displayName: channelName,
displayColor: "#5B99FF",
badges: [
{
type: "moderator",
version: "1",
url:
"https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3",
description: "Moderator",
},
{
type: "partner",
version: "1",
url:
"https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/3",
description: "Verified",
},
],
channel: channelName,
text: "Boo! This is a test message. The bloody chat widget is working.",
isAction: !1,
emotes: [
{
type: "twitch",
name: "Kappa",
id: "25",
gif: !1,
urls: {
1: "https://static-cdn.jtvnw.net/emoticons/v1/25/1.0",
2: "https://static-cdn.jtvnw.net/emoticons/v1/25/1.0",
4: "https://static-cdn.jtvnw.net/emoticons/v1/25/3.0",
},
start: 46,
end: 50,
},
],
msgId: "43285909-412c-4eee-b80d-89f72ba53142",
},
renderedText:
'Boo! This is a test message. The bloody chat widget is working <img src="https://static-cdn.jtvnw.net/emoticons/v1/25/1.0" srcset="https://static-cdn.jtvnw.net/emoticons/v1/25/1.0 1x, https://static-cdn.jtvnw.net/emoticons/v1/25/1.0 2x, https://static-cdn.jtvnw.net/emoticons/v1/25/3.0 4x" title="Kappa" class="emote">',
},
},
});
window.dispatchEvent(emulated);
}
return;
}
// Tratar mensagem
if (obj.detail.listener !== "message") return;
let data = obj.detail.event.data;
if (data.text.startsWith("!") && hideCommands === "true") return;
if (ignoredUsers.indexOf(data.nick) !== -1) return;
let message = attachEmotes(data);
let badges = "",
badge;
for (let i = 0; i < data.badges.length; i++) {
badge = data.badges[i];
badges += `<img alt="" src="${badge.url}" class="badge"> `;
}
let color = data.tags.color;
if (color === "") {
const username = data.displayName;
color = data.displayColor !== "" ? data.displayColor : "#" + (md5(username).substr(26));
}
addMessage(obj.detail.event.data.displayName,
message,
badges,
data.userId,
data.msgId,
color,
data.isAction);
});
window.addEventListener("onWidgetLoad", function (obj) {
const fieldData = obj.detail.fieldData;
messagesLimit = fieldData.messagesLimit;
topDegrade = fieldData.topDegrade;
hideCommands = fieldData.hideCommands;
hideAfter = fieldData.hideAfter;
animationIn = fieldData.animationIn;
animationOut = fieldData.animationOut;
borderMessage = fieldData.msgBorderColor;
carimboHora = fieldData.carimboHora;
channelName = obj.detail.channel.username;
messageSize = fieldData.messageSize;
borderColorUser = fieldData.msgBorderColorUser;
ignoredUsers = fieldData.ignoredUsers
.toLowerCase()
.replace(" ", "")
.split(",");
fetch('https://api.streamelements.com/kappa/v2/channels/' + obj.detail.channel.id + '/').then(response => response.json()).then((profile) => {
provider = profile.provider;
});
if (fieldData.alignMessages === "display: block") {
addition = "prepend";
removeSelector = ".message-row:nth-child(n+" + (messagesLimit + 1) + ")"
} else {
addition = "append";
removeSelector = ".message-row:nth-last-child(n+" + (messagesLimit + 1) + ")"
}
});
function addMessage(username, message, badges, userId, msgId, color, isAction) {
totalMessages += 1;
let actionClass = "";
if (isAction) {
actionClass = "action";
}
if (borderColorUser === "sim") {
borderMessage = color;
}
let hora = "";
if (carimboHora === "sim") {
let d = new Date();
let messageSizeTime = messageSize-(messageSize/4);
hora = `
<br>
<div class="time" style="font-size: ${messageSizeTime}px;">
${('0' + d.getHours()).slice(-2)}:${('0' + d.getMinutes()).slice(-2)}:${('0' + d.getSeconds()).slice(-2)}
</div>
`
}
const element = $.parseHTML(`
<div data-from="${userId}" data-id="${msgId}" class="message-row {animationIn} animated" id="msg-${totalMessages}">
<div class="meta" style="background-color: ${color};">
<div class="name">${username}</div>
</div>
<div class="meta1">
<div class="badges">${badges}</div>
<div class="name">${username}</div>
</div>
<div class="message">
<div class="container-message ${actionClass}" style="border: 2px solid ${borderMessage};">
${message}
${hora}
</div>
</div>
</div>`);
if (addition === "append") {
if (hideAfter !== 0) {
$(element)
.appendTo('#log')
.delay(hideAfter * 1000)
.queue(function () {
$(this).removeClass(animationIn).addClass(animationOut).delay(1000).queue(function () {
$(this).remove()
}).dequeue();
});
} else {
$(element)
.appendTo('#log');
}
} else {
if (hideAfter !== 0) {
$(element)
.prependTo('#log')
.delay(hideAfter * 1000)
.queue(function () {
$(this).removeClass(animationIn).addClass(animationOut).delay(1000).queue(function () {
$(this).remove()
}).dequeue();
});
} else {
$(element)
.prependTo('#log');
}
}
if (messagesLimit > 0 && totalMessages > messagesLimit) {
removeRow();
}
}
function attachEmotes(message) {
let text = html_encode(message.text);
let data = message.emotes;
if (typeof message.attachment !== "undefined") {
if (typeof message.attachment.media !== "undefined") {
if (typeof message.attachment.media.image !== "undefined") {
text = `${message.text}<img src="${message.attachment.media.image.src}">`;
}
}
}
return text.replace(/([^\s]*)/gi, function (m, key) {
let result = data.filter((emote) => {
return emote.name === key;
});
if (typeof result[0] !== "undefined") {
let msgSize = messageSize + 5;
let url = result[0]["urls"][4];
if (provider === "twitch") {
return `<img width="${msgSize}" class="emote" src="${url}"/>`;
} else {
if (typeof result[0].coords === "undefined") {
result[0].coords = { x: 0, y: 0 };
}
let x = parseInt(result[0].coords.x);
let y = parseInt(result[0].coords.y);
let width = "auto";
let height = "auto";
if (provider === "mixer") {
console.log(result[0]);
if (result[0].coords.width) {
width = `${result[0].coords.width}px`;
}
if (result[0].coords.height) {
height = `${result[0].coords.height}px`;
}
}
return `<div class="emote" style="width: ${width}; height:${height}; display: inline-block; background-image: url(${url}); background-position: -${x}px -${y}px;"></div>`;
}
} else return key;
});
}
function html_encode(e) {
return e.replace(/[<>"^]/g, function (e) {
return "&#" + e.charCodeAt(0) + ";";
});
}
function removeRow() {
if (!$(removeSelector).length) {
return;
}
if (animationOut !== "none" || !$(removeSelector).hasClass(animationOut)) {
if (hideAfter !== 0) {
$(removeSelector).dequeue();
} else {
$(removeSelector).addClass(animationOut).delay(1000).queue(function () {
$(this).remove().dequeue()
});
}
return;
}
$(removeSelector).animate({
height: 0,
opacity: 0
}, 'slow', function () {
$(removeSelector).remove();
});
}

BIN
images/Animation/5362.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB