export function checkWordMute( note: Record, me: Record | null | undefined, mutedWords: Array, ): boolean { // 自分自身 if (me && note.userId === me.id) return false; if (mutedWords.length > 0) { const text = ((note.cw ?? "") + "\n" + (note.text ?? "")).trim(); if (text === "") return false; const matched = mutedWords.some((filter) => { if (Array.isArray(filter)) { // Clean up const filteredFilter = filter.filter((keyword) => keyword !== ""); if (filteredFilter.length === 0) return false; return filteredFilter.every((keyword) => text.includes(keyword)); } else { // represents RegExp const regexp = filter.match(/^\/(.+)\/(.*)$/); // This should never happen due to input sanitisation. 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; }