2025-03-25 21:26:04 +02:00
|
|
|
export const muteFilterHits = (muteFilters, status) => {
|
2020-05-25 23:38:31 +03:00
|
|
|
const statusText = status.text.toLowerCase()
|
|
|
|
|
const statusSummary = status.summary.toLowerCase()
|
2025-04-03 00:06:44 +03:00
|
|
|
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())
|
|
|
|
|
|
2020-05-25 23:38:31 +03:00
|
|
|
|
2025-03-25 19:48:12 +02:00
|
|
|
return muteFilters.toSorted((a,b) => b.order - a.order).map(filter => {
|
2025-03-25 19:49:02 +02:00
|
|
|
const { hide, expires, name, value, type, enabled} = filter
|
|
|
|
|
if (!enabled) return false
|
2025-03-25 22:23:05 +02:00
|
|
|
if (value === '') return false
|
2025-03-25 19:48:12 +02:00
|
|
|
if (expires !== null && expires < Date.now()) return false
|
|
|
|
|
switch (type) {
|
|
|
|
|
case 'word': {
|
2025-05-13 17:49:42 +03:00
|
|
|
const lowercaseValue = value.toLowerCase()
|
|
|
|
|
if (statusText.toLowerCase().includes(lowercaseValue) || statusSummary.toLowerCase().includes(lowercaseValue)) {
|
2025-03-25 19:48:12 +02:00
|
|
|
return { hide, name }
|
|
|
|
|
}
|
2025-03-25 20:26:43 +02:00
|
|
|
break
|
2025-03-25 19:48:12 +02:00
|
|
|
}
|
|
|
|
|
case 'regexp': {
|
|
|
|
|
try {
|
|
|
|
|
const re = new RegExp(value, 'i')
|
|
|
|
|
if (re.test(statusText) || re.test(statusSummary)) {
|
|
|
|
|
return { hide, name }
|
|
|
|
|
}
|
2025-03-25 20:26:43 +02:00
|
|
|
return false
|
2025-03-25 19:48:12 +02:00
|
|
|
} catch {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-03 00:06:44 +03:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-25 19:48:12 +02:00
|
|
|
}
|
|
|
|
|
}).filter(_ => _)
|
2020-05-25 23:38:31 +03:00
|
|
|
}
|