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(_ => _)
}