diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2020-07-27 13:34:20 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-27 13:34:20 +0900 |
| commit | cf43dd6ec530ba4a3f589ae917e89533b352f6a3 (patch) | |
| tree | 76f35d06299b40370ec061ee5ed58182847d2e6e /src/misc | |
| parent | refactor(client): Do not mutate prop directly (diff) | |
| download | misskey-cf43dd6ec530ba4a3f589ae917e89533b352f6a3.tar.gz misskey-cf43dd6ec530ba4a3f589ae917e89533b352f6a3.tar.bz2 misskey-cf43dd6ec530ba4a3f589ae917e89533b352f6a3.zip | |
ワードミュート (#6594)
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
Diffstat (limited to 'src/misc')
| -rw-r--r-- | src/misc/check-word-mute.ts | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/misc/check-word-mute.ts b/src/misc/check-word-mute.ts new file mode 100644 index 0000000000..5af267d75d --- /dev/null +++ b/src/misc/check-word-mute.ts @@ -0,0 +1,39 @@ +const RE2 = require('re2'); +import { Note } from '../models/entities/note'; +import { User } from '../models/entities/user'; + +type NoteLike = { + userId: Note['userId']; + text: Note['text']; +}; + +type UserLike = { + id: User['id']; +}; + +export async function checkWordMute(note: NoteLike, me: UserLike | null | undefined, mutedWords: string[][]): Promise<boolean> { + // 自分自身 + if (me && (note.userId === me.id)) return false; + + const words = mutedWords + // Clean up + .map(xs => xs.filter(x => x !== '')) + .filter(xs => xs.length > 0); + + if (words.length > 0) { + if (note.text == null) return false; + + const matched = words.some(and => + and.every(keyword => { + const regexp = keyword.match(/^\/(.+)\/(.*)$/); + if (regexp) { + return new RE2(regexp[1], regexp[2]).test(note.text!); + } + return note.text!.includes(keyword); + })); + + if (matched) return true; + } + + return false; +} |