Add files via upload

This commit is contained in:
Rodrigo Emanuel
2025-05-06 20:32:33 -03:00
committed by GitHub
parent 4db1f94f91
commit 43ac28bb47
12 changed files with 120 additions and 33 deletions

View File

@@ -4,6 +4,10 @@
const streamerBotServerAddress = getURLParam("streamerBotServerAddress", "127.0.0.1");
const streamerBotServerPort = getURLParam("streamerBotServerPort", "8080");
const ttsSpeakerBotChat = getURLParam("ttsSpeakerBotChat", false);
const ttsSpeakerBotEvents = getURLParam("ttsSpeakerBotEvents", false);
let streamerBotConnected = false;
const chatThreshhold = 50;
@@ -75,6 +79,8 @@ const streamerBotClient = new StreamerbotClient({
async function addMessageToChat(userID, messageID, platform, data) {
if (ttsSpeakerBotChat == true) { ttsSpeakerBotSays(data.userName, currentLang.ttschat, data.message); }
const html = DOMPurify.sanitize(`
<div id="${messageID}" data-user="${userID}" class="${platform} ${data.classes} message" style="">
@@ -121,6 +127,8 @@ async function addMessageToChat(userID, messageID, platform, data) {
async function addEventToChat(userID, messageID, platform, data) {
if (ttsSpeakerBotEvents == true) { ttsSpeakerBotSays(data.userName, '', data.message); }
const html = DOMPurify.sanitize(`
<div id="${messageID}" data-user="${userID}" class="${platform} ${data.classes} message event" style="">
<div class="animate__animated ${chatHorizontal == true ? 'animate__fadeInRight' : 'animate__fadeInUp'} animate__faster">
@@ -149,7 +157,7 @@ async function addEventToChat(userID, messageID, platform, data) {
}, 1000);
}, Math.floor(hideAfter * 1000));
}
removeExtraChatMessages();
}
@@ -298,7 +306,42 @@ const notifySuccess = (success) => {
}
function escapeRegex(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
async function ttsSpeakerBotSays(user, action, message) {
if (streamerBotConnected == false) return;
const ttstext = await cleanStringOfHTMLButEmotes(message);
const ttsmessage = user+' '+action+' '+ttstext;
streamerBotClient.doAction(
{ name : "TTS Event" },
{
"ttsmessage": ttsmessage,
}
).then( (ttsstuff) => {
console.debug('Sending TTS to Streamer.Bot', ttsstuff);
});
}
async function cleanStringOfHTMLButEmotes(string) {
// Cria um elemento DOM temporário
const container = document.createElement('div');
container.innerHTML = string;
// Substitui <img class="emote" alt="..."> por texto do alt
const emotes = container.querySelectorAll('img.emote[alt]');
emotes.forEach(img => {
const altText = img.getAttribute('alt');
const textNode = document.createTextNode(altText);
img.replaceWith(textNode);
});
// Remove todo o restante do HTML
return container.textContent || "";
}

View File

@@ -1,6 +1,7 @@
const en = {
streamerbotconnected: 'Streamer.bot Online!',
streamerbotdisconnected: 'Streamer.bot Disconnected!',
ttschat: 'said',
twitch : {
firstMessage : () => `First chatter`,

View File

@@ -1,6 +1,7 @@
const es = {
streamerbotconnected: '¡Streamer.bot en línea!',
streamerbotdisconnected: '¡Streamer.bot desconectado!',
ttschat: 'dijo',
twitch : {
firstMessage : () => `Primeira mensaje`,

View File

@@ -1,6 +1,7 @@
const ptbr = {
streamerbotconnected: 'Streamer.bot Conectado!',
streamerbotdisconnected: 'Streamer.bot Desconectado!',
ttschat: 'disse',
twitch : {
firstMessage : () => `Primeira mensagem`,

View File

@@ -77,10 +77,9 @@ async function loadSettingsFromLocalStorage() {
onConnect: (data) => {
streamerBotConnected = true;
var sbstatus = document.getElementById('memberemotesbstatus');
sbstatus.style.color = '#00dd63';
sbstatus.textContent = 'Streamer.Bot is Online!';
document.querySelector('#memberemotesbstatus').classList.remove('offline');
document.querySelector('#memberemotesbstatus').classList.add('online');
document.querySelector('#memberemotesbstatus span').textContent = 'Streamer.Bot is Online!';
streamerBotClient.getGlobals().then( (getglobals) => {
const settings = JSON.parse(getglobals.variables.chatrdytcustomemotes.value);
@@ -96,10 +95,10 @@ async function loadSettingsFromLocalStorage() {
console.error('Streamer.bot Disconnected!');
streamerBotConnected = false;
var sbstatus = document.getElementById('memberemotesbstatus');
sbstatus.style.color = '#ff0000';
sbstatus.textContent = 'Streamer.Bot Needs to be Online!';
document.querySelector('#memberemotesbstatus').classList.remove('online');
document.querySelector('#memberemotesbstatus').classList.add('offline');
document.querySelector('#memberemotesbstatus span').textContent = 'Streamer.Bot is Offline!';
}
});

View File

@@ -515,7 +515,6 @@ async function twitchChatClearMessages() {
async function twitchUpdateStatistics(data) {
if (showPlatformStatistics == false || showTwitchViewers == false) return;
const viewers = DOMPurify.sanitize(data.viewerCount);

View File

@@ -353,7 +353,7 @@ async function getYouTubeEmotes(data) {
const emoteRegex = new RegExp(`(?<!\\S)${escapedCode}(?!\\S)`, 'g');
const imageUrl = `https://cdn.betterttv.net/emote/${emote.id}/1x`;
const emoteElement = `<img src="${imageUrl}" class="emote">`;
const emoteElement = `<img src="${imageUrl}" class="emote" alt="${escapedCode}">`;
message = message.replace(emoteRegex, emoteElement);
}
@@ -362,7 +362,7 @@ async function getYouTubeEmotes(data) {
if (data.emotes) {
for (const emote of data.emotes) {
const emoteRegex = new RegExp(escapeRegex(emote.name), 'g');
const emoteElement = `<img src="${emote.imageUrl}" class="emote">`;
const emoteElement = `<img src="${emote.imageUrl}" class="emote" alt="${emote.name}">`;
message = message.replace(emoteRegex, emoteElement);
}
}
@@ -372,7 +372,7 @@ async function getYouTubeEmotes(data) {
if (data.user.isSponsor == true || data.user.isOwner == true) {
message = message.replace(/:([a-zA-Z0-9_]+):/g, (match, emoteName) => {
if (youTubeCustomEmotes[emoteName]) {
return `<img src="${youTubeCustomEmotes[emoteName]}" class="emote">`;
return `<img src="${youTubeCustomEmotes[emoteName]}" class="emote" alt="${emoteName}">`;
}
return match;
});