diff --git a/frontend/lib/chat.mjs b/frontend/lib/chat.mjs index 25de6e0..90fa2aa 100644 --- a/frontend/lib/chat.mjs +++ b/frontend/lib/chat.mjs @@ -184,6 +184,16 @@ const setupChatboxEvents = (socket) => { ); handled = true; break; + case "/votekiss": + printChatMessage( + "vote-kiss", + "/votekiss", + "b57fdc", + document.createTextNode("you voted to kiss " + args) + ); + handled = false; + // we also handle this on receive + break; case "/help": const helpMessageContent = document.createElement("span"); helpMessageContent.innerHTML = @@ -191,7 +201,8 @@ const setupChatboxEvents = (socket) => { " /help - display this help message
" + " /ping [message] - ping all viewers
" + " /sync - resyncs you with other viewers
" + - " /shrug - appends ¯\\_(ツ)_/¯ to your message"; + " /shrug - appends ¯\\_(ツ)_/¯ to your message" + + " /votekiss - like votekick but gay"; printChatMessage( "command-message", @@ -327,6 +338,32 @@ const formatTime = (ms) => { }:${seconds < 10 ? "0" + seconds : seconds}`; }; +let kisses = {}; +function handleClientCommand(content, user) { + let handled = false; + if (content.startsWith("/")) { + const command = content.toLowerCase().match(/^\/\S+/)[0]; + const args = content.slice(command.length).trim(); + switch (command) { + case "/votekiss": + kisses[args] = kisses[args] || {}; + kisses[args][user] = true; + if (Object.keys(kisses[args]).length > 3) { + printChatMessage( + "user-kissed", + args, + "ff6094", + document.createTextNode("was kissed 💋") + ); + kisses[args] = {}; + } + handled = true; + break; + } + } + return handled; +} + export const logEventToChat = async (event) => { if (checkDebounce(event)) { return; @@ -349,12 +386,15 @@ export const logEventToChat = async (event) => { event.colour, document.createTextNode("left") ); + for(let kissed in kisses) delete kisses[kissed][user] break; } case "ChatMessage": { const messageContent = document.createElement("span"); messageContent.classList.add("message-content"); + if (handleClientCommand(event.data, event.user)) break; messageContent.append(...(await emojify(event.data))); + printChatMessage( "chat-message", event.user, @@ -433,7 +473,10 @@ const beep = () => { oscillator.stop(context.currentTime + 0.22); }; +let viewers = []; + export const updateViewerList = (viewers) => { + viewers = _viewers; const listContainer = document.querySelector("#viewer-list"); // empty out the current list diff --git a/frontend/styles.css b/frontend/styles.css index 51230d7..707580e 100644 --- a/frontend/styles.css +++ b/frontend/styles.css @@ -188,10 +188,15 @@ button.small-button { .chat-message.user-join, .chat-message.user-leave, -.chat-message.ping { +.chat-message.ping, +.chat-message.user-kissed { font-style: italic; } +.chat-message.user-kissed { + color: #ff6094; +} + .chat-message.set-time, .chat-message.set-playing { font-style: italic;