diff --git a/package.json b/package.json index a18cd5ed..d8b58b27 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "frankerfacez", "author": "Dan Salvato LLC", - "version": "4.35.2", + "version": "4.36.0", "description": "FrankerFaceZ is a Twitch enhancement suite.", "private": true, "license": "Apache-2.0", diff --git a/src/modules/chat/badges.jsx b/src/modules/chat/badges.jsx index c4ab7f19..c485af81 100644 --- a/src/modules/chat/badges.jsx +++ b/src/modules/chat/badges.jsx @@ -44,7 +44,10 @@ const CSS_BADGES = { turbo: { 1: { color: '#59399A' } }, premium: { 1: { color: '#00A0D6' } }, 'anonymous-cheerer': { 1: { color: '#4B367C' } }, - 'clip-champ': { 1: { color: '#9146FF' } } + 'clip-champ': { 1: { color: '#9146FF' } }, + 'artist-badge': { 1: { color: '#1e69ff' } }, + 'no_audio': { 1: { color: '#323239' } }, + 'no_video': { 1: { color: '#323239' } } } } diff --git a/src/modules/chat/index.js b/src/modules/chat/index.js index 702ee3fc..75ab4b1a 100644 --- a/src/modules/chat/index.js +++ b/src/modules/chat/index.js @@ -37,6 +37,10 @@ function sortPriorityColorTerms(list) { const TERM_FLAGS = ['g', 'gi']; +const UNBLOCKABLE_TOKENS = [ + 'filter_test' +]; + function formatTerms(data) { const out = []; @@ -441,6 +445,29 @@ export default class Chat extends Module { } }); + this.settings.add('chat.filtering.hidden-tokens', { + default: [], + type: 'array_merge', + always_inherit: true, + process(ctx, val) { + const out = new Set; + for(const v of val) + if ( v?.v || ! UNBLOCKABLE_TOKENS.includes(v.v) ) + out.add(v.v); + + return out; + }, + + ui: { + path: 'Chat > Appearance >> Hidden Token Types @{"description":"This filter allows you to prevent specific content token types from appearing chat messages, such as hiding all cheers or emotes."}', + component: 'blocked-types', + data: () => Object + .keys(this.tokenizers) + .filter(key => ! UNBLOCKABLE_TOKENS.includes(key) && this.tokenizers[key]?.render) + .sort() + } + }); + this.settings.add('chat.filtering.highlight-basic-users', { default: [], type: 'array_merge', @@ -1978,12 +2005,14 @@ export default class Chat extends Module { tokenizers = this.tokenizers, l = tokens.length; + const hidden = this.context.get('chat.filtering.hidden-tokens'); + for(let i=0; i < l; i++) { const token = tokens[i], type = token.type, tk = tokenizers[type]; - if ( token.hidden ) + if ( token.hidden || hidden.has(type) ) continue; let res; diff --git a/src/modules/main_menu/components/filter-editor.vue b/src/modules/main_menu/components/filter-editor.vue index 34ee05e7..f16ecb20 100644 --- a/src/modules/main_menu/components/filter-editor.vue +++ b/src/modules/main_menu/components/filter-editor.vue @@ -10,6 +10,7 @@ :key="rule.id" :value="rule" :filters="filters" + :preview="preview" :context="context" :data-id="rule.id" @input="updateRule(rule.id, $event)" @@ -61,10 +62,15 @@ export default { value: Array, filters: Object, maxRules: { - tpye: Number, + type: Number, required: false, default: 0 }, + preview: { + type: Boolean, + required: false, + default: true + }, context: { type: Object, required: false diff --git a/src/modules/main_menu/components/filter-rule-editor.vue b/src/modules/main_menu/components/filter-rule-editor.vue index 5cbb4bb9..2e60acb1 100644 --- a/src/modules/main_menu/components/filter-rule-editor.vue +++ b/src/modules/main_menu/components/filter-rule-editor.vue @@ -10,10 +10,11 @@ :type="type" :filters="filters" :context="context" + :preview="preview" />