diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index 0a630a61b..495ea7e29 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -70,6 +70,7 @@ const FilteringTab = { checkRegexValid (id) { const filter = this.muteFiltersObject[id] if (filter.type !== 'regexp') return true + if (filter.type !== 'user_regexp') return true const { value } = filter let valid = true try { diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index ddbcef536..052e17256 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -128,6 +128,12 @@ + +
diff --git a/src/i18n/en.json b/src/i18n/en.json index da2d79a69..37f52a89f 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -416,6 +416,8 @@ "type": "Filter type", "regexp": "RegExp", "plain": "Simple", + "user": "User (Simple)", + "user_regexp": "User (RegExp)", "hide": "Hide completely", "name": "Name", "value": "Value", diff --git a/src/services/status_parser/status_parser.js b/src/services/status_parser/status_parser.js index 64be68d78..187815daa 100644 --- a/src/services/status_parser/status_parser.js +++ b/src/services/status_parser/status_parser.js @@ -1,6 +1,11 @@ export const muteFilterHits = (muteFilters, status) => { const statusText = status.text.toLowerCase() const statusSummary = status.summary.toLowerCase() + const replyToUser = status.in_reply_to_screen_name?.toLowerCase() + const poster = status.user.screen_name.toLowerCase() + const mentions = (status.attentions || []).map(att => att.screen_name.toLowerCase()) + + console.log(status) return muteFilters.toSorted((a,b) => b.order - a.order).map(filter => { const { hide, expires, name, value, type, enabled} = filter @@ -25,6 +30,31 @@ export const muteFilterHits = (muteFilters, status) => { return false } } + case 'user': { + if ( + poster.includes(value) || + replyToUser.includes(value) || + mentions.some(mention => mention.includes(value)) + ) { + return { hide, name } + } + break + } + case 'user_regexp': { + try { + const re = new RegExp(value, 'i') + if ( + re.test(poster) || + re.test(replyToUser) || + mentions.some(mention => re.test(mention)) + ) { + return { hide, name } + } + return false + } catch { + return false + } + } } }).filter(_ => _) }