From 09e92773945a41761afe7ea0b7b7154d57a5b25c Mon Sep 17 00:00:00 2001
From: pimothyxd <29018740+pimothyxd@users.noreply.github.com>
Date: Tue, 23 Dec 2025 22:14:57 +0100
Subject: [PATCH 1/7] feat(twitch/chat): add mod action reasons
---
.../settings/SettingsConfigActionReasons.vue | 186 ++++++++++++++++++
src/common/Constant.ts | 1 +
src/composable/chat/useChatProperties.ts | 2 +
src/composable/useCosmetics.ts | 4 +-
src/site/global/components/FormInput.vue | 1 +
.../twitch.tv/modules/chat/ChatController.vue | 1 +
.../twitch.tv/modules/chat/ChatModule.vue | 63 ++++++
.../chat/components/mod/ModActionReasons.vue | 106 ++++++++++
.../modules/chat/components/mod/ModIcons.vue | 84 +++++++-
.../modules/custom-commands/Commands/Nuke.vue | 3 +-
10 files changed, 445 insertions(+), 6 deletions(-)
create mode 100644 src/app/settings/SettingsConfigActionReasons.vue
create mode 100644 src/site/twitch.tv/modules/chat/components/mod/ModActionReasons.vue
diff --git a/src/app/settings/SettingsConfigActionReasons.vue b/src/app/settings/SettingsConfigActionReasons.vue
new file mode 100644
index 00000000..38b4d344
--- /dev/null
+++ b/src/app/settings/SettingsConfigActionReasons.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ reason }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/common/Constant.ts b/src/common/Constant.ts
index be82e12e..c039fd2d 100644
--- a/src/common/Constant.ts
+++ b/src/common/Constant.ts
@@ -21,6 +21,7 @@ export const UNICODE_TAG_0 = "\u{34f}";
export const UNICODE_TAG_0_REGEX = new RegExp(UNICODE_TAG_0, "g");
export const TWITCH_PROFILE_IMAGE_REGEX = /(\d+x\d+)(?=\.\w{3,4}$)/;
+export const TWITCH_TIMEOUT_REGEX = new RegExp("^[0-9]+[dhms]$", "i");
export const HOSTNAME_SUPPORTED_REGEXP = /([a-z0-9]+[.])*(youtube|kick)[.]com/;
export const SEVENTV_EMOTE_LINK = new RegExp(
diff --git a/src/composable/chat/useChatProperties.ts b/src/composable/chat/useChatProperties.ts
index a0f7f0c6..0b0bc217 100644
--- a/src/composable/chat/useChatProperties.ts
+++ b/src/composable/chat/useChatProperties.ts
@@ -14,6 +14,7 @@ interface ChatProperties {
imageFormat: SevenTV.ImageFormat;
twitchBadgeSets: Twitch.BadgeSets | null;
blockedUsers: Set;
+ chatRules: string[];
}
type ChatPauseReason = "MOUSEOVER" | "SCROLL" | "ALTKEY";
@@ -36,6 +37,7 @@ export function useChatProperties(ctx: ChannelContext) {
twitchBadgeSets: {} as Twitch.BadgeSets | null,
blockedUsers: new Set(),
fontAprilFools: "unset",
+ chatRules: [],
});
m.set(ctx, data);
diff --git a/src/composable/useCosmetics.ts b/src/composable/useCosmetics.ts
index 92027df7..e55473ef 100644
--- a/src/composable/useCosmetics.ts
+++ b/src/composable/useCosmetics.ts
@@ -324,12 +324,12 @@ db.ready().then(async () => {
break;
}
- log.debug("", "Assigned", ents.length.toString(), "stored entitlements");
-
if (assigned) {
data.staticallyAssigned[ent.user_id] = {};
}
}
+
+ log.debug("", "Assigned", ents.length.toString(), "stored entitlements");
})
.then(flush);
});
diff --git a/src/site/global/components/FormInput.vue b/src/site/global/components/FormInput.vue
index 4215c3f0..282e7a74 100644
--- a/src/site/global/components/FormInput.vue
+++ b/src/site/global/components/FormInput.vue
@@ -44,6 +44,7 @@ const inputEl = ref(null);
defineExpose({
focus: () => inputEl.value?.focus(),
+ value: () => inputEl.value?.value,
});
onMounted(() => {
diff --git a/src/site/twitch.tv/modules/chat/ChatController.vue b/src/site/twitch.tv/modules/chat/ChatController.vue
index 90b7c204..fd7cf5b3 100644
--- a/src/site/twitch.tv/modules/chat/ChatController.vue
+++ b/src/site/twitch.tv/modules/chat/ChatController.vue
@@ -241,6 +241,7 @@ definePropertyHook(controller.value.component, "props", {
// Keep track of chat props
properties.isDarkTheme = v.theme;
+ properties.chatRules = v.chatRules ?? [];
// Send presence upon message sent
messages.sendMessage = v.chatConnectionAPI.sendMessage;
diff --git a/src/site/twitch.tv/modules/chat/ChatModule.vue b/src/site/twitch.tv/modules/chat/ChatModule.vue
index 87d9606c..113e7c97 100644
--- a/src/site/twitch.tv/modules/chat/ChatModule.vue
+++ b/src/site/twitch.tv/modules/chat/ChatModule.vue
@@ -128,8 +128,10 @@ defineExpose({
+
+
diff --git a/src/site/twitch.tv/modules/chat/components/mod/ModIcons.vue b/src/site/twitch.tv/modules/chat/components/mod/ModIcons.vue
index f716b4f9..61da149c 100644
--- a/src/site/twitch.tv/modules/chat/components/mod/ModIcons.vue
+++ b/src/site/twitch.tv/modules/chat/components/mod/ModIcons.vue
@@ -1,9 +1,10 @@
-
+
@@ -13,7 +14,8 @@
@@ -39,19 +41,47 @@
+
+
+
+
+
+
+