diff --git a/printer-bot/contents/script.js b/printer-bot/contents/script.js
index 0354948..0dc74f5 100644
--- a/printer-bot/contents/script.js
+++ b/printer-bot/contents/script.js
@@ -51,7 +51,40 @@ async function CustomEvent(data) {
subtitleEl.innerText = `${data.user}`;
const messageEl = document.createElement('div');
- messageEl.innerHTML = ConstructMessageFromParts(data.parts);
+ messageEl.innerHTML = data.message;
+
+ // Render emotes
+ for (i in data.emotes) {
+ const emoteElement = `
`;
+ const emoteName = EscapeRegExp(data.emotes[i].name);
+ function EscapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
+ }
+
+ let regexPattern = emoteName;
+
+ // Check if the emote name consists only of word characters (alphanumeric and underscore)
+ if (/^\w+$/.test(emoteName)) {
+ regexPattern = `\\b${emoteName}\\b`;
+ }
+ else {
+ // For non-word emotes, ensure they are surrounded by non-word characters or boundaries
+ regexPattern = `(?<=^|[^\\w])${emoteName}(?=$|[^\\w])`;
+ }
+
+ const regex = new RegExp(regexPattern, 'g');
+ messageEl.innerHTML = messageEl.innerHTML.replace(regex, emoteElement);
+ }
+
+ // Render cheermotes
+ for (i in data.cheerEmotes) {
+ const bits = data.cheerEmotes[i].bits;
+ const imageUrl = data.cheerEmotes[i].imageUrl;
+ const name = data.cheerEmotes[i].name;
+ const cheerEmoteElement = `
`;
+ const bitsElements = `${bits}`
+ messageEl.innerHTML = messageEl.innerHTML.replace(new RegExp(`\\b${name}${bits}\\b`, 'i'), cheerEmoteElement + bitsElements);
+ }
contentEl.appendChild(messageEl);