feat: add voices/speak commands and distinguish members/subscriber only commands from the others

This commit is contained in:
Stevan Freeborn
2026-07-25 16:57:37 -05:00
parent 79668727fd
commit ce76659bbc
2 changed files with 61 additions and 17 deletions
+35 -11
View File
@@ -3,123 +3,147 @@ const COMMANDS = [
name: "Show Support", name: "Show Support",
description: "Feel free to buy me some coffee to support the stream.", description: "Feel free to buy me some coffee to support the stream.",
aliases: ["!coffee", "!donation", "!dono"], aliases: ["!coffee", "!donation", "!dono"],
subOrMemberOnly: false,
}, },
{ {
name: "Topic", name: "Topic",
description: "Find out what is happening on the stream.", description: "Find out what is happening on the stream.",
aliases: ["!wtf", "!whatbrodoing"], aliases: ["!wtf", "!whatbrodoing"],
subOrMemberOnly: false,
},
{
name: "Voices",
description: "Find out what voices are available for the <code>!speak</code> command.",
aliases: ["!voices"],
subOrMemberOnly: true,
},
{
name: "Speak",
description: "Trigger a text-to-speech message with voice of your choice. i.e. <code>!speak &lt;voice_name&gt; &lt;msg&gt;</code>",
aliases: ["!speak", "!say"],
subOrMemberOnly: true,
}, },
{ {
name: "Wrong Screen", name: "Wrong Screen",
description: "Sometimes I forget to switch to the correct scene. Use this command to let me know I've done this.", description: "Sometimes I forget to switch to the correct scene. Use this command to let me know I've done this.",
aliases: ["!screen", "!imblind", "!iamblind", "!talktotheface"], aliases: ["!screen", "!imblind", "!iamblind", "!talktotheface"],
subOrMemberOnly: false,
}, },
{ {
name: "Lurk", name: "Lurk",
description: description:
"Let chat know you are here, but lurking. We support our fellow lurkers.", "Let chat know you are here, but lurking. We support our fellow lurkers.",
aliases: ["!lurk"], aliases: ["!lurk"],
subOrMemberOnly: false,
}, },
{ {
name: "Schedule", name: "Schedule",
description: "Get my stream schedule.", description: "Get my stream schedule.",
aliases: ["!schedule"], aliases: ["!schedule"],
subOrMemberOnly: false,
}, },
{ {
name: "Lofi Generator", name: "Lofi Generator",
description: "Get the link to the website that I use for my stream music.", description: "Get the link to the website that I use for my stream music.",
aliases: ["!lofi", "!music"], aliases: ["!lofi", "!music"],
subOrMemberOnly: false,
}, },
{ {
name: "ZoomIt", name: "ZoomIt",
description: "Get the link to the tool I use to draw on my screen.", description: "Get the link to the tool I use to draw on my screen.",
aliases: ["!zoomit"], aliases: ["!zoomit"],
subOrMemberOnly: false,
}, },
{ {
name: "Neovim", name: "Neovim",
description: "Get the link to my Neovim configs.", description: "Get the link to my Neovim configs.",
aliases: ["!nvim", "!neovim"], aliases: ["!nvim", "!neovim"],
subOrMemberOnly: false,
}, },
{ {
name: "My Font", name: "My Font",
description: "Get the link to the Nerd Font I use.", description: "Get the link to the Nerd Font I use.",
aliases: ["!font", "!nerdfont"], aliases: ["!font", "!nerdfont"],
subOrMemberOnly: false,
}, },
{ {
name: "PowerShell", name: "PowerShell",
description: "Get the link to my PowerShell profile.", description: "Get the link to my PowerShell profile.",
aliases: ["!pwsh", "!powershell"], aliases: ["!pwsh", "!powershell"],
subOrMemberOnly: false,
}, },
{ {
name: "Oh My Posh", name: "Oh My Posh",
description: "Get the link to my Oh My Posh configs.", description: "Get the link to my Oh My Posh configs.",
aliases: ["!omp", "!ohmyposh"], aliases: ["!omp", "!ohmyposh"],
subOrMemberOnly: false,
}, },
{ {
name: "Member", name: "Member",
description: "Get a link to become a member of the YouTube channel.", description: "Get a link to become a member of the YouTube channel.",
aliases: ["!member"], aliases: ["!member"],
subOrMemberOnly: false,
}, },
{ {
name: "Links", name: "Links",
description: "Get a link to all my links.", description: "Get a link to all my links.",
aliases: ["!links"], aliases: ["!links"],
subOrMemberOnly: false,
}, },
{ {
name: "Blog", name: "Blog",
description: "Get the link to my blog.", description: "Get the link to my blog.",
aliases: ["!blog"], aliases: ["!blog"],
subOrMemberOnly: false,
}, },
{ {
name: "Bluesky", name: "Bluesky",
description: "Get the link to my Bluesky profile.", description: "Get the link to my Bluesky profile.",
aliases: ["!bsky", "!bluesky"], aliases: ["!bsky", "!bluesky"],
subOrMemberOnly: false,
}, },
{ {
name: "Bottom", name: "Bottom",
description: "Get the link to the terminal monitor I use.", description: "Get the link to the terminal monitor I use.",
aliases: ["!btm", "!bottom"], aliases: ["!btm", "!bottom"],
subOrMemberOnly: false,
}, },
{ {
name: "Discord", name: "Discord",
description: "Want to chat off stream? Get the invite link to my discord.", description: "Want to chat off stream? Get the invite link to my discord.",
aliases: ["!discord"], aliases: ["!discord"],
subOrMemberOnly: false,
}, },
{ {
name: "GitHub", name: "GitHub",
description: "Get the link to my GitHub profile.", description: "Get the link to my GitHub profile.",
aliases: ["!gh", "!github"], aliases: ["!gh", "!github"],
}, subOrMemberOnly: false,
{
name: "Tangled",
description: "Get the link to my Tangled profile.",
aliases: ["!tangled"],
}, },
{ {
name: "LinkedIn", name: "LinkedIn",
description: "Get the link to my LinkedIn profile.", description: "Get the link to my LinkedIn profile.",
aliases: ["!li", "!linkedin"], aliases: ["!li", "!linkedin"],
}, subOrMemberOnly: false,
{
name: "Telegram",
description: "Get the invite link to my Telegram channel.",
aliases: ["!tg", "!telegram"],
}, },
{ {
name: "Twitch", name: "Twitch",
description: "Get the link to my Twitch channel.", description: "Get the link to my Twitch channel.",
aliases: ["!ttv", "!twitch"], aliases: ["!ttv", "!twitch"],
subOrMemberOnly: false,
}, },
{ {
name: "YouTube", name: "YouTube",
description: "Get the link to my YouTube channel.", description: "Get the link to my YouTube channel.",
aliases: ["!yt", "!youtube"], aliases: ["!yt", "!youtube"],
subOrMemberOnly: false,
}, },
{ {
name: "Commands", name: "Commands",
description: description:
"Get the link to the list of commands available in chat during a stream.", "Get the link to the list of commands available in chat during a stream.",
aliases: ["!help", "!commands"], aliases: ["!help", "!commands"],
subOrMemberOnly: false,
}, },
]; ];
@@ -142,7 +166,7 @@ function handleContentLoaded() {
function CommandListItem(command) { function CommandListItem(command) {
const listItemElement = document.createElement("li"); const listItemElement = document.createElement("li");
listItemElement.innerHTML = /*html*/ ` listItemElement.innerHTML = /*html*/ `
<div class="command-card"> <div class="command-card${command.subOrMemberOnly ? ' sub-or-member-only' : ''}">
<div class="left"> <div class="left">
<div class="name">${command.name}</div> <div class="name">${command.name}</div>
</div> </div>
+25 -5
View File
@@ -55,16 +55,16 @@ table {
:root { :root {
--bg-color: #181818; --bg-color: #181818;
--text-color: #E4E4E4; --text-color: #e4e4e4;
--accent-color: #b39cd0; --accent-color: #b39cd0;
font-family: 'CaskaydiaCove NFM', monospace; font-family: "CaskaydiaCove NFM", monospace;
font-size: 16px; font-size: 16px;
} }
html, html,
body { body {
height: 100% height: 100%;
} }
body { body {
@@ -105,6 +105,26 @@ main {
border-radius: 1rem; border-radius: 1rem;
background-color: #323232; background-color: #323232;
overflow: hidden; overflow: hidden;
position: relative;
}
.sub-or-member-only::after {
position: absolute;
right: 0;
top: 0;
padding: 0.5rem;
content: "Members/Subscribers";
background: #ff0000;
background: linear-gradient(90deg,
rgba(255, 0, 0, 0.75) 0%,
rgba(100, 65, 165, 0.75) 65%);
border-bottom-left-radius: 1rem;
}
@media (max-width: 600px) {
.sub-or-member-only::after {
content: "Mems/Subs";
}
} }
.command-card .left { .command-card .left {
@@ -113,7 +133,6 @@ main {
gap: 1rem; gap: 1rem;
} }
.command-card .right { .command-card .right {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -151,12 +170,13 @@ main {
.copy-button .fa-copy { .copy-button .fa-copy {
display: block; display: block;
} }
.copy-button .fa-check { .copy-button .fa-check {
display: none; display: none;
} }
.copy-button.copied { .copy-button.copied {
color: #89D185; color: #89d185;
pointer-events: none; pointer-events: none;
} }