From 7021c560453605c93e02dbbb74888c3f694bebf8 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Fri, 3 Jan 2025 23:13:37 -0800 Subject: [PATCH] Moderator rule: nodvd (exempt from dark video detector) Some users had reported the dark video detector errors out on their camera, reading a solid black image and average color of 0 despite their camera actually being bright and colorful. This case seems rare, but the nodvd moderation rule can lift the feature for specific affected users while keeping it in place for everyone else. --- pkg/config/config.go | 1 + pkg/jwt/rules.go | 9 +++++++++ pkg/moderation_rules.go | 3 +++ src/App.vue | 3 +++ src/components/MessageBox.vue | 4 ++-- 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 6b71592..a2345ae 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -138,6 +138,7 @@ type ModerationRule struct { NoBroadcast bool NoVideo bool NoImage bool + NoDarkVideo bool } // Current loaded configuration. diff --git a/pkg/jwt/rules.go b/pkg/jwt/rules.go index 677159d..1063178 100644 --- a/pkg/jwt/rules.go +++ b/pkg/jwt/rules.go @@ -14,6 +14,7 @@ const ( NoBroadcastRule = Rule("nobroadcast") // They can not share their webcam NoImageRule = Rule("noimage") // Can not upload or see images RedCamRule = Rule("redcam") // Their camera is force marked NSFW + NoDarkVideoRule = Rule("nodvd") // Exempt user from the dark video detector ) func (r Rule) IsNoVideoRule() bool { @@ -32,6 +33,10 @@ func (r Rule) IsRedCamRule() bool { return r == RedCamRule } +func (r Rule) IsNoDarkVideoRule() bool { + return r == NoDarkVideoRule +} + // Rules are the plural set of rules as shown on a JWT token (string array), // with some extra functionality attached such as an easy serializer to JSON. type Rules []Rule @@ -44,6 +49,7 @@ func (r Rules) ToDict() map[string]bool { "IsNoImageRule": false, "IsNoBroadcastRule": false, "IsRedCamRule": false, + "IsNoDarkVideoRule": false, } for _, rule := range r { @@ -59,6 +65,9 @@ func (r Rules) ToDict() map[string]bool { if v := rule.IsRedCamRule(); v { result["IsRedCamRule"] = true } + if v := rule.IsNoDarkVideoRule(); v { + result["IsNoDarkVideoRule"] = true + } } return result diff --git a/pkg/moderation_rules.go b/pkg/moderation_rules.go index 91615c5..2143393 100644 --- a/pkg/moderation_rules.go +++ b/pkg/moderation_rules.go @@ -30,6 +30,9 @@ func (sub *Subscriber) GetModerationRule() *config.ModerationRule { if rule.IsNoBroadcastRule() { rules.NoBroadcast = true } + if rule.IsNoDarkVideoRule() { + rules.NoDarkVideo = true + } } } diff --git a/src/App.vue b/src/App.vue index 1cb157e..205c20a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3043,6 +3043,9 @@ export default { this.webcam.darkVideo.lastAverage = rgb; this.webcam.darkVideo.lastAverageColor = `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, 1)`; + // If they are exempt from the dark video rule, do not check their camera color. + if (this.jwt.rules.IsNoDarkVideoRule) return; + // If the average total color is below the threshold (too dark of a video). let averageBrightness = Math.floor((rgb[0] + rgb[1] + rgb[2]) / 3); if (averageBrightness < this.webcam.darkVideo.threshold) { diff --git a/src/components/MessageBox.vue b/src/components/MessageBox.vue index 5e829aa..54c985d 100644 --- a/src/components/MessageBox.vue +++ b/src/components/MessageBox.vue @@ -331,7 +331,7 @@ export default { @@ -528,7 +528,7 @@ export default { - + Google Translate