summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts
diff options
context:
space:
mode:
authorHazel Koehler <acomputerdog@gmail.com>2024-05-03 22:23:24 -0400
committerHazel Koehler <acomputerdog@gmail.com>2024-05-03 22:26:35 -0400
commitcf317da2449f831fd0c80b15df4013ce26e08e91 (patch)
tree79fa1cbfe9ae5018fad95587402c5942db423f4d /packages/frontend/src/scripts
parentfeat: check polls and media for muted keywords (diff)
downloadsharkey-cf317da2449f831fd0c80b15df4013ce26e08e91.tar.gz
sharkey-cf317da2449f831fd0c80b15df4013ce26e08e91.tar.bz2
sharkey-cf317da2449f831fd0c80b15df4013ce26e08e91.zip
revert refactor and cleanup
Diffstat (limited to 'packages/frontend/src/scripts')
-rw-r--r--packages/frontend/src/scripts/check-word-mute.ts51
1 files changed, 26 insertions, 25 deletions
diff --git a/packages/frontend/src/scripts/check-word-mute.ts b/packages/frontend/src/scripts/check-word-mute.ts
index 6f3c6c40de..8d3e96cea5 100644
--- a/packages/frontend/src/scripts/check-word-mute.ts
+++ b/packages/frontend/src/scripts/check-word-mute.ts
@@ -5,41 +5,42 @@
import type { Note, MeDetailed } from "misskey-js/entities.js";
-// TODO: this implementation is horribly inefficient.
-// Each regex is validated (using a regex, ironically), transformed, and then parsed - for each note being checked.
-// These regex objects should be cached somewhere.
-
export function checkWordMute(note: Note, me: MeDetailed | null | undefined, mutedWords: Array<string | string[]>): boolean {
// 自分自身
if (me && (note.userId === me.id)) return false;
- if (mutedWords.length < 1) return false;
-
- const text = getNoteText(note);
- if (text === '') return false;
+ if (mutedWords.length > 0) {
+ const text = getNoteText(note);
- return mutedWords.some(filter => {
- if (Array.isArray(filter)) {
- // Clean up
- const filteredFilter = filter.filter(keyword => keyword !== '');
- if (filteredFilter.length === 0) return false;
+ if (text === '') return false;
- return filteredFilter.every(keyword => text.includes(keyword));
- } else {
- // represents RegExp
- const regexp = filter.match(/^\/(.+)\/(.*)$/);
+ const matched = mutedWords.some(filter => {
+ if (Array.isArray(filter)) {
+ // Clean up
+ const filteredFilter = filter.filter(keyword => keyword !== '');
+ if (filteredFilter.length === 0) return false;
- // This should never happen due to input sanitisation.
- if (!regexp) return false;
+ return filteredFilter.every(keyword => text.includes(keyword));
+ } else {
+ // represents RegExp
+ const regexp = filter.match(/^\/(.+)\/(.*)$/);
- try {
- return new RegExp(regexp[1], regexp[2]).test(text);
- } catch (err) {
// This should never happen due to input sanitisation.
- return false;
+ if (!regexp) return false;
+
+ try {
+ return new RegExp(regexp[1], regexp[2]).test(text);
+ } catch (err) {
+ // This should never happen due to input sanitisation.
+ return false;
+ }
}
- }
- });
+ });
+
+ if (matched) return true;
+ }
+
+ return false;
}
function getNoteText(note: Note): string {