From aaf0c9e5e20c3581b8993e1da1212f04e35d7636 Mon Sep 17 00:00:00 2001 From: LordTocs Date: Thu, 11 Jul 2024 13:46:39 -0400 Subject: [PATCH 1/9] Actually Init Audio Actions --- plugins/obs/main/src/main.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/obs/main/src/main.ts b/plugins/obs/main/src/main.ts index 4c1c969b..e52481a6 100644 --- a/plugins/obs/main/src/main.ts +++ b/plugins/obs/main/src/main.ts @@ -23,6 +23,7 @@ import { setupToggles } from "./toggles" import { setupTransforms } from "./transform" import { attemptQRReading, setupAutoConnect } from "./auto-connect" +import { setupAudio } from "./audio" export default definePlugin( { @@ -125,6 +126,7 @@ export default definePlugin( setupScenes(obsDefault) setupSources(obsDefault) setupMedia(obsDefault) + setupAudio(obsDefault) setupToggles(obsDefault) setupTransforms(obsDefault) From bc0f093969cfb4a9907a5b297e99ec59f90c7f26 Mon Sep 17 00:00:00 2001 From: LordTocs Date: Thu, 11 Jul 2024 13:47:38 -0400 Subject: [PATCH 2/9] Bump Version --- package.json | 2 +- packages/castmate/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9212f345..9d987e65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "castmate-monorepo", - "version": "0.5.0", + "version": "0.5.1", "description": "", "private": true, "type": "module", diff --git a/packages/castmate/package.json b/packages/castmate/package.json index 71569a10..c107ef0e 100644 --- a/packages/castmate/package.json +++ b/packages/castmate/package.json @@ -1,6 +1,6 @@ { "name": "castmate", - "version": "0.5.0", + "version": "0.5.1", "description": "CastMate", "author": "LordTocs", "scripts": { From 4e5b977511be9442b90d60901a41de90b6d657bb Mon Sep 17 00:00:00 2001 From: LordTocs Date: Fri, 12 Jul 2024 21:58:20 -0400 Subject: [PATCH 3/9] Fix Change Volume Icon --- plugins/obs/main/src/audio.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/obs/main/src/audio.ts b/plugins/obs/main/src/audio.ts index cf3f8cbc..0675b4a0 100644 --- a/plugins/obs/main/src/audio.ts +++ b/plugins/obs/main/src/audio.ts @@ -43,7 +43,7 @@ export function setupAudio(obsDefault: ReactiveRef) { }, muted: { type: Toggle, - name: "muted", + name: "Muted", required: true, default: true, template: true, @@ -74,6 +74,7 @@ export function setupAudio(obsDefault: ReactiveRef) { defineAction({ id: "changeVolume", name: "Change Volume", + icon: "mdi mdi-volume-high", config: { type: Object, properties: { From b2a4455fec554434e0bfa8bb9537340143637a61 Mon Sep 17 00:00:00 2001 From: LordTocs Date: Fri, 12 Jul 2024 22:17:47 -0400 Subject: [PATCH 4/9] Fix Viewer Group Property evaluation Somehow I didn't set the properties correctly? Eitherway, it's fixed --- plugins/twitch/main/src/group.ts | 43 +++++++++++++++++++------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/plugins/twitch/main/src/group.ts b/plugins/twitch/main/src/group.ts index 3928f2b1..bdf85f80 100644 --- a/plugins/twitch/main/src/group.ts +++ b/plugins/twitch/main/src/group.ts @@ -6,6 +6,7 @@ import { defineAction, definePluginResource, onLoad, + usePluginLogger, } from "castmate-core" import { TwitchViewerGroupConfig, @@ -17,6 +18,8 @@ import { nanoid } from "nanoid/non-secure" import { ViewerCache } from "./viewer-cache" import { TwitchAccount } from "./twitch-auth" +const logger = usePluginLogger("twitch") + interface SerializedConfig { name: string userIds: string[] @@ -158,24 +161,29 @@ async function satisfiesRule(userId: string, rule: TwitchViewerGroupRule): Promi } } return false - } else if ("property" in rule) { + } else if ("properties" in rule) { //Todo: Make this not silly hardcoded - if (rule.property === "following") { - return await ViewerCache.getInstance().getIsFollowing(userId) - } else if (rule.property === "subscribed") { - return await ViewerCache.getInstance().getIsSubbed(userId) - } else if (rule.property === "sub-tier-1") { - return (await ViewerCache.getInstance().getSubInfo(userId))?.tier == 1 - } else if (rule.property === "sub-tier-2") { - return (await ViewerCache.getInstance().getSubInfo(userId))?.tier == 2 - } else if (rule.property === "sub-tier-3") { - return (await ViewerCache.getInstance().getSubInfo(userId))?.tier == 3 - } else if (rule.property === "mod") { - return await ViewerCache.getInstance().getIsMod(userId) - } else if (rule.property === "vip") { - return await ViewerCache.getInstance().getIsVIP(userId) - } else if (rule.property === "broadcaster") { - return userId === TwitchAccount.channel.twitchId + if (rule.properties.following) { + if (await ViewerCache.getInstance().getIsFollowing(userId)) return true + } + + if (rule.properties.subTier1) { + if ((await ViewerCache.getInstance().getSubInfo(userId))?.tier == 1) return true + } + if (rule.properties.subTier2) { + if ((await ViewerCache.getInstance().getSubInfo(userId))?.tier == 2) return true + } + if (rule.properties.subTier3) { + if ((await ViewerCache.getInstance().getSubInfo(userId))?.tier == 3) return true + } + if (rule.properties.mod) { + if (await ViewerCache.getInstance().getIsMod(userId)) return true + } + if (rule.properties.vip) { + if (await ViewerCache.getInstance().getIsVIP(userId)) return true + } + if (rule.properties.broadcaster) { + if (userId === TwitchAccount.channel.twitchId) return true } return false } else if ("group" in rule) { @@ -186,6 +194,7 @@ async function satisfiesRule(userId: string, rule: TwitchViewerGroupRule): Promi } else if ("userIds" in rule) { return rule.userIds.includes(userId) } + logger.log("Unknown Group Rule", rule) return false } From 13741c4e1f7f884a304db449c5edd730a60bc963 Mon Sep 17 00:00:00 2001 From: LordTocs Date: Fri, 12 Jul 2024 22:49:54 -0400 Subject: [PATCH 5/9] Fix permissions for timeout / ban user --- libs/castmate-core/src/accounts/account.ts | 2 +- plugins/twitch/main/src/twitch-auth.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libs/castmate-core/src/accounts/account.ts b/libs/castmate-core/src/accounts/account.ts index c729a088..59441d26 100644 --- a/libs/castmate-core/src/accounts/account.ts +++ b/libs/castmate-core/src/accounts/account.ts @@ -14,7 +14,7 @@ import util, { InspectOptions } from "util" import { AccountConfig, AccountSecrets, AccountState } from "castmate-schema" -interface AccountConstructor extends ResourceConstructor { +export interface AccountConstructor extends ResourceConstructor { new (...args: any[]): any accountDirectory: string storage: ResourceStorage diff --git a/plugins/twitch/main/src/twitch-auth.ts b/plugins/twitch/main/src/twitch-auth.ts index b88d6973..32e696f4 100644 --- a/plugins/twitch/main/src/twitch-auth.ts +++ b/plugins/twitch/main/src/twitch-auth.ts @@ -1,5 +1,5 @@ import { TwitchAccountConfig, TwitchAccountSecrets } from "castmate-plugin-twitch-shared" -import { Account, ResourceStorage, usePluginLogger } from "castmate-core" +import { Account, AccountConstructor, ResourceStorage, loadYAML, usePluginLogger } from "castmate-core" import { getTokenInfo, AuthProvider, AccessTokenWithUserId, AccessTokenMaybeWithUserId } from "@twurple/auth" import { BrowserWindow } from "electron" import { ApiClient, UserIdResolvable } from "@twurple/api" @@ -37,6 +37,7 @@ const defaultScopes = [ "moderation:read", "channel:manage:moderators", + "moderator:manage:banned_users", "channel:read:ads", //Get ad schedule "channel:manage:ads", //Snooze ad @@ -389,6 +390,16 @@ export class TwitchAccount extends Account { await super.initialize() From 553f890ca00ad09c4b52f474437d65c98a05da0e Mon Sep 17 00:00:00 2001 From: LordTocs Date: Fri, 12 Jul 2024 23:06:30 -0400 Subject: [PATCH 6/9] Fix up Overlay Source Creation * Add name dialog * Fix button that patches settings --- .../src/components/OverlayAddToObsButton.vue | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/plugins/overlays/renderer/src/components/OverlayAddToObsButton.vue b/plugins/overlays/renderer/src/components/OverlayAddToObsButton.vue index b8daf5db..b3a0817e 100644 --- a/plugins/overlays/renderer/src/components/OverlayAddToObsButton.vue +++ b/plugins/overlays/renderer/src/components/OverlayAddToObsButton.vue @@ -19,7 +19,14 @@
{{ sourceName }} - +
@@ -28,10 +35,11 @@ import { OverlayConfig } from "castmate-plugin-overlays-shared" import { computed, onMounted, ref, watch } from "vue" import PButton from "primevue/button" -import { useResource, useResourceIPCCaller, useSettingValue } from "castmate-ui-core" +import { NameDialog, useResource, useResourceIPCCaller, useSettingValue } from "castmate-ui-core" import { ResourceData } from "castmate-schema" import { OBSConnectionConfig, OBSConnectionState } from "castmate-plugin-obs-shared" import { asyncComputed } from "@vueuse/core" +import { useDialog } from "primevue/usedialog" const obs = useResource>("OBSConnection", () => props.obsId) @@ -130,22 +138,43 @@ async function getBrowserSourceSettings() { } } +const dialog = useDialog() + async function createSourceClick(ev: MouseEvent) { if (!obs.value) return - const newSourceName = await createNewSource( - "browser_source", - "CastMate Overlay!", - obs.value.state.scene, - await getBrowserSourceSettings() - ) - sourceName.value = newSourceName + dialog.open(NameDialog, { + props: { + header: "Create Browser Source", + style: { + width: "25vw", + }, + modal: true, + }, + async onClose(options) { + if (!options?.data) { + return + } + + if (!obs.value) return + + await createNewSource( + "browser_source", + options.data, + obs.value.state.scene, + await getBrowserSourceSettings() + ) + setTimeout(findBrowserSource, 200) + }, + }) } async function fixErrorsClick(ev: MouseEvent) { if (!sourceName.value) return await updateSourceSettings(sourceName.value, await getBrowserSourceSettings()) + + await findBrowserSource() } async function openObs() { From 12ed14a0289297084ce592f2f49496c7e17f4f74 Mon Sep 17 00:00:00 2001 From: LordTocs Date: Fri, 12 Jul 2024 23:21:15 -0400 Subject: [PATCH 7/9] Readd a refresh all browsers button --- plugins/obs/main/src/connection.ts | 19 +++++++++++++++++++ .../src/components/DashboardObsCard.vue | 15 ++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/plugins/obs/main/src/connection.ts b/plugins/obs/main/src/connection.ts index d3896b00..2b2123e8 100644 --- a/plugins/obs/main/src/connection.ts +++ b/plugins/obs/main/src/connection.ts @@ -370,6 +370,7 @@ export class OBSConnection extends FileResource(OBSConnection, "getPreview") ResourceRegistry.getInstance().exposeIPCFunction(OBSConnection, "openProcess") + ResourceRegistry.getInstance().exposeIPCFunction(OBSConnection, "refreshAllBrowsers") ResourceRegistry.getInstance().exposeIPCFunction(OBSConnection, "findBrowserByUrlPattern") ResourceRegistry.getInstance().exposeIPCFunction(OBSConnection, "getRemoteHost") ResourceRegistry.getInstance().exposeIPCFunction(OBSConnection, "createNewSource") @@ -427,6 +428,24 @@ export class OBSConnection extends FileResource { + logger.log("Refreshing", i.inputName) + await this.connection.call("PressInputPropertiesButton", { + inputName: i.inputName as string, + propertyName: "refreshnocache", + }) + }) + ) + } + async refreshBrowsersByUrlPattern(urlPattern: string) { if (!this.state.connected) return undefined diff --git a/plugins/obs/renderer/src/components/DashboardObsCard.vue b/plugins/obs/renderer/src/components/DashboardObsCard.vue index d3ec5afb..15e52546 100644 --- a/plugins/obs/renderer/src/components/DashboardObsCard.vue +++ b/plugins/obs/renderer/src/components/DashboardObsCard.vue @@ -1,6 +1,18 @@