add user filtering

This commit is contained in:
Henry Jameson 2025-04-03 00:06:44 +03:00
commit ca75891668
4 changed files with 39 additions and 0 deletions

View file

@ -70,6 +70,7 @@ const FilteringTab = {
checkRegexValid (id) { checkRegexValid (id) {
const filter = this.muteFiltersObject[id] const filter = this.muteFiltersObject[id]
if (filter.type !== 'regexp') return true if (filter.type !== 'regexp') return true
if (filter.type !== 'user_regexp') return true
const { value } = filter const { value } = filter
let valid = true let valid = true
try { try {

View file

@ -128,6 +128,12 @@
<option value="regexp"> <option value="regexp">
{{ $t('settings.filter.regexp') }} {{ $t('settings.filter.regexp') }}
</option> </option>
<option value="user">
{{ $t('settings.filter.user') }}
</option>
<option value="user_regexp">
{{ $t('settings.filter.user_regexp') }}
</option>
</Select> </Select>
</div> </div>
<div class="filter-value filter-field"> <div class="filter-value filter-field">

View file

@ -416,6 +416,8 @@
"type": "Filter type", "type": "Filter type",
"regexp": "RegExp", "regexp": "RegExp",
"plain": "Simple", "plain": "Simple",
"user": "User (Simple)",
"user_regexp": "User (RegExp)",
"hide": "Hide completely", "hide": "Hide completely",
"name": "Name", "name": "Name",
"value": "Value", "value": "Value",

View file

@ -1,6 +1,11 @@
export const muteFilterHits = (muteFilters, status) => { export const muteFilterHits = (muteFilters, status) => {
const statusText = status.text.toLowerCase() const statusText = status.text.toLowerCase()
const statusSummary = status.summary.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 => { return muteFilters.toSorted((a,b) => b.order - a.order).map(filter => {
const { hide, expires, name, value, type, enabled} = filter const { hide, expires, name, value, type, enabled} = filter
@ -25,6 +30,31 @@ export const muteFilterHits = (muteFilters, status) => {
return false 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(_ => _) }).filter(_ => _)
} }