diff --git a/package.json b/package.json
index 9f5df7dc..9ea23588 100755
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "frankerfacez",
"author": "Dan Salvato LLC",
- "version": "4.14.1",
+ "version": "4.14.2",
"description": "FrankerFaceZ is a Twitch enhancement suite.",
"license": "Apache-2.0",
"scripts": {
diff --git a/src/i18n.js b/src/i18n.js
index 15d0d5f5..bb983da0 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -317,8 +317,8 @@ export class TranslationManager extends Module {
}
- async loadStrings() {
- if ( this.strings_loaded )
+ async loadStrings(ignore_loaded = false) {
+ if ( this.strings_loaded && ! ignore_loaded )
return;
if ( this.strings_loading )
diff --git a/src/modules/chat/index.js b/src/modules/chat/index.js
index d163c1f1..8f5da8e3 100644
--- a/src/modules/chat/index.js
+++ b/src/modules/chat/index.js
@@ -232,6 +232,34 @@ export default class Chat extends Module {
}
});
+ this.settings.add('chat.automod.delete-messages', {
+ default: true,
+ ui: {
+ path: 'Chat > Filtering >> AutoMod Filters @{"description": "Extra configuration for Twitch\'s native `Chat Filters`."}',
+ title: 'Mark messages as deleted if they contain filtered phrases.',
+ component: 'setting-check-box'
+ }
+ });
+
+ this.settings.add('chat.automod.remove-messages', {
+ default: true,
+ ui: {
+ path: 'Chat > Filtering >> AutoMod Filters',
+ title: 'Remove messages entirely if they contain filtered phrases.',
+ component: 'setting-check-box'
+ }
+ });
+
+ this.settings.add('chat.automod.run-as-mod', {
+ default: false,
+ ui: {
+ path: 'Chat > Filtering >> AutoMod Filters',
+ title: 'Use Chat Filters as a moderator.',
+ description: 'By default, Twitch\'s Chat Filters feature does not function for moderators. This overrides that behavior.',
+ component: 'setting-check-box'
+ }
+ });
+
this.settings.add('chat.filtering.process-own', {
default: false,
ui: {
diff --git a/src/modules/chat/tokenizers.jsx b/src/modules/chat/tokenizers.jsx
index 50b159fb..9f2f3302 100644
--- a/src/modules/chat/tokenizers.jsx
+++ b/src/modules/chat/tokenizers.jsx
@@ -647,6 +647,17 @@ export const AutomoddedTerms = {
let idx = 0,
fix = 0;
+ const remove = this.context.get('chat.automod.remove-messages');
+ const del = this.context.get('chat.automod.delete-messages');
+
+ if ( del )
+ msg.deleted = true;
+
+ if ( remove ) {
+ msg.ffz_removed = true;
+ return tokens;
+ }
+
for(const token of tokens) {
const length = token.length || (token.text && split_chars(token.text).length) || 0,
t_start = idx,
@@ -1085,7 +1096,9 @@ export const AddonEmotes = {
plain_name = true;
name = `:${emoji.names[0]}:${vcode ? `:${vcode.names[0]}:` : ''}`;
- source = this.i18n.t('tooltip.emoji', 'Emoji - {category}', emoji);
+
+ const category = emoji.category ? this.i18n.t(`emoji.category.${emoji.category.toSnakeCase()}`, emoji.category) : null;
+ source = this.i18n.t('tooltip.emoji', 'Emoji - {category}', {category});
} else
return;
diff --git a/src/modules/translation_ui/components/i18n-entry.vue b/src/modules/translation_ui/components/i18n-entry.vue
index 5d989db5..419e03bd 100644
--- a/src/modules/translation_ui/components/i18n-entry.vue
+++ b/src/modules/translation_ui/components/i18n-entry.vue
@@ -22,7 +22,7 @@
ref="editor"
v-model="value"
:class="{'tw-textarea--error': ! valid}"
- class="tw-block tw-font-size-6 tw-full-width tw-full-height tw-textarea"
+ class="tw-block tw-font-size-6 tw-full-width tw-textarea"
@input="onInput"
@blur="onBlur"
@focus="open = true"
@@ -38,10 +38,15 @@
- {{ line }}
+
+ {{ line[0] }} ({{ line[1] }})
+
+
+ {{ line }}
+
@@ -187,7 +192,22 @@ export default {
if ( ! Array.isArray(calls) || ! calls.length )
return null;
- return calls.join('\n').split(/\n/);
+ const lines = calls.join('\n').split(/\n/),
+ out = [];
+
+ for(const line of lines) {
+ const match = /^(?:(.*?) \()?(\/[^:\)]+):(\d+):(\d+)\)?$/.exec(line);
+ if ( match )
+ out.push([
+ match[1] || '???',
+ `${match[2]}:${match[3]}:${match[4]}`,
+ `https://www.github.com/FrankerFaceZ/FrankerFaceZ/blob/master${match[2]}#L${match[3]}`
+ ]);
+ else
+ out.push(line);
+ }
+
+ return out;
},
preview() {
diff --git a/src/modules/translation_ui/components/translation-ui.vue b/src/modules/translation_ui/components/translation-ui.vue
index f9e5e6e4..d555820d 100644
--- a/src/modules/translation_ui/components/translation-ui.vue
+++ b/src/modules/translation_ui/components/translation-ui.vue
@@ -34,6 +34,14 @@
{{ t('i18n.ui.save', 'Generate Change Blob') }}
+