From a95c2ebccda54146fdab0d5d084731a0b0e58ef0 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Thu, 5 Nov 2020 14:41:58 -0500 Subject: [PATCH] 4.20.45 * Changed: Add a notice to the Player Statistics metadata when an unexpected player type (non-`site`) is detected, which may indicate tampering by third-party software such as ad blockers. This notice is only intended to serve as a debugging tool for users, allowing them to easily determine whether or not a player type modification has been used. --- package.json | 2 +- src/modules/metadata.jsx | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index de6d5860..e28a0f9a 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "frankerfacez", "author": "Dan Salvato LLC", - "version": "4.20.44", + "version": "4.20.45", "description": "FrankerFaceZ is a Twitch enhancement suite.", "license": "Apache-2.0", "scripts": { diff --git a/src/modules/metadata.jsx b/src/modules/metadata.jsx index 5f929ebc..2b654c79 100644 --- a/src/modules/metadata.jsx +++ b/src/modules/metadata.jsx @@ -346,6 +346,16 @@ export default class Metadata extends Module { } } + let tampered = false; + try { + const url = player.core.state.path; + if ( url.includes('/api/channel/hls/') ) { + const data = JSON.parse(new URL(url).searchParams.get('token')); + tampered = data && data.player_type && data.player_type !== 'site' ? data.player_type : false; + } + } catch(err) { /* no op */ } + + if ( ! stats || stats.hlsLatencyBroadcaster < -100 ) return {stats}; @@ -359,7 +369,8 @@ export default class Metadata extends Module { drift, rate: stats.rate == null ? 1 : stats.rate, delay: stats.hlsLatencyBroadcaster, - old: stats.hlsLatencyBroadcaster > 180 + old: stats.hlsLatencyBroadcaster > 180, + tampered } }, @@ -409,6 +420,16 @@ export default class Metadata extends Module { }, tooltip(data) { + const tampered = data.tampered ? (
+ {this.i18n.t( + 'metadata.player-stats.tampered', + 'Your player has an unexpected player type ({type}), which may affect your viewing experience.', + { + type: data.tampered + } + )} +
) : null; + const delayed = data.drift > 5000 && (
{this.i18n.t( 'metadata.player-stats.delay-warning', @@ -429,7 +450,8 @@ export default class Metadata extends Module { return [ delayed, ff, - this.i18n.t('metadata.player-stats.latency-tip', 'Stream Latency') + this.i18n.t('metadata.player-stats.latency-tip', 'Stream Latency'), + tampered ]; const stats = data.stats, @@ -455,7 +477,8 @@ export default class Metadata extends Module {
,
{video_info} -
+ , + tampered ]; return [ @@ -466,7 +489,8 @@ export default class Metadata extends Module { ),
{video_info} -
+ , + tampered ]; } }